Name: series-workflowswc89 Phase: Failed StartedAt: 2026-06-24 08:36:59 +0000 UTC FinishedAt: 2026-06-24 08:51:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswc89[0] Phase: Succeeded StartedAt: 2026-06-24 08:36:59 +0000 UTC FinishedAt: 2026-06-24 08:51:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswc89[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 08:36:59 +0000 UTC FinishedAt: 2026-06-24 08:51:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmFhNTFkMTM2YzVmZThkOGZiYjdkNjljYTM1ZmQ0ZmUzMDFkMjYyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA4OjQ2OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi43ODEyMDA4NjA4ODY0NSAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuQEAgLTEzNiw2ICYjNDM7MTM2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xuIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIHtcbkBAIC0xNDUsNiAmIzQzOzE0NiwxMiBAQCBzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYWE1MWQxMzZjNWZlOGQ4ZmJiN2Q2OWNhMzVmZDRmZTMwMWQyNjJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMDg6NDY6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jCmluZGV4IDJjY2JhYmZiMmNjMTdhLi43ODEyMDA4NjA4ODY0NSAxMDA2NDQKLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV92bWFfbWFwcGVkLmMKQEAgLTEzNiw2ICYjNDM7MTM2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqLwogc3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiB7CkBAIC0xNDUsNiAmIzQzOzE0NiwxMiBAQCBzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJcmV0dXJuIGZhbHNlOwogCXJldHVybiB0cnVlOwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgogCiBzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsbHkgd3JhcHBpbmcgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIHdpdGggYSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNvLCBpZiBUSFAgaXMgZW5hYmxlZCwgYGNoZWNrX3BtZGAgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIElmIG5vdCwgaXQganVzdCByZXR1cm5zIGZhbHNlLiBUaGF0JiMzOTtzIGEgY2xldmVyIHdheSB0byBrZWVwIHRoaW5ncyBjbGVhbiBhbmQgZnVuY3Rpb25hbC4gTm93LCB0byB0cnVseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIEkgbmVlZCB0byBzZWUgKmhvdyogYGNoZWNrX3BtZGAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AuIEkmIzM5O2xsIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgaXRzIHVzYWdlIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhcm91bmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBjb250cm9sIGZsb3csIGFuZCB3aHkgdGhleSBvcHRlZCBmb3IgdGhpcyBhcHByb2FjaC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0eSBUSFAgYnJpbmdzIGludG8gdGhlIG1peC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQwLS8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDE6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDIte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0OS0jZWxzZVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTUwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUxLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY0LVx0XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpIHx8XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNjU6XHRcdFx0XHQgICAgIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ni1cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzEtXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzI6XHRcdFx0XHRpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3My1cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHJlc29sdmluZyBhIGJ1aWxkIG9yIGxvZ2ljYWwgZXJyb3IsIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydDsgY2F0Y2hpbmcgdGhlc2UgZWRnZSBjYXNlcyBpcyBpbXBvcnRhbnQuIE5vdywgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYGNoZWNrX3BtZGAgaXMgdXNlZCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCgpUaGUgY29kZSYjMzk7cyBiZWhhdmlvciBkaWN0YXRlcyB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG9mZiwgYGNoZWNrX3BtZGAgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIGBmYWxzZWAuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIElzIHRoaXMgdHJ1bHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgb3IgaXMgdGhpcyBtb3JlIG9mIGEgY29ycmVjdGlvbiBmb3IgYW4gZXhpc3RpbmcgY29uZGl0aW9uPyBZZXMsIHRoaXMgYmVoYXZpb3IgY2hhbmdlcyB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5vdCBlbmFibGVkLgoKTXkgY29uY2VybiBpcyB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGVyZSBzaG91bGRuJiMzOTt0ICpiZSogYW55IGh1Z2UgUE1EcywgcmlnaHQ/IFNvLCBpcyBgY2hlY2tfcG1kYCBvbmx5IGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBodWdlIFBNRHMgdG8gYmVnaW4gd2l0aD8gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCBmaWxlLiBUaW1lIHRvIGludmVzdGlnYXRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0XHQgKi9cbiAyNTE6XHRcdFx0cG1kZSA9IHBtZHBfZ2V0X2xvY2tsZXNzKHB2bXctXHUwMDNlcG1kKTtcbiAyNTI6XHRcbiAyNTM6XHRcdFx0aWYgKHBtZF90cmFuc19odWdlKHBtZGUpIHx8IHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkpIHtcbiAyNTQ6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjU1Olx0XHRcdFx0cG1kZSA9ICpwdm13LVx1MDAzZXBtZDtcbiAyNTY6XHRcdFx0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4gMjU3Olx0XHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuIDI1ODpcdFxuIDI1OTpcdFx0XHRcdFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIHx8XG4gMjYwOlx0XHRcdFx0XHQgICAgIShwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTikpXG4gMjYxOlx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjYyOlx0XHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuIDI2MzpcdFxuIDI2NDpcdFx0XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpIHx8XG4gMjY1Olx0XHRcdFx0XHQgICAgIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbiAyNjY6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNjc6XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuIDI2ODpcdFx0XHRcdH1cbiAyNjk6XHRcdFx0XHRpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkge1xuIDI3MDpcdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuIDI3MTpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI3MjpcdFx0XHRcdFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXG4gMjczOlx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjc0Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNzU6XHRcdFx0XHR9XG4gMjc2Olx0XHRcdFx0LyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cbiAyNzc6XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4gMjc4Olx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuIDI3OTpcdFx0XHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuIDI4MDpcdFx0XHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiAyODE6XHRcbiAyODI6XHRcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gMjgzOlx0XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjg0Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyODU6XHRcdFx0XHR9XG4gMjg2Olx0XG4gMjg3Olx0XHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuIDI4ODpcdFx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuIDI4OTpcdFx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4gMjkwOlx0XHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbiAyOTE6XHRcdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjkyOlx0XG4gMjkzOlx0XHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbiAyOTQ6XHRcdFx0XHRjb250aW51ZTtcbiAyOTU6XHRcdFx0fVxuIDI5NjpcdFx0XHRpZiAoIW1hcF9wdGUocHZtdywgXHUwMDI2cG1kZSwgXHUwMDI2cHRsKSkge1xuIDI5NzpcdFx0XHRcdGlmICghcHZtdy1cdTAwM2VwdGUpXG4gMjk4Olx0XHRcdFx0XHRnb3RvIHJlc3RhcnQ7XG4gMjk5Olx0XHRcdFx0Z290byBuZXh0X3B0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlIFBhZ2UgTWlncmF0aW9uIGluIHRoZSBBYnNlbmNlIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGJlaGF2ZXMgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApIGFyZW4mIzM5O3QgZW5hYmxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJiMzOTt0IGRlZmluZWQsIHRoZW4gYHBtZF90cmFuc19odWdlYCBpcyAqYWxtb3N0IGNlcnRhaW5seSogYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlLiBCdXQgdGhlbiBJIHJlbWVtYmVyLCBoYW5nIG9uIGEgc2Vjb25kLCB3aGF0IGFib3V0IGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YD8gQ291bGQgdGhhdCBwb3RlbnRpYWxseSBiZSB0cnVlIGV2ZW4gd2l0aG91dCBUSFA/IEl0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuCgpEaWdnaW5nIGRlZXBlciwgaWYgVEhQIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBpcyBwcm9iYWJseSBnb2luZyB0byByZXR1cm4gZmFsc2UsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBzY2VuYXJpby4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGF0IGBjaGVja19wbWRgIGNvdWxkIGJlIGVudGlyZWx5IHVucmVhY2hhYmxlIGluIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgdGltZSB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLgoKVG8gY29uZmlybSBteSBoeXBvdGhlc2VzIGFuZCBnYWluIGEgY29uY3JldGUgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkKClgIGFuZCBgcG1kX3RyYW5zX2h1Z2UoKWAuIEFuYWx5emluZyB0aG9zZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXJzIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgcG1kX3RyYW5zX2h1Z2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaD0yNT1zdGF0aWMgaW5saW5lIHBtZF90IHB0ZV9wbWQocHRlX3QgcHRlKVxuLS1cbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmgtNDItXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oOjQzOiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVx0KHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFdfU1opXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQ0LVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmg9MTgzPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaC0xOTQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaDoxOTU6I2RlZmluZSBwbWRfdHJhbnNfaHVnZShwbWQpXHQocG1kX3ZhbChwbWQpIFx1MDAyNlx1MDAyNiAhcG1kX3RhYmxlKHBtZCkpXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oLTE5Ni0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgY2hlY2tfcG1kYCBhbmQgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBjaGVja19wbWRgLiBSaWdodCwgaXQmIzM5O3MgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gTm93LCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiBgY2hlY2tfcG1kYCBpcyBnb2luZyB0byByZXR1cm4gYGZhbHNlYCwgcmlnaHQ/IEhtbSwgaXMgdGhpcyBwYXRjaCBqdXN0IGFkZHJlc3Npbmcgc29tZSBraW5kIG9mIGJ1aWxkIGlzc3VlPyBJdCBmZWVscyB0aGF0IHdheS4gSSBzaG91bGQgcmVhbGx5IHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGZpbGUgKmJlZm9yZSogdGhpcyBwYXRjaCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGFjdCwgYW5kIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQxOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQyLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDktI2Vsc2Vcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1MDpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTg3PWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2NC1cdFx0XHRcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSB8fFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjY1Olx0XHRcdFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjYtXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjcxLVx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MjcyOlx0XHRcdFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzMtXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipQTUQgSW52ZXN0aWdhdGlvbiAtIEEgUXVpY2sgRGlncmVzc2lvbioqCgpSaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGBjaGVja19wbWRgIGlzIHJlbHlpbmcgb24gYEhQQUdFX1BNRF9OUmAuIFRoYXQgdHJpZ2dlcnMgc29tZXRoaW5nIGluIG15IGhlYWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGxvZ2ljIGNvcnJlY3RseSwgYW5kIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzbiYjMzk7dCBtYXNraW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsLiBMZXQgbWUgcXVpY2tseSBqdW1wIGJhY2sgdG8gdGhlIHNvdXJjZSBhbmQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBjaGVja19wbWRgLiBKdXN0IGEgc2FuaXR5IGNoZWNrLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiBob3cgaXQgdXNlcyBgSFBBR0VfUE1EX05SYCB3aXRoaW4gaXRzIGNvbnRleHQsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0JiMzOTtzIG1ha2luZyBhYm91dCB0aGUgUE1EIHN0cnVjdHVyZSBpdHNlbGYuIEdvdHRhIGtlZXAgdGhlIHdob2xlIHBpY3R1cmUgY2xlYXIgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0XHRcdHJldHVybiBmYWxzZTtcbiAxMzY6XHRcdHJldHVybiB0cnVlO1xuIDEzNzpcdH1cbiAxMzg6XHRcbiAxMzk6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gMTQwOlx0LyogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gcmFuZ2VzIG92ZXJsYXAuICBDYXJlZnVsIHRvIG5vdCBvdmVyZmxvdy4gKi9cbiAxNDE6XHRzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiAxNDI6XHR7XG4gMTQzOlx0XHRpZiAoKHBmbiAmIzQzOyBIUEFHRV9QTURfTlIgLSAxKSBcdTAwM2MgcHZtdy1cdTAwM2VwZm4pXG4gMTQ0Olx0XHRcdHJldHVybiBmYWxzZTtcbiAxNDU6XHRcdGlmIChwZm4gXHUwMDNlIHB2bXctXHUwMDNlcGZuICYjNDM7IHB2bXctXHUwMDNlbnJfcGFnZXMgLSAxKVxuIDE0NjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTQ3Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxNDg6XHR9XG4gMTQ5Olx0I2Vsc2VcbiAxNTA6XHRzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiAxNTE6XHR7XG4gMTUyOlx0XHRyZXR1cm4gZmFsc2U7XG4gMTUzOlx0fVxuIDE1NDpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDgyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdoZXJlIHRoZSBiZWhhdmlvciBzZWVtcyBkZXBlbmRlbnQgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIElmIHRoYXQmIzM5O3MgKm5vdCogc2V0LCB0aGUgdmFsdWUgb2YgYEhQQUdFX1BNRF9OUmAgY291bGQgYmUgcHJvYmxlbWF0aWMg4oCTIGVpdGhlciB1bmRlZmluZWQsIG9yIHBvc3NpYmx5IGp1c3QgMS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBCdXQgaG9sZCBvbiwgaXNuJiMzOTt0IGBIUEFHRV9QTURfTlJgICp1c3VhbGx5KiBkZWZpbmVkIHNvbWV3aGVyZSBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbi4gSSBoYXZlIGEgaHVuY2ggaXQmIzM5O3MgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoYXQgaW5jbHVkZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgSFBBR0VfUE1EX05SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExNy0jZGVmaW5lIEhQQUdFX1BNRF9PUkRFUiAoSFBBR0VfUE1EX1NISUZULVBBR0VfU0hJRlQpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMTg6I2RlZmluZSBIUEFHRV9QTURfTlIgKDFcdTAwM2NcdTAwM2NIUEFHRV9QTURfT1JERVIpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTktI2RlZmluZSBIUEFHRV9QTURfTUFTS1x0KH4oSFBBR0VfUE1EX1NJWkUgLSAxKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBodWdlIHBhZ2Ugc3R1ZmYgYWdhaW4sIGFuZCBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYEhQQUdFX1BNRF9TSElGVGAgY29uc3RhbnQgaXMgZGVmaW5lZC4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGl0ISAqYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCouLi4gb2YgY291cnNlLiBJdCB3b3VsZG4mIzM5O3QgYmUgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaGVhZGVyLCBidXQgcmF0aGVyIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMuIEdvdCBpdC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIHBsYWNlIHRvIGJlIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgTGludXgga2VybmVsIGFuZCBodWdlIG1lbW9yeSBwYWdlcy4gTm93IEkgY2FuIGdldCBvbiB3aXRoIHdoYXRldmVyIEkgd2FzIHJlc2VhcmNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgSFBBR0VfUE1EX1NISUZUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwOS0jaWZkZWYgQ09ORklHX1BHVEFCTEVfSEFTX0hVR0VfTEVBVkVTXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMTA6I2RlZmluZSBIUEFHRV9QTURfU0hJRlQgUE1EX1NISUZUXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTEtI2RlZmluZSBIUEFHRV9QVURfU0hJRlQgUFVEX1NISUZUXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTItI2Vsc2VcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjExMzojZGVmaW5lIEhQQUdFX1BNRF9TSElGVCAoeyBCVUlMRF9CVUcoKTsgMDsgfSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExNC0jZGVmaW5lIEhQQUdFX1BVRF9TSElGVCAoeyBCVUlMRF9CVUcoKTsgMDsgfSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvbiBgY2hlY2tfcG1kYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXNuJiMzOTt0IHNldCwgdGhlbiBgSFBBR0VfUE1EX1NISUZUYCBiZWNvbWVzIGEgYEJVSUxEX0JVRygpYCwgd2hpY2ggaXMgYSBjb21waWxlLXRpbWUgZXJyb3IuIE5vdywgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXMgdGllZCB0byBlaXRoZXIgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYENPTkZJR19IVUdFVExCX1BBR0VgLiBSaWdodCwgc28gaWYgbmVpdGhlciBvZiB0aG9zZSBhcmUgc2V0LCB3ZSYjMzk7cmUgZ3VhcmFudGVlZCBhIGJ1aWxkIGZhaWx1cmUgd2hlcmUgYEhQQUdFX1BNRF9TSElGVGAgaXMgdXNlZCwgc3BlY2lmaWNhbGx5IGR1ZSB0byB0aGUgYEJVSUxEX0JVRygpYC4gVGhpcyBgY2hlY2tfcG1kYCBmdW5jdGlvbiByZWxpZXMgb24gYEhQQUdFX1BNRF9OUmAsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhhdCBlcnJvci4KCkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGluY2x1ZGVzIGFuIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4uLiBBaCwgSSBzZWUuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpub3QqIHNldCwgYGNoZWNrX3BtZGAganVzdCByZXR1cm5zIGBmYWxzZWAuIFNvLCBpdCBhcHBlYXJzIHRoaXMgaXMgYSBidWlsZCBmaXgsIHJpZ2h0PwoKQnV0IHdoeSBpcyBgY2hlY2tfcG1kYCBldmVuIGNhbGxlZCBpbiB0aGUgbm9uLWBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY2FzZT8gTGV0IG1lIHRyYWNlIHRoaXMuLi4gSXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gZWl0aGVyIGBwbWRfdHJhbnNfaHVnZShwbWRlKWAgb3IgYHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSlgIGlzIHRydWUuIEluIHRoZSBjb250ZXh0IG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG5vdCBiZWluZyBzZXQsIGBwbWRfdHJhbnNfaHVnZWAgd2lsbCAqYWx3YXlzKiBiZSBmYWxzZS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgd2hhdCBhYm91dCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWA/IEkgbmVlZCB0byBkaWcgaW50byB0aGF0IG9uZSBhIGxpdHRsZSBtb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfbWlncmF0aW9uX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xNzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTc1NC1cdFx0c2V0X3BtZF9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHBtZHAsIHBtZCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTc1NTpcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTc1Ni1cdFx0cG1kID0gcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCk7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTI1NDM9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU1MS1cdFx0c2V0X3BtZF9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHBtZHAsIHBtZCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjU1MjpcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU1My1cdFx0cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AocG1kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01OTE9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk4LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTk5OiAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAwLSAqIEBwbWQ6IFBNRCBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcbi0tXG5tbS9obW0uYz0zOTY9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL2htbS5jLTQxNC1cbm1tL2htbS5jOjQxNTpcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZCkpIHtcbm1tL2htbS5jLTQxNi1cdFx0aWYgKGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgMCkpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyODA9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzAwLVx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmM6MjMwMTpcdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjMwMi1cdFx0Z290byBvdXQ7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNDgwPXN0YXRpYyBwbWRfdCBtb3ZlX3NvZnRfZGlydHlfcG1kKHBtZF90IHBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0ODItXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ4MzpcdFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kKSkpXG5tbS9odWdlX21lbW9yeS5jLTI0ODQtXHRcdFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI3NDg9aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3NzUtXHRcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xubW0vaHVnZV9tZW1vcnkuYzoyNzc2Olx0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShzcmNfcG1kdmFsKSkge1xubW0vaHVnZV9tZW1vcnkuYy0yNzc3LVx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXHUwMDI2c3JjX3BtZHZhbCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzA2MS1cdFx0XHRyZXR1cm47XG5tbS9odWdlX21lbW9yeS5jOjMwNjI6XHRcdGlmICh1bmxpa2VseShwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9sZF9wbWQpKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMDYzLVx0XHRcdGNvbnN0IHNvZnRsZWFmX3Qgb2xkX2VudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQob2xkX3BtZCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMDk2LVxubW0vaHVnZV9tZW1vcnkuYzozMDk3Olx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMzA5OC1cdFx0c29mdGxlYWZfdCBlbnRyeTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMyMjctXHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MzIyODpcdGlmIChmcmVlemUgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvbGRfcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMjI5LVx0XHRwdGVfdCBlbnRyeTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMzMDMtXG5tbS9odWdlX21lbW9yeS5jOjMzMDQ6XHRpZiAoIXBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpXG5tbS9odWdlX21lbW9yeS5jLTMzMDUtXHRcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgcGFnZSwgdm1hKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTA5MD1zdGF0aWMgaW5saW5lIGVudW0gc2Nhbl9yZXN1bHQgY2hlY2tfcG1kX3N0YXRlKHBtZF90ICpwbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTExMDEtXHQgKi9cbm1tL2todWdlcGFnZWQuYzoxMTAyOlx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkpXG5tbS9raHVnZXBhZ2VkLmMtMTEwMy1cdFx0cmV0dXJuIFNDQU5fUE1EX01BUFBFRDtcbi0tXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTM5Mi1cdFx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL21hZHZpc2UuYzozOTM6XHRcdFx0XHRcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG5tbS9tYWR2aXNlLmMtMzk0LVx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4tLVxubW0vbWVtb3J5LmM9NjQxNz1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy02NDkzLVxubW0vbWVtb3J5LmM6NjQ5NDpcdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jLTY0OTUtXHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCB2bWYucG1kKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz02NTI9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTYtXG5tbS9tZW1wb2xpY3kuYzo2NTc6XHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbm1tL21lbXBvbGljeS5jLTY1OC1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbi0tXG5tbS9taWdyYXRlLmM9NTQ5PXZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuLS1cbm1tL21pZ3JhdGUuYy01NTMtXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kKTtcbm1tL21pZ3JhdGUuYzo1NTQ6XHRpZiAoIXBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpXG5tbS9taWdyYXRlLmMtNTU1LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjUyLVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjUzOlx0XHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kZSkgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU0LVx0XHRcdHB2bXctXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXHUwMDNlcG1kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgUGFnZSBUYWJsZSBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgZnVuY3Rpb24gYWN0dWFsbHkgY29tZXMgZnJvbS4gT2theSwgYSBxdWljayBzY2FuIHN1Z2dlc3RzIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIGZvciBsb3ctbGV2ZWwgcGFnZSB0YWJsZSBvcGVyYXRpb25zIHRvIHJlc2lkZS4gTm93LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGF0IGhlYWRlciBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYHBtZF9pc19taWdyYXRpb25fZW50cnlgLiBOZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNyaXRlcmlhIHRoaXMgZnVuY3Rpb24gdXNlcyB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBwYWdlIHRhYmxlIGVudHJ5IGlzIGEgbWlncmF0aW9uIGVudHJ5LiBQcm9iYWJseSBjaGVja2luZyBmbGFncyBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgYml0IHBhdHRlcm5zIHdpdGhpbiB0aGUgYHBtZF90YCBzdHJ1Y3R1cmUuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2UgbWlncmF0aW9ucy4gVGltZSB0byBkaWcgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtaWdyYXRpb24gZW50cmllcyBhdCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5IChQTUQpIGxldmVsLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgdGhlIHNvdXJjZSBjb2RlIGZvciBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRlZmluaXRpb24gaXMgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBpbmNsdWRlIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBnZW5lcmFsIHBhZ2Ugb3BlcmF0aW9ucy4gUmlnaHQsIGdvb2QgYmV0LCBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0ICogQHBtZDogUE1EIGVudHJ5LlxuIDYwMTpcdCAqXG4gNjAyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgUE1EIGVuY29kZXMgYSBtaWdyYXRpb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRfdCBwbWQpXG4gNjA1Olx0e1xuIDYwNjpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbiA2MDc6XHR9XG4gNjA4Olx0XG4gNjA5Olx0LyoqXG4gNjEwOlx0ICogc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KCkgLSBJcyB0aGUgc3BlY2lmaWVkIHNvZnRsZWFmIGVudHJ5IG9idGFpbmVkIGZyb21cbiA2MTE6XHQgKiBhIFBNRCBvbmUgdGhhdCB3ZSBzdXBwb3J0IGF0IFBNRCBsZXZlbD9cbiA2MTI6XHQgKiBAZW50cnk6IEVudHJ5IHRvIGNoZWNrLlxuIDYxMzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIHNvZnRsZWFmIGVudHJ5IGlzIHZhbGlkIGF0IFBNRCwgb3RoZXJ3aXNlIGZhbHNlLlxuIDYxNDpcdCAqL1xuIDYxNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcbiA2MTY6XHR7XG4gNjE3Olx0XHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xuIDYxODpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuIDYxOTpcdFx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc29mdGxlYWZfZnJvbV9wbWRgIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBzb2Z0bGVhZl9mcm9tX3BtZGAgYmVpbmcgdXRpbGl6ZWQgaGVyZS4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBNeSBicmFpbiBpbW1lZGlhdGVseSBmbGFncyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgVEhQIGVuYWJsZW1lbnQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGlzLCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqbm90KiBlbmFibGVkLCBpcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCB0byBldmFsdWF0ZSB0byB0cnVlPyBJJiMzOTttIGRvdWJ0ZnVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gY2hlY2sgd2hhdCBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgcmV0dXJucyB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlIHRvIHRoZSBicm9hZGVyIFRIUCBjb250ZXh0LiBHb3R0YSBuYWlsIGRvd24gdGhlc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIE9wdGltaXphdGlvbioqCgpIbW0sIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gdGhpcyBjb2RlLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBzbmlwcGV0LCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMuLi4gY291bGQgdGhpcyBiZSBhbiBpbmxpbmUgZnVuY3Rpb24gY2FuZGlkYXRlPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgd2hlbiBJIHNlZSBhIHNob3J0LCBvZnRlbi11c2VkIHBpZWNlIG9mIGxvZ2ljIGxpa2UgdGhpcy4gSSYjMzk7bSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGJlbmVmaXRzOiByZWR1Y2VkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGltcHJvdmVkIGluc3RydWN0aW9uIGNhY2hlIGxvY2FsaXR5LCBwb3RlbnRpYWxseSBhbGxvd2luZyBmb3IgZnVydGhlciBjb21waWxlciBvcHRpbWl6YXRpb24gZHVlIHRvIHRoZSBjb250ZXh0IG5vdyBiZWluZyBleHBhbmRlZC4gSSYjMzk7bSBxdWlja2x5IHdlaWdoaW5nIHRoaXMgYWdhaW5zdCB0aGUgdXN1YWwgZHJhd2JhY2tzIG9mIGlubGluaW5nLCBvZiBjb3Vyc2UgLSBpbmNyZWFzZWQgY29kZSBzaXplIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzIGlmIHVzZWQgdG9vIGxpYmVyYWxseSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgY29kZSBibG9hdCBvdmVyYWxsIGlmIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHRvbyBtYW55IHBsYWNlcy4gQnV0LCBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIHN5c3RlbSYjMzk7cyBsaWtlbHkgdXNhZ2UgcGF0dGVybnMgYW5kIHRoZSBwZXJmb3JtYW5jZSBwcm9maWxlIEkmIzM5O20gYWltaW5nIGZvciwgaW5saW5pbmcgaGVyZSAqbWlnaHQqIHlpZWxkIGEgd29ydGh3aGlsZSBnYWluLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIGV4YW1pbmUgdGhlIGNvZGUmIzM5O3MgY2FsbCBzaXRlcyBhbmQgc2l6ZSwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgdGhlIGZpcnN0IGF2ZW51ZSBJJiMzOTttIGV4cGxvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTEwOTY9c3RhdGljIHZvaWQgc21hcHNfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTExMC1cdFx0cHJlc2VudCA9IHRydWU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTExMTpcdH0gZWxzZSBpZiAodW5saWtlbHkodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkpIHtcbmZzL3Byb2MvdGFza19tbXUuYy0xMTEyLVx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTIwODg9c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjExNC1cdFx0XHRmcmFtZSA9IHBtZF9wZm4ocG1kKSAmIzQzOyBpZHg7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjExNTpcdH0gZWxzZSBpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkge1xuZnMvcHJvYy90YXNrX21tdS5jLTIxMTYtXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU1Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZ2V0X3BlcnNpc3RlbnRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTY3LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTY4OnN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03NTE9c3RhdGljIGlubGluZSB2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzU1LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzU2OnN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzU3LXtcbi0tXG5tbS9obW0uYz0zOTY9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL2htbS5jLTQxNC1cbm1tL2htbS5jOjQxNTpcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZCkpIHtcbm1tL2htbS5jLTQxNi1cdFx0aWYgKGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgMCkpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4NjQ9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTA4LVxubW0vaHVnZV9tZW1vcnkuYzoxOTA5Olx0aWYgKHVubGlrZWx5KHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTE5MTAtXHRcdCAgICAgcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZCkpKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMjgwPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjI5OS1cdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xubW0vaHVnZV9tZW1vcnkuYzoyMzAwOlx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtMjMwMS1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIzODQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqbm9ybWFsX29yX3NvZnRsZWFmX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzODktXG5tbS9odWdlX21lbW9yeS5jOjIzOTA6XHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkpXG5tbS9odWdlX21lbW9yeS5jLTIzOTEtXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtOb24gcHJlc2VudCBodWdlIHBtZCB3aXRob3V0IHBtZCBtaWdyYXRpb24gZW5hYmxlZCFcJiMzNDspO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMD1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjYxMy1cbm1tL2h1Z2VfbWVtb3J5LmM6MjYxNDpcdGlmIChwcm90X251bWEgXHUwMDI2XHUwMDI2ICF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpKVxubW0vaHVnZV9tZW1vcnkuYy0yNjE1LVx0XHRyZXR1cm4gMTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2MjAtXG5tbS9odWdlX21lbW9yeS5jOjI2MjE6XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjYgcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKCpwbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTI2MjItXHRcdGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChtbSwgYWRkciwgcG1kLCB1ZmZkX3dwLFxuLS1cbm1tL21hZHZpc2UuYz0zNTQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzkxLVx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbm1tL21hZHZpc2UuYzozOTI6XHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9tYWR2aXNlLmMtMzkzLVx0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuLS1cbm1tL21pZ3JhdGUuYz0xODAwPXN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuLS1cbm1tL21pZ3JhdGUuYy0xODc4LVx0XHRcdCAqL1xubW0vbWlncmF0ZS5jOjE4Nzk6XHRcdFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNiBpc190aHApIHtcbm1tL21pZ3JhdGUuYy0xODgwLVx0XHRcdFx0bnJfZmFpbGVkJiM0MzsmIzQzOztcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy00Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NDg6XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNDktXHRcdChtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE5MS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTkyOlx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9taWdyYXRlX2RldmljZS5jLTE5My1cdFx0KG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NjU9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTk4LVxubW0vbWlncmF0ZV9kZXZpY2UuYzo5OTk6XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjYgKCpkc3QgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDAwLVx0XHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UobWlncmF0ZSwgYWRkciwgcGFnZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEwOTg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTExNjctXHRcdCAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTY4Olx0XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTY5LVx0XHRcdGlmICgoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nz1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTgtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTk6XHRcdFx0XHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2MC1cdFx0XHRcdCAgICAhKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSlcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjQ2LVx0XHRpZiAoZG9fZGVtb3RlX3Bhc3MgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYzoxMjQ3Olx0XHQgICAgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHwgIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSkge1xubW0vdm1zY2FuLmMtMTI0OC1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmRlbW90ZV9mb2xpb3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFRIUCBNaWdyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIG1pZ3JhdGlvbiBpcyBzdXBwb3J0ZWQuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBhbmQgbGlrZWx5LCB0aGUgc3VwcG9ydCBjaGVja3MgZm9yIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgZm91bmRhdGlvbmFsIGluZm9ybWF0aW9uIHRvIHByb2NlZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuIDU2NjpcdH1cbiA1Njc6XHRcbiA1Njg6XHRzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZClcbiA1Njk6XHR7XG4gNTcwOlx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTik7XG4gNTcxOlx0fVxuIDU3MjpcdFxuIDU3MzpcdHZvaWQgc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gNTc0Olx0XHRcdFx0ICAgcG1kX3QgKnBtZCwgYm9vbCBmcmVlemUpO1xuIDU3NTpcdGJvb2wgdW5tYXBfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gNTc2Olx0XHRcdFx0ICAgcG1kX3QgKnBtZHAsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDU3NzpcdHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcbiA1Nzg6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgaGFkZHIpO1xuIDU3OTpcdFxuIDU4MDpcdCNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIDU4MTpcdFxuIDU4MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDU4MzpcdHtcbiA1ODQ6XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBEZWZpbml0aW9uIG9mIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSXQganVzdCBzdHJ1Y2sgbWUgdGhhdCB0aGUgdmFyaWFibGUgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkYCBhcHBlYXJzIHRvIGJlIGRlZmluZWQgKndpdGhpbiogYSBjb25kaXRpb25hbCBibG9jaywgc3BlY2lmaWNhbGx5IHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2suIFRoYXQmIzM5O3MgdW51c3VhbCwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byB2ZXJpZnkgd2hlcmUgdGhpcyBkZWZpbml0aW9uICphY3R1YWxseSogaGFwcGVucywgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBiZWhhdmlvci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaXRzIHBsYWNlbWVudCBvbiBsaW5lIDU4MCDigJMgeWVwLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBgI2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovYCBzZWN0aW9uIGJlZ2lucy4gTm93LCB0aGUgY3JpdGljYWwgcGllY2Ug4oCTIEkgbmVlZCB0byBsb29rIGRpcmVjdGx5IGF0IGhvdyBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWRgIGlzIGRlZmluZWQgKmluc2lkZSogdGhhdCBgI2Vsc2VgIGJsb2NrLiBVbmRlcnN0YW5kaW5nIHRoYXQgYWx0ZXJuYXRpdmUgZGVmaW5pdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgb3ZlcmFsbCBmbG93IGhlcmUuIFRoaXMgY291bGQgcmV2ZWFsIGFuIGltcG9ydGFudCBkZXBlbmRlbmN5IHJlbGF0ZWQgdG8gVEhQIGNvbmZpZ3VyYXRpb24gb3IgYSBzdWJ0bGUgZGlmZmVyZW5jZSBpbiBsb2dpYy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc1MDpcdFxuIDc1MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDc1MjpcdHtcbiA3NTM6XHRcdHJldHVybjtcbiA3NTQ6XHR9XG4gNzU1Olx0XG4gNzU2Olx0c3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXG4gNzU3Olx0e1xuIDc1ODpcdFx0cmV0dXJuIGZhbHNlO1xuIDc1OTpcdH1cbiA3NjA6XHRcbiA3NjE6XHRzdGF0aWMgaW5saW5lIGludCBoaWdoZXN0X29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXJzKVxuIDc2MjpcdHtcbiA3NjM6XHRcdHJldHVybiAwO1xuIDc2NDpcdH1cbiA3NjU6XHRcbiA3NjY6XHRzdGF0aWMgaW5saW5lIGludCBuZXh0X29yZGVyKHVuc2lnbmVkIGxvbmcgKm9yZGVycywgaW50IHByZXYpXG4gNzY3Olx0e1xuIDc2ODpcdFx0cmV0dXJuIDA7XG4gNzY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBUSFAgYW5kIFBhZ2UgVGFibGUgV2Fsa2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgaXMgZ29pbmcgdG8gcmV0dXJuIGBmYWxzZWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9uIGFnYWluLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gYW5hbHl6ZSBob3cgdGhlIGxhY2sgb2YgVEhQIHN1cHBvcnQgaW1wYWN0cyB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIHN1c3BlY3RpbmcgaXQgaW1wYWN0cyB0aGUgcGFnZSB0YWJsZSB3YWxraW5nIGxvZ2ljLCBsaWtlbHkgc2ltcGxpZnlpbmcgaXQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWJzZW5jZSBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Vfdm1hX21hcHBlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdFx0ICovXG4gMjUxOlx0XHRcdHBtZGUgPSBwbWRwX2dldF9sb2NrbGVzcyhwdm13LVx1MDAzZXBtZCk7XG4gMjUyOlx0XG4gMjUzOlx0XHRcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XG4gMjU0Olx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuIDI1NTpcdFx0XHRcdHBtZGUgPSAqcHZtdy1cdTAwM2VwbWQ7XG4gMjU2Olx0XHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuIDI1NzpcdFx0XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiAyNTg6XHRcbiAyNTk6XHRcdFx0XHRcdGlmICghdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSB8fFxuIDI2MDpcdFx0XHRcdFx0ICAgICEocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pKVxuIDI2MTpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI2MjpcdFx0XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiAyNjM6XHRcbiAyNjQ6XHRcdFx0XHRcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSB8fFxuIDI2NTpcdFx0XHRcdFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4gMjY2Olx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjY3Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNjg6XHRcdFx0XHR9XG4gMjY5Olx0XHRcdFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcbiAyNzA6XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiAyNzE6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNzI6XHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxuIDI3MzpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI3NDpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjc1Olx0XHRcdFx0fVxuIDI3NjpcdFx0XHRcdC8qIFRIUCBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4gMjc3Olx0XHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuIDI3ODpcdFx0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbiAyNzk6XHRcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBMb2dpYyBhbmQgQnVpbGQgRml4KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbiYjMzk7dCBlbmFibGVkLCB0aGUgaW1wbGljYXRpb25zIGFyZSBxdWl0ZSBjbGVhci4gRmlyc3QsIGBwbWRfdHJhbnNfaHVnZShwbWRlKWAgaXMgZ29pbmcgdG8gYmUgZmFsc2UuIFRoZW4sIEkgbmVlZCB0byBjb25zaWRlciBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKWAuIEkgaGF2ZSB0byBwYXVzZSBoZXJlLiBJZiBUSFAgbWlncmF0aW9uIGlzbiYjMzk7dCBzdXBwb3J0ZWQsIGNhbiB3ZSBldmVuIGhhdmUgYSBtaWdyYXRpb24gZW50cnk/IEFoLCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIGFuZCB3ZSBkbyBoYXZlIGEgbWlncmF0aW9uIGVudHJ5LCBpdCBnb2VzIGludG8gdGhlIHJlbGV2YW50IGBpZmAgYmxvY2suIFNpbmNlIG1pZ3JhdGlvbiBlbnRyaWVzIGFyZW4mIzM5O3QgY29uc2lkZXJlZCBwcmVzZW50LCBgIXBtZF9wcmVzZW50KHBtZGUpYCBpcyB0cnVlLCBhbmQgaWYgd2UgYWxzbyBkb24mIzM5O3Qgc3VwcG9ydCB0aGUgVEhQIG1pZ3JhdGlvbiwgd2UgcmV0dXJuIGBub3RfZm91bmQocHZtdylgLiBJdCYjMzk7cyBjbGVhciB0aGF0IGluIHRoaXMgcGF0aCwgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIGlzICpuZXZlciogY2FsbGVkLCBpZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQuCgpOb3csIHdoYXQgaWYgYHBtZF9wcmVzZW50KHBtZGUpYCBpcyB0cnVlPyBXZSBoaXQgdGhlIG5leHQgYGlmYCBibG9jaywgZXhwZWN0aW5nIGBwbWRfdHJhbnNfaHVnZShwbWRlKWAgdG8gYmUgdHJ1ZSwgYnV0IGl0JiMzOTtzICpmYWxzZSogYmVjYXVzZSB3ZSBkaXNhYmxlZCBUSFAuIFNvLCB3ZSBlbmQgdXAgaW4gdGhlIHNlY3Rpb24gdGhhdCBoYW5kbGVzIGEgVEhQIFBNRCB0aGF0JiMzOTtzIGJlZW4gc3BsaXQsIHVubG9jaywgYW5kIGNvbnRpbnVlcy4gV2hpY2ggbWVhbnMsICphZ2FpbiosIGBjaGVja19wbWRgIGlzICpuZXZlciogY2FsbGVkLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoLCB3aXRoIGl0cyBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIHRoZSBkdW1teSBgY2hlY2tfcG1kYCByZXR1cm5pbmcgYGZhbHNlYCBpcywgYXMgSSBzdXNwZWN0ZWQsIGEgcHVyZSBidWlsZCBmaXghIEJ1dC4uLiB3aHkgZGlkIGl0IG5lZWQgdG8gYmUgZml4ZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBBaCwgaXQmIzM5O3MgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIGl0c2VsZiwgc3BlY2lmaWNhbGx5IHRoZSB1c2Ugb2YgYEhQQUdFX1BNRF9OUmAuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkIGFuZCwgaW1wb3J0YW50bHksIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGRpc2FibGVkLCBgSFBBR0VfUE1EX05SYCBjYXVzZXMgYSBidWlsZCBlcnJvciBiZWNhdXNlIGBIUEFHRV9QTURfU0hJRlRgIGJlY29tZXMgYSBgKHsgQlVJTERfQlVHKCk7IDA7IH0pYCwgc2luY2UgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIGFyZSBtaXNzaW5nLgoKQWgsIHllcywgYEhQQUdFX1BNRF9OUmAgaXMgZGVmaW5lZCBhcyBgKDEgJmx0OyZsdDsgKEhQQUdFX1BNRF9TSElGVCAtIFBBR0VfU0hJRlQpKWAuIElmIGBIUEFHRV9QTURfU0hJRlRgIGlzIGAoeyBCVUlMRF9CVUcoKTsgMDsgfSlgLCB0aGVuLCBwcmVjaXNlbHksIGBIUEFHRV9QTURfTlJgIHRyaWdnZXJzIHRoYXQgYEJVSUxEX0JVRygpYC4gU28sIHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZpeGluZyBhIGJ1aWxkIGVycm9yIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQsIGJ1dCB0aGF0JiMzOTtzIGEgc21hbGwgcGFydCBvZiB0aGUgc3RvcnkuCgpXYWl0LCBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgKmlzKiBzZXQsIGJ1dCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3Q/IFRoZW4gYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXMgc2V0LCBhbmQgYEhQQUdFX1BNRF9TSElGVGAgZ2V0cyBhc3NpZ25lZCB0aGUgY29ycmVjdCB2YWx1ZSB3aGljaCBpcyBgUE1EX1NISUZUYC4gSW4gdGhpcyBjYXNlLCBgY2hlY2tfcG1kYCB3b3VsZCBjb21waWxlIHdpdGhvdXQgZXJyb3IuIEJ1dCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIHVuY29uZGl0aW9uYWxseS4gTm93LCBJIGhhdmUgdG8gZ28gY2hlY2sgd2hldGhlciBgY2hlY2tfcG1kYCBjb3VsZCBiZSBjYWxsZWQgZm9yIGh1Z2V0bGIgcGFnZXMuIElzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZXZlciB1c2VkIHdpdGggaHVnZXRsYiBwYWdlcz8gSSBuZWVkIHRvIGdvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3ZtYV9tYXBwZWRfd2FsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTUyMj1zdHJ1Y3QgbHJ1dmVjO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjQtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2My1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xuaW5jbHVkZS9saW51eC9ybWFwLmgtODY1LVx0dW5zaWduZWQgbG9uZyBwZm47XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc2LSNkZWZpbmUgREVGSU5FX0ZPTElPX1ZNQV9XQUxLKG5hbWUsIF9mb2xpbywgX3ZtYSwgX2FkZHJlc3MsIF9mbGFncylcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4Nzc6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzgtXHRcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg1LVxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg4Ny17XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODk2OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQgLSBSZXN0YXJ0IHRoZSBwYWdlIHRhYmxlIHdhbGsuXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTc6ICogQHB2bXc6IFBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLlxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9OTA0PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTA2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5MTk6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpO1xuaW5jbHVkZS9saW51eC9ybWFwLmgtOTIwLXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMxNz1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZ3VhcmRfc3dwX2VudHJ5KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzIyOnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNTpleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI3LVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyOS1cdFx0c3RydWN0IHBhZ2UgKm5ldyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDEtI2Vsc2UgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDI6c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cdFx0c3RydWN0IHBhZ2UgKm5ldylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTY0Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTY1LVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xOTQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMS1cdCphY2Nlc3NlZCA9IGZhbHNlO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI2LVx0XHRpZiAoKmFjY2Vzc2VkKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjI3Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Mj1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODY1LSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxubW0vaHVnZV9tZW1vcnkuYzo0ODY2OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkzOS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk0MDp2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XG4tLVxubW0vaW50ZXJuYWwuaD0xMjM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTEyNTctICovXG5tbS9pbnRlcm5hbC5oOjEyNTg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xuLS1cbm1tL2tzbS5jPTEyNzU9c3RhdGljIGludCB3cml0ZV9wcm90ZWN0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0va3NtLmMtMTI5Ni1cbm1tL2tzbS5jOjEyOTc6XHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKVxubW0va3NtLmMtMTI5OC1cdFx0Z290byBvdXRfbW47XG4tLVxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxubW0va3NtLmM6MTM1OTpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9rc20uYy0xMzYwLW91dF9tbjpcbi0tXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vbWlncmF0ZS5jLTI5Ny1cbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vbWlncmF0ZS5jLTI5OS1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXG4tLVxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zNTEtXG5tbS9taWdyYXRlLmM6MzUyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9taWdyYXRlLmMtMzUzLVx0XHRybWFwX3Qgcm1hcF9mbGFncyA9IFJNQVBfTk9ORTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cdFx0XHQucHRsID0gcHRsLFxuLS1cbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lkbGUuYy01OC1cbm1tL3BhZ2VfaWRsZS5jOjU5Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9wYWdlX2lkbGUuYy02MC1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTA6c3RhdGljIGlubGluZSBib29sIG5vdF9mb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMS17XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUocHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMy1cdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3LVx0XHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODctICogbWFwcGVkIGF0IHRoZSBAcHZtdy1cdTAwM2VwdGVcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjg4OiAqIEBwdm13OiBwYWdlX3ZtYV9tYXBwZWRfd2FsayBzdHJ1Y3QsIGluY2x1ZGVzIGEgcGFpciBwdGUgYW5kIHBmbiByYW5nZVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODktICogZm9yIGNoZWNraW5nXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTEtICpcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjkyOiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgZm91bmQgYSBwbGFjZSB3aGVyZSBwZm4gcmFuZ2UgaXMgKnBvdGVudGlhbGx5KlxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDYtICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDgte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQxOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQyLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDktI2Vsc2Vcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1MDpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTU1LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU2OnN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1Ny17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTYzLS8qKlxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY0OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrIC0gY2hlY2sgaWYgQHB2bXctXHUwMDNlcGZuIGlzIG1hcHBlZCBpbiBAcHZtdy1cdTAwM2V2bWEgYXRcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2NS0gKiBAcHZtdy1cdTAwM2VhZGRyZXNzXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjY6ICogQHB2bXc6IHBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLiBwYWdlLCB2bWEsIGFkZHJlc3MgYW5kIGZsYWdzXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjctICogbXVzdCBiZSBzZXQuIHBtZCwgcHRlIGFuZCBwdGwgbXVzdCBiZSBOVUxMLlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3My0gKiBJZiBAcHZtdy1cdTAwM2VwbWQgaXMgc2V0IGJ1dCBAcHZtdy1cdTAwM2VwdGUgaXMgbm90LCB5b3UgaGF2ZSBmb3VuZCBQTUQtbWFwcGVkIHBhZ2Vcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3NDogKiAodXN1YWxseSBUSFApLiBGb3IgUFRFLW1hcHBlZCBUSFAsIHlvdSBzaG91bGQgcnVuIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgaW5cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3NS0gKiBhIGxvb3AgdG8gZmluZCBhbGwgUFRFcyB0aGF0IG1hcCB0aGUgVEhQLlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4My0gKlxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTg0OiAqIElmIHlvdSBuZWVkIHRvIHN0b3AgdGhlIHdhbGsgYmVmb3JlIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgcmV0dXJuZWQgZmFsc2UsXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxODU6ICogdXNlIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoKS4gSXQgd2lsbCBkbyB0aGUgaG91c2VrZWVwaW5nLlxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTg2LSAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTg3OmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTg4LXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0zNTM9dW5zaWduZWQgbG9uZyBwYWdlX21hcHBlZF9pbl92bWEoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzU2LVx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNTc6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM1OC1cdFx0LnBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpLFxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM2Ni1cdFx0Z290byBvdXQ7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNjc6XHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzY4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM2OTpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzAtb3V0OlxuLS1cbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTI0LVxubW0vcm1hcC5jOjkyNTpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vcm1hcC5jLTkyNi1cdFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9ybWFwLmMtOTQ4LVx0XHRcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcbm1tL3JtYXAuYzo5NDk6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy05NTAtXHRcdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDtcbi0tXG5tbS9ybWFwLmMtOTYzLVx0XHRcdHByYS1cdTAwM2VyZWZlcmVuY2VkID0gLTE7XG5tbS9ybWFwLmM6OTY0Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtOTY1LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9ybWFwLmMtMTAwMi1cdFx0aWYgKHB0ZXMgPT0gcHZtdy5ucl9wYWdlcykge1xubW0vcm1hcC5jOjEwMDM6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0xMDA0LVx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYz0xMDY0PWludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4tLVxubW0vcm1hcC5jLTExMDItXG5tbS9ybWFwLmM6MTEwMzpzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3JtYXAuYy0xMTA0LXtcbi0tXG5tbS9ybWFwLmMtMTExNy1cbm1tL3JtYXAuYzoxMTE4Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKHB2bXcpKSB7XG5tbS9ybWFwLmMtMTExOS1cdFx0aW50IHJldCA9IDA7XG4tLVxubW0vcm1hcC5jPTEyMzE9c3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTEyMzQtXHRzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqKWFyZztcbm1tL3JtYXAuYzoxMjM1Olx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9ybWFwLmMtMTIzNi1cdFx0LnBmblx0XHQ9IHN0YXRlLVx1MDAzZXBmbixcbi0tXG5tbS9ybWFwLmM9MTMxMD1pbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXG4tLVxubW0vcm1hcC5jLTEzMTIte1xubW0vcm1hcC5jOjEzMTM6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL3JtYXAuYy0xMzE0LVx0XHQucGZuXHRcdD0gcGZuLFxuLS1cbm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vcm1hcC5jOjE5NDU6XHRcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vcm1hcC5jLTE5NDYtXHRcdFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MsIHB0ZV90IHB0ZSlcbi0tXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yMDMxLVxubW0vcm1hcC5jOjIwMzI6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3JtYXAuYy0yMDMzLVx0XHRucl9wYWdlcyA9IDE7XG4tLVxubW0vcm1hcC5jLTIwODktXHRcdFx0XHRmbGFncyBcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XG5tbS9ybWFwLmM6MjA5MDpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjA5MS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3JtYXAuYy0yMzYzLXdhbGtfZG9uZTpcbm1tL3JtYXAuYzoyMzY0Olx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTIzNjUtXHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjQ2MC1cbm1tL3JtYXAuYzoyNDYxOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9ybWFwLmMtMjQ2Mi1cdFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXG4tLVxubW0vcm1hcC5jLTI0NzYtXHRcdFx0XHRmbGFncyBcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XG5tbS9ybWFwLmM6MjQ3NzpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjQ3OC1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3JtYXAuYy0yNDkzLVx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjQ5NDpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjQ5NS1cdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNTQ5LVx0XHRcdFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpIHtcbm1tL3JtYXAuYzoyNTUwOlx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI1NTEtXHRcdFx0XHRcdHJldCA9IGZhbHNlO1xuLS1cbm1tL3JtYXAuYy0yNTYzLVx0XHRcdFx0XHQgKi9cbm1tL3JtYXAuYzoyNTY0Olx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI1NjUtXHRcdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNjUwLVx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjY1MTpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjY1Mi1cdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNjYxLVx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNjYyOlx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI2NjMtXHRcdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNjY4LVx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjY2OTpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjY3MC1cdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3Ztc2Nhbi5jPTQxMzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTgwLSAqL1xubW0vdm1zY2FuLmM6NDE4MTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MTgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgaW50byBIdWdlVExCIFBhZ2UgTWFwcGluZyoqCgpIb2xkIG9uIGEgbWludXRlLi4uIGlzbiYjMzk7dCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHRyYXZlcnNlIHRoZSBtYXBwaW5ncyBvZiBIdWdlVExCIHBhZ2VzPyBJIGNvdWxkIHN3ZWFyIEkmIzM5O3ZlIHNlZW4gdGhhdCBpbiByZWxhdGlvbiB0byB0aGVtLiBBbHJpZ2h0LCBiZXR0ZXIgY29uZmlybSB0aGF0IGh1bmNoLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgcHVsbCB1cCBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZS4gVGhpcyBzaG91bGQgcmV2ZWFsIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBsYXJnZSBtZW1vcnkgcmVnaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg3Olx0Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gMTg4Olx0e1xuIDE4OTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbiAxOTA6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuIDE5MTpcdFx0dW5zaWduZWQgbG9uZyBlbmQ7XG4gMTkyOlx0XHRzcGlubG9ja190ICpwdGw7XG4gMTkzOlx0XHRwdGVfdCBwdGV2YWw7XG4gMTk0Olx0XHRwZ2RfdCAqcGdkO1xuIDE5NTpcdFx0cDRkX3QgKnA0ZDtcbiAxOTY6XHRcdHB1ZF90ICpwdWQ7XG4gMTk3Olx0XHRwbWRfdCBwbWRlO1xuIDE5ODpcdFxuIDE5OTpcdFx0LyogVGhlIG9ubHkgcG9zc2libGUgcG1kIG1hcHBpbmcgaGFzIGJlZW4gaGFuZGxlZCBvbiBsYXN0IGl0ZXJhdGlvbiAqL1xuIDIwMDpcdFx0aWYgKHB2bXctXHUwMDNlcG1kIFx1MDAyNlx1MDAyNiAhcHZtdy1cdTAwM2VwdGUpXG4gMjAxOlx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjAyOlx0XG4gMjAzOlx0XHRpZiAodW5saWtlbHkoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpKSB7XG4gMjA0Olx0XHRcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV92bWEodm1hKTtcbiAyMDU6XHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlKTtcbiAyMDY6XHRcdFx0LyogVGhlIG9ubHkgcG9zc2libGUgbWFwcGluZyB3YXMgaGFuZGxlZCBvbiBsYXN0IGl0ZXJhdGlvbiAqL1xuIDIwNzpcdFx0XHRpZiAocHZtdy1cdTAwM2VwdGUpXG4gMjA4Olx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyMDk6XHRcdFx0LypcbiAyMTA6XHRcdFx0ICogQWxsIGNhbGxlcnMgdGhhdCBnZXQgaGVyZSB3aWxsIGFscmVhZHkgaG9sZCB0aGVcbiAyMTE6XHRcdFx0ICogaV9tbWFwX3J3c2VtLiAgVGhlcmVmb3JlLCBubyBhZGRpdGlvbmFsIGxvY2tzIG5lZWQgdG8gYmVcbiAyMTI6XHRcdFx0ICogdGFrZW4gYmVmb3JlIGNhbGxpbmcgaHVnZXRsYl93YWxrKCkuXG4gMjEzOlx0XHRcdCAqL1xuIDIxNDpcdFx0XHRwdm13LVx1MDAzZXB0ZSA9IGh1Z2V0bGJfd2Fsayh2bWEsIHB2bXctXHUwMDNlYWRkcmVzcywgc2l6ZSk7XG4gMjE1Olx0XHRcdGlmICghcHZtdy1cdTAwM2VwdGUpXG4gMjE2Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDIxNzpcdFxuIDIxODpcdFx0XHRwdm13LVx1MDAzZXB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlLCBtbSwgcHZtdy1cdTAwM2VwdGUpO1xuIDIxOTpcdFx0XHRpZiAoIWNoZWNrX3B0ZShwdm13LCBwYWdlc19wZXJfaHVnZV9wYWdlKGhzdGF0ZSkpKVxuIDIyMDpcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjIxOlx0XHRcdHJldHVybiB0cnVlO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdFx0ZW5kID0gdm1hX2FkZHJlc3NfZW5kKHB2bXcpO1xuIDIyNTpcdFx0aWYgKHB2bXctXHUwMDNlcHRlKVxuIDIyNjpcdFx0XHRnb3RvIG5leHRfcHRlO1xuIDIyNzpcdHJlc3RhcnQ6XG4gMjI4Olx0XHRkbyB7XG4gMjI5Olx0XHRcdHBnZCA9IHBnZF9vZmZzZXQobW0sIHB2bXctXHUwMDNlYWRkcmVzcyk7XG4gMjMwOlx0XHRcdGlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHtcbiAyMzE6XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUEdESVJfU0laRSk7XG4gMjMyOlx0XHRcdFx0Y29udGludWU7XG4gMjMzOlx0XHRcdH1cbiAyMzQ6XHRcdFx0cDRkID0gcDRkX29mZnNldChwZ2QsIHB2bXctXHUwMDNlYWRkcmVzcyk7XG4gMjM1Olx0XHRcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpIHtcbiAyMzY6XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUDREX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Q6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHJpZ2h0LCBmb3IgaHVnZXRsYiBwYWdlcywgaXQmIzM5O3MgYGh1Z2V0bGJfd2Fsa2AgYW5kIGBjaGVja19wdGVgLCBub3QgYGNoZWNrX3BtZGAgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiYjMzQ7IFRoYXQmIzM5O3MgY3J1Y2lhbDsgYGNoZWNrX3BtZGAgaXMgKnNwZWNpZmljYWxseSogZm9yIFRIUCDigJMgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcy4gU28sIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbiYjMzk7dCBzZXQsIGBjaGVja19wbWRgIGlzIG5ldmVyIGV2ZW4gKmNhbGxlZCouIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYW4gYCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGJsb2NrIGFuZCBhIGR1bW15IGBjaGVja19wbWRgIHRoYXQgcmV0dXJucyBgZmFsc2VgLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIGp1c3QgYSBidWlsZCBmaXgsIHRvIGF2b2lkIGEgYEJVSUxEX0JVRygpYCBjYXVzZWQgYnkgYEhQQUdFX1BNRF9OUmAgd2hlbiBUSFAgaXMgb2ZmLgoKQnV0IHdhaXQgYSBtaW51dGUsIGxldCBtZSBwbGF5IGRldmlsJiMzOTtzIGFkdm9jYXRlLiBXaGF0IGlmIGBDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNgIGlzIHNldCAoYmVjYXVzZSBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMpLCBidXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJiMzOTt0PyBJbiB0aGF0IGNhc2UsIGBIUEFHRV9QTURfTlJgICp3b3VsZCogYmUgZGVmaW5lZCBhbnl3YXksIGFuZCB0aGUgb3JpZ2luYWwgY29kZSBzaG91bGQgY29tcGlsZSBqdXN0IGZpbmUuICBTbywgdGhlIHBhdGNoIGlzIGFkZGluZyB0aGUgYCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGV2ZW4gdGhvdWdoIHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgd29ya2VkLiBJcyB0aGVyZSBhbnkgZnVuY3Rpb25hbCBpbXBhY3QgaGVyZSwgb3IgaXMgaXQgKnB1cmVseSogYSBidWlsZC10aW1lIHRoaW5nPwoKSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKm5vdCogc2V0LCB0aGUgYGNoZWNrX3BtZGAgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLiBUaGVyZWZvcmUsIGNoYW5naW5nIGl0cyByZXR1cm4gdmFsdWUgdG8gYGZhbHNlYCBoYXMgbm8gZWZmZWN0IG9uIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgaGF2ZSB0byBkb3VibGUgY2hlY2suIFdoZXJlICpjb3VsZCogYGNoZWNrX3BtZGAgYmUgY2FsbGVkPyBMZXQmIzM5O3MgdHJhY2UgaXQgdGhyb3VnaC4gQWgsIEkgc2VlIGl0ISBJdCYjMzk7cyBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCB3aXRoaW4gdGhpcyBjcml0aWNhbCBibG9jayBvZiBjb2RlOgoKYGBgYwoJCWlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7CgkJCXB2bXctJmd0O3B0bCA9IHBtZF9sb2NrKG1tLCBwdm13LSZndDtwbWQpOwoJCQlwbWRlID0gKnB2bXctJmd0O3BtZDsKCQkJaWYgKCFwbWRfcHJlc2VudChwbWRlKSkgewoJCQkJc29mdGxlYWZfdCBlbnRyeTsKCgkJCQlpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHwKCQkJCSAgICAhKHB2bXctJmd0O2ZsYWdzICZhbXA7IFBWTVdfTUlHUkFUSU9OKSkKCQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwoJCQkJZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTsKCgkJCQlpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHwKCQkJCSAgICAhY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKQoJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQlpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkgewoJCQkJaWYgKHB2bXctJmd0O2ZsYWdzICZhbXA7IFBWTVdfTUlHUkFUSU9OKQoJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CgkJCQlpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSkKCQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJLyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi8KCQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKCQkJcHZtdy0mZ3Q7cHRsID0gTlVMTDsKCQl9CmBgYAoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMgd2l0aCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBkaXNhYmxlZDoKCjEuICBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIGlzIGBmYWxzZWAuIFRoYXQmIzM5O3MgZ3VhcmFudGVlZC4KMi4gIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpYCBjb3VsZCBiZSBgdHJ1ZWAsIHJpZ2h0PyBMZXQmIzM5O3MgY2hlY2suCjMuICBJZiBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKWAgaXMgYHRydWVgLCB0aGVuIGAhcG1kX3ByZXNlbnQocG1kZSlgIHdpbGwgYWxzbyBiZSBgdHJ1ZWAuCjQuICBUaGVuLCB0aGUgY29kZSBjaGVja3MgYCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYC4gSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKm5vdCogc2V0LCBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgaXMgYGZhbHNlYC4KNS4gIFRoZXJlZm9yZSwgYCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBpcyBgdHJ1ZWAuCjYuICBJdCBpbW1lZGlhdGVseSByZXR1cm5zIGBub3RfZm91bmQocHZtdylgLiAgQ3JpdGljYWxseSwgaXQgKm5ldmVyKiByZWFjaGVzIHRoZSBgY2hlY2tfcG1kYCBjYWxsIQoKV2hhdCBpZiBgcG1kX3ByZXNlbnQocG1kZSlgICppcyogYHRydWVgIChzbyB3ZSBza2lwIHRoZSBmaXJzdCBgaWYKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgcG1kX3RyYW5zX2h1Z2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaD0yNT1zdGF0aWMgaW5saW5lIHBtZF90IHB0ZV9wbWQocHRlX3QgcHRlKVxuLS1cbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmgtNDItXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oOjQzOiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVx0KHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFdfU1opXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQ0LVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmg9MTgzPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaC0xOTQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaDoxOTU6I2RlZmluZSBwbWRfdHJhbnNfaHVnZShwbWQpXHQocG1kX3ZhbChwbWQpIFx1MDAyNlx1MDAyNiAhcG1kX3RhYmxlKHBtZCkpXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oLTE5Ni0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOgoKKipIdWgsIFRoYXQmIzM5O3MgVW5leHBlY3RlZC4qKgoKV2FpdCBhIHNlY29uZC4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmhgIGFuZCBJIHNlZSBgcG1kX3RyYW5zX2h1Z2VgIGRlZmluZWQgKndpdGhvdXQqIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY2hlY2sgZm9yIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgPyBUaGF0JiMzOTtzIG5vdCByaWdodC4gSSB3b3VsZCBoYXZlIGV4cGVjdGVkIGEgY2hlY2sgdGhlcmUuIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZSBvciBhIG1pc3NlZCBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcG1kX3RyYW5zX2h1Z2VgIGlzIGFjdHVhbGx5IGhhbmRsZWQgaW4gdGhlIGFic2VuY2Ugb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGJlaW5nIGVuYWJsZWQuCgpPa2F5LCBsZXQgbWUgcXVpY2tseSBwaXZvdCBhbmQgY2hlY2sgYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSYjMzk7bSBiZXR0aW5nIG9uZSBvZiB0aGVtIHByb3ZpZGVzIHRoZSBmYWxsYmFjayBkZWZpbml0aW9uIG9yIHRoZSBiYXNlIGRlZmluaXRpb24gZm9yIHRoaXMsIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9uZSBpcyBzdXBwb3NlZCB0byBidWlsZCB1cG9uIHRoYXQuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGlzIGEgZ2VuZXJpYyBkZWZpbml0aW9uLCBhbmQgd2hhdCBpdCBkb2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY2x1ZSBJIG5lZWQgdG8ga25vdyB3aHkgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGlzIGRvaW5nIHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF90cmFuc19odWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDQ3LVx0aWYgKHBtZF9wcmVzZW50KHBtZCkpIHtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ0ODpcdFx0cmV0dXJuIHBtZF90cmFuc19odWdlKHBtZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00NDktXHR9IGVsc2UgaWYgKCFwbWRfbm9uZShwbWQpKSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDk2PXZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk4OnNwaW5sb2NrX3QgKl9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTktc3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDEtLyogbW1hcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTAyOnN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDUtXHRpZiAocG1kX2lzX2h1Z2UoKnBtZCkpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XHRcdHJldHVybiBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcwOT1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxNC19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTU6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xMD1lbnVtIHBhZ2Vfd2Fsa19sb2NrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMjctICpcdFx0XHR0aGlzIGhhbmRsZXIgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBoYW5kbGVcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoyODogKlx0XHRcdHBtZF90cmFuc19odWdlKCkgcG1kcy4gIFRoZXkgbWF5IHNpbXBseSBjaG9vc2UgdG9cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0yOS0gKlx0XHRcdHNwbGl0X2h1Z2VfcGFnZSgpIGluc3RlYWQgb2YgaGFuZGxpbmcgaXQgZXhwbGljaXRseS5cbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xOTk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl96ZXJvX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIwMDktI2lmbmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIwMTA6c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjAxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcG1kX3RyYW5zX2h1Z2VgIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvZGUmIzM5O3MgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCwgc3BlY2lmaWNhbGx5IGxpbmUgMjAxMC4gUmlnaHQsIGBwbWRfdHJhbnNfaHVnZWAuIE9rYXksIHNvIGl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIHJldHVybiB2YWx1ZS4gQW5kIHdoYXQgYW0gSSBsb29raW5nIGF0PyAqSWYqIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbiYjMzk7dCBzZXQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLi4udGhlbiB0aGUgZnVuY3Rpb24gYHBtZF90cmFuc19odWdlYCByZXR1cm5zIDAuIFRoYXTigJlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUuIEEgc3RyYWlnaHRmb3J3YXJkIGFuZCBleHBlY3RlZCBjb25kaXRpb25hbCBkZWZpbml0aW9uLiBOb3RoaW5nIHBhcnRpY3VsYXJseSBncm91bmRicmVha2luZywgYnV0IHZpdGFsLiBJdCYjMzk7cyBhIHF1aWNrLCBjbGVhciB3YXkgb2YgZGlzYWJsaW5nIGh1Z2UgcGFnZSBzdXBwb3J0IGF0IHRoZSBwYWdlIHRhYmxlIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGd0YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDA1Olx0I2VuZGlmIC8qIF9fSEFWRV9DT0xPUl9aRVJPX1BBR0UgKi9cbjIwMDY6XHRcbjIwMDc6XHQjaWZkZWYgQ09ORklHX01NVVxuMjAwODpcdFxuMjAwOTpcdCNpZm5kZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4yMDEwOlx0c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuMjAxMTpcdHtcbjIwMTI6XHRcdHJldHVybiAwO1xuMjAxMzpcdH1cbjIwMTQ6XHQjaWZuZGVmIHBtZF93cml0ZVxuMjAxNTpcdHN0YXRpYyBpbmxpbmUgaW50IHBtZF93cml0ZShwbWRfdCBwbWQpXG4yMDE2Olx0e1xuMjAxNzpcdFx0QlVHKCk7XG4yMDE4Olx0XHRyZXR1cm4gMDtcbjIwMTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTIxCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1aWxkIEZpeCBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0JiMzOTtzIGNyeXN0YWwgY2xlYXIgdGhhdCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiBgcG1kX3RyYW5zX2h1Z2VgIGlzIGFsd2F5cyB6ZXJvLCBhbmQgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkYCBpcyBhbHdheXMgZmFsc2UuIFRoZXJlZm9yZSwgdGhlIGNvbmRpdGlvbmFsIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBzcGVjaWZpY2FsbHkgdGhlIGBpZmAgc3RhdGVtZW50IGludm9sdmluZyBgcG1kX3RyYW5zX2h1Z2VgIGFuZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAsIGlzIGEgZGVhZCBlbmQuIFRoZSBgY2hlY2tfcG1kYCBwYXRoIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcy4gU28sIHRoaXMgcGF0Y2ggaXMgc2ltcGx5IGEgZGVmZW5zaXZlIG1lYXN1cmUsIGEgYnVpbGQgZml4IHRvIHByZXZlbnQgYEhQQUdFX1BNRF9OUmAgZnJvbSB0cmlnZ2VyaW5nIGEgYEJVSUxEX0JVRygpYCB3aGVuIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhcmUgZGlzYWJsZWQuIEl0JiMzOTtzIHN0cmljdGx5IGEgY29tcGlsZS10aW1lIHNhZmVndWFyZDsgdGhlcmUmIzM5O3MgemVybyBpbXBhY3Qgb24gYW55IHJlYWNoYWJsZSBjb2RlIHBhdGhzLiBNeSBmaW5hbCBjb25jbHVzaW9uPyBUaGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmc6IGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYXJvdW5kIGNoZWNrX3BtZCgpIHRvIGZpeCBhIGJ1aWxkIGVycm9yIHdoZW4gVEhQIGlzIGRpc2FibGVkLiBXaGVuIFRIUCBpcyBkaXNhYmxlZCwgY2hlY2tfcG1kKCkgaXMgbmV2ZXIgcmVhY2hlZCBpbiBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGJlY2F1c2UgcG1kX3RyYW5zX2h1Z2UoKSBhbmQgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBib3RoIHJldHVybiBmYWxzZSwgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gYmFpbCBvdXQgZWFybHkuIFRodXMsIHRoaXMgaXMgcHVyZWx5IGEgYnVpbGQgZml4IHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ2OjM0LjAxODM4OTk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTM0MDI1NDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFyb3VuZCBjaGVja19wbWQoKSB0byBmaXggYSBidWlsZCBlcnJvciB3aGVuIFRIUCBpcyBkaXNhYmxlZC4gV2hlbiBUSFAgaXMgZGlzYWJsZWQsIGNoZWNrX3BtZCgpIGlzIG5ldmVyIHJlYWNoZWQgaW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBiZWNhdXNlIHBtZF90cmFuc19odWdlKCkgYW5kIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgYm90aCByZXR1cm4gZmFsc2UsIGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGJhaWwgb3V0IGVhcmx5LiBUaHVzLCB0aGlzIGlzIHB1cmVseSBhIGJ1aWxkIGZpeCB3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ2OjM0LjAxODM5ODQwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMzE1NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmFhNTFkMTM2YzVmZThkOGZiYjdkNjljYTM1ZmQ0ZmUzMDFkMjYyYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAwODo0NjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjc4MTIwMDg2MDg4NjQ1IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcXG5AQCAtMTM2LDYgKzEzNiw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbiBzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4ge1xcbkBAIC0xNDUsNiArMTQ2LDEyIEBAIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NjozNC41NTA2NTcyNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NDgwNzk3Nzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFyb3VuZCBjaGVja19wbWQoKSB0byBmaXggYSBidWlsZCBlcnJvciB3aGVuIFRIUCBpcyBkaXNhYmxlZC4gV2hlbiBUSFAgaXMgZGlzYWJsZWQsIGNoZWNrX3BtZCgpIGlzIG5ldmVyIHJlYWNoZWQgaW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBiZWNhdXNlIHBtZF90cmFuc19odWdlKCkgYW5kIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgYm90aCByZXR1cm4gZmFsc2UsIGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGJhaWwgb3V0IGVhcmx5LiBUaHVzLCB0aGlzIGlzIHB1cmVseSBhIGJ1aWxkIGZpeCB3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmFhNTFkMTM2YzVmZThkOGZiYjdkNjljYTM1ZmQ0ZmUzMDFkMjYyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA4OjQ2OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjc4MTIwMDg2MDg4NjQ1IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmNcbisrKyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5AQCAtMTM2LDYgKzEzNiw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xuIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIHtcbkBAIC0xNDUsNiArMTQ2LDEyIEBAIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NjozNC41NTA2NjEyODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMwNjM0NjM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSd2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsbHkgd3JhcHBpbmcgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIHdpdGggYSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNvLCBpZiBUSFAgaXMgZW5hYmxlZCwgYGNoZWNrX3BtZGAgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIElmIG5vdCwgaXQganVzdCByZXR1cm5zIGZhbHNlLiBUaGF0J3MgYSBjbGV2ZXIgd2F5IHRvIGtlZXAgdGhpbmdzIGNsZWFuIGFuZCBmdW5jdGlvbmFsLiBOb3csIHRvIHRydWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHNlZSAqaG93KiBgY2hlY2tfcG1kYCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIGl0cyB1c2FnZSBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgYXJvdW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gR290dGEgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgY29udHJvbCBmbG93LCBhbmQgd2h5IHRoZXkgb3B0ZWQgZm9yIHRoaXMgYXBwcm9hY2guIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdHkgVEhQIGJyaW5ncyBpbnRvIHRoZSBtaXguIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6MjIuODU3MDA5NjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAzOTkwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0MTpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDIte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQ5LSNlbHNlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTUwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjQtXFx0XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpIHx8XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjY1OlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ni1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjcxLVxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjcyOlxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3My1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NzoyNC40OTc0MTY0ODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY2MDMyODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgcmVzb2x2aW5nIGEgYnVpbGQgb3IgbG9naWNhbCBlcnJvciwgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnQ7IGNhdGNoaW5nIHRoZXNlIGVkZ2UgY2FzZXMgaXMgaW1wb3J0YW50LiBOb3csIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGBjaGVja19wbWRgIGlzIHVzZWQgd2l0aGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuICBUaGF0J3MgaW50ZXJlc3RpbmcuXG5cblRoZSBjb2RlJ3MgYmVoYXZpb3IgZGljdGF0ZXMgdGhhdCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBvZmYsIGBjaGVja19wbWRgIGlzIHN1cHBvc2VkIHRvIHJldHVybiBgZmFsc2VgLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBJcyB0aGlzIHRydWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG9yIGlzIHRoaXMgbW9yZSBvZiBhIGNvcnJlY3Rpb24gZm9yIGFuIGV4aXN0aW5nIGNvbmRpdGlvbj8gWWVzLCB0aGlzIGJlaGF2aW9yIGNoYW5nZXMgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBub3QgZW5hYmxlZC5cblxuTXkgY29uY2VybiBpcyB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGVyZSBzaG91bGRuJ3QgKmJlKiBhbnkgaHVnZSBQTURzLCByaWdodD8gU28sIGlzIGBjaGVja19wbWRgIG9ubHkgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGh1Z2UgUE1EcyB0byBiZWdpbiB3aXRoPyBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AgZmlsZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NzoyOS45NjM0NTE3OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdFxcdCAqL1xcbiAyNTE6XFx0XFx0XFx0cG1kZSA9IHBtZHBfZ2V0X2xvY2tsZXNzKHB2bXctXFx1MDAzZXBtZCk7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdFxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XFxuIDI1NDpcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4gMjU1OlxcdFxcdFxcdFxcdHBtZGUgPSAqcHZtdy1cXHUwMDNlcG1kO1xcbiAyNTY6XFx0XFx0XFx0XFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbiAyNTc6XFx0XFx0XFx0XFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0XFx0XFx0XFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIHx8XFxuIDI2MDpcXHRcXHRcXHRcXHRcXHQgICAgIShwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSlcXG4gMjYxOlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI2MjpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xcbiAyNjM6XFx0XFxuIDI2NDpcXHRcXHRcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHxcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdCAgICAhY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbiAyNjY6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjY3OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjg6XFx0XFx0XFx0XFx0fVxcbiAyNjk6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcXG4gMjcwOlxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbiAyNzE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjcyOlxcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxcbiAyNzM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjc0OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNzU6XFx0XFx0XFx0XFx0fVxcbiAyNzY6XFx0XFx0XFx0XFx0LyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjc3OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI3ODpcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyNzk6XFx0XFx0XFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcXG4gMjgwOlxcdFxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbiAyODM6XFx0XFx0XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXFx1MDAzZXBtZCk7XFxuIDI4NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjg1OlxcdFxcdFxcdFxcdH1cXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0XFx0XFx0aWYgKChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfU1lOQykgXFx1MDAyNlxcdTAwMjZcXG4gMjg4OlxcdFxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBNRF9PUkRFUikgXFx1MDAyNlxcdTAwMjZcXG4gMjkwOlxcdFxcdFxcdFxcdCAgICAocHZtdy1cXHUwMDNlbnJfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRcXHRcXHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xcbiAyOTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI5NTpcXHRcXHRcXHR9XFxuIDI5NjpcXHRcXHRcXHRpZiAoIW1hcF9wdGUocHZtdywgXFx1MDAyNnBtZGUsIFxcdTAwMjZwdGwpKSB7XFxuIDI5NzpcXHRcXHRcXHRcXHRpZiAoIXB2bXctXFx1MDAzZXB0ZSlcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4gMjk5OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9wdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ3OjI5Ljk2MzU2ODQxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTA3MDg1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBNaWdyYXRpb24gaW4gdGhlIEFic2VuY2Ugb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGJlaGF2ZXMgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApIGFyZW4ndCBlbmFibGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndCBkZWZpbmVkLCB0aGVuIGBwbWRfdHJhbnNfaHVnZWAgaXMgKmFsbW9zdCBjZXJ0YWlubHkqIGFsd2F5cyBnb2luZyB0byBiZSBmYWxzZS4gQnV0IHRoZW4gSSByZW1lbWJlciwgaGFuZyBvbiBhIHNlY29uZCwgd2hhdCBhYm91dCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWA/IENvdWxkIHRoYXQgcG90ZW50aWFsbHkgYmUgdHJ1ZSBldmVuIHdpdGhvdXQgVEhQPyBJdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbkRpZ2dpbmcgZGVlcGVyLCBpZiBUSFAgaXNuJ3QgZW5hYmxlZCwgdGhlbiBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgaXMgcHJvYmFibHkgZ29pbmcgdG8gcmV0dXJuIGZhbHNlLCByaWdodD8gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBzY2VuYXJpby4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgYGNoZWNrX3BtZGAgY291bGQgYmUgZW50aXJlbHkgdW5yZWFjaGFibGUgaW4gdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBJdCdzIHRpbWUgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi5cblxuVG8gY29uZmlybSBteSBoeXBvdGhlc2VzIGFuZCBnYWluIGEgY29uY3JldGUgdW5kZXJzdGFuZGluZywgSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgYW5kIGBwbWRfdHJhbnNfaHVnZSgpYC4gQW5hbHl6aW5nIHRob3NlIHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlcnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6MzQuMTU0Mjc5NDM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjY3NjU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIHBtZF90cmFuc19odWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oPTI1PXN0YXRpYyBpbmxpbmUgcG1kX3QgcHRlX3BtZChwdGVfdCBwdGUpXFxuLS1cXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQyLVxcbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmg6NDM6I2RlZmluZSBwbWRfdHJhbnNfaHVnZShwbWQpXFx0KHBtZF92YWwocG1kKSBcXHUwMDI2IF9QQUdFX0hXX1NaKVxcbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmgtNDQtXFxuLS1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oPTE4Mz1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaC0xOTQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmg6MTk1OiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVxcdChwbWRfdmFsKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF90YWJsZShwbWQpKVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgtMTk2LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NzozNi44MjEwNTE3MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk5MjkzMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBjaGVja19wbWRgIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY2hlY2tfcG1kYC4gUmlnaHQsIGl0J3MgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gTm93LCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndCBlbmFibGVkLCB0aGVuIGBjaGVja19wbWRgIGlzIGdvaW5nIHRvIHJldHVybiBgZmFsc2VgLCByaWdodD8gSG1tLCBpcyB0aGlzIHBhdGNoIGp1c3QgYWRkcmVzc2luZyBzb21lIGtpbmQgb2YgYnVpbGQgaXNzdWU/IEl0IGZlZWxzIHRoYXQgd2F5LiBJIHNob3VsZCByZWFsbHkgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AgZmlsZSAqYmVmb3JlKiB0aGlzIHBhdGNoIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHNpdHVhdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LCBhbmQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0Nzo0MS45MjAzNDc1NjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODcxNzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19wbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQwLS8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQxOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0Mi17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDktI2Vsc2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNTA6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUxLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nz1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2NC1cXHRcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNjU6XFx0XFx0XFx0XFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY2LVxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzEtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzI6XFx0XFx0XFx0XFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjczLVxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ3OjQyLjIzOTA3MjU5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg4NDQyMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipQTUQgSW52ZXN0aWdhdGlvbiAtIEEgUXVpY2sgRGlncmVzc2lvbioqXG5cblJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc2F3IHRoYXQgYGNoZWNrX3BtZGAgaXMgcmVseWluZyBvbiBgSFBBR0VfUE1EX05SYC4gVGhhdCB0cmlnZ2VycyBzb21ldGhpbmcgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBsb2dpYyBjb3JyZWN0bHksIGFuZCB0aGF0IHRoaXMgZGVwZW5kZW5jeSBpc24ndCBtYXNraW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsLiBMZXQgbWUgcXVpY2tseSBqdW1wIGJhY2sgdG8gdGhlIHNvdXJjZSBhbmQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBjaGVja19wbWRgLiBKdXN0IGEgc2FuaXR5IGNoZWNrLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiBob3cgaXQgdXNlcyBgSFBBR0VfUE1EX05SYCB3aXRoaW4gaXRzIGNvbnRleHQsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0J3MgbWFraW5nIGFib3V0IHRoZSBQTUQgc3RydWN0dXJlIGl0c2VsZi4gR290dGEga2VlcCB0aGUgd2hvbGUgcGljdHVyZSBjbGVhciBpbiBteSBoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NDYuNDI3NTE3NTM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX3ZtYV9tYXBwZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMzY6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gMTQwOlxcdC8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXFxuIDE0MTpcXHRzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdGlmICgocGZuICsgSFBBR0VfUE1EX05SIC0gMSkgXFx1MDAzYyBwdm13LVxcdTAwM2VwZm4pXFxuIDE0NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE0NTpcXHRcXHRpZiAocGZuIFxcdTAwM2UgcHZtdy1cXHUwMDNlcGZuICsgcHZtdy1cXHUwMDNlbnJfcGFnZXMgLSAxKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNDc6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDE0ODpcXHR9XFxuIDE0OTpcXHQjZWxzZVxcbiAxNTA6XFx0c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuIDE1MTpcXHR7XFxuIDE1MjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE1MzpcXHR9XFxuIDE1NDpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NDYuNDI3NjIxNzU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NTg1NzAyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdoZXJlIHRoZSBiZWhhdmlvciBzZWVtcyBkZXBlbmRlbnQgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIElmIHRoYXQncyAqbm90KiBzZXQsIHRoZSB2YWx1ZSBvZiBgSFBBR0VfUE1EX05SYCBjb3VsZCBiZSBwcm9ibGVtYXRpYyDigJMgZWl0aGVyIHVuZGVmaW5lZCwgb3IgcG9zc2libHkganVzdCAxLiBUaGF0J3MgYSByZWQgZmxhZy4gQnV0IGhvbGQgb24sIGlzbid0IGBIUEFHRV9QTURfTlJgICp1c3VhbGx5KiBkZWZpbmVkIHNvbWV3aGVyZSBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbi4gSSBoYXZlIGEgaHVuY2ggaXQncyB0aGVyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3MgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGF0IGluY2x1ZGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NTQuMjg2MTk0MDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjE2MzI0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEhQQUdFX1BNRF9OUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTctI2RlZmluZSBIUEFHRV9QTURfT1JERVIgKEhQQUdFX1BNRF9TSElGVC1QQUdFX1NISUZUKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjExODojZGVmaW5lIEhQQUdFX1BNRF9OUiAoMVxcdTAwM2NcXHUwMDNjSFBBR0VfUE1EX09SREVSKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExOS0jZGVmaW5lIEhQQUdFX1BNRF9NQVNLXFx0KH4oSFBBR0VfUE1EX1NJWkUgLSAxKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NTcuMDA3ODMwOTI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTYyNTg4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgaHVnZSBwYWdlIHN0dWZmIGFnYWluLCBhbmQgSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBIUEFHRV9QTURfU0hJRlRgIGNvbnN0YW50IGlzIGRlZmluZWQuIEFoLCByaWdodCwgdGhhdCdzIGl0ISAqYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCouLi4gb2YgY291cnNlLiBJdCB3b3VsZG4ndCBiZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZWFkZXIsIGJ1dCByYXRoZXIgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaHVnZSBwYWdlcy4gR290IGl0LiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgcGxhY2UgdG8gYmUgZm9yIHRoaXMga2luZCBvZiBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBMaW51eCBrZXJuZWwgYW5kIGh1Z2UgbWVtb3J5IHBhZ2VzLiBOb3cgSSBjYW4gZ2V0IG9uIHdpdGggd2hhdGV2ZXIgSSB3YXMgcmVzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODowMC4yMjQwOTI5NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjUwMjIwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEhQQUdFX1BNRF9TSElGVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDktI2lmZGVmIENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjExMDojZGVmaW5lIEhQQUdFX1BNRF9TSElGVCBQTURfU0hJRlRcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTEtI2RlZmluZSBIUEFHRV9QVURfU0hJRlQgUFVEX1NISUZUXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTEyLSNlbHNlXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTEzOiNkZWZpbmUgSFBBR0VfUE1EX1NISUZUICh7IEJVSUxEX0JVRygpOyAwOyB9KVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExNC0jZGVmaW5lIEhQQUdFX1BVRF9TSElGVCAoeyBCVUlMRF9CVUcoKTsgMDsgfSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDg6MDIuNDQ5MTIwNjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzI1MTMxOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9uIGBjaGVja19wbWRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXNuJ3Qgc2V0LCB0aGVuIGBIUEFHRV9QTURfU0hJRlRgIGJlY29tZXMgYSBgQlVJTERfQlVHKClgLCB3aGljaCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvci4gTm93LCBgQ09ORklHX1BHVEFCTEVfSEFTX0hVR0VfTEVBVkVTYCBpcyB0aWVkIHRvIGVpdGhlciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvciBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIFJpZ2h0LCBzbyBpZiBuZWl0aGVyIG9mIHRob3NlIGFyZSBzZXQsIHdlJ3JlIGd1YXJhbnRlZWQgYSBidWlsZCBmYWlsdXJlIHdoZXJlIGBIUEFHRV9QTURfU0hJRlRgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGBCVUlMRF9CVUcoKWAuIFRoaXMgYGNoZWNrX3BtZGAgZnVuY3Rpb24gcmVsaWVzIG9uIGBIUEFHRV9QTURfTlJgLCB3aGljaCB3b3VsZCB0cmlnZ2VyIHRoYXQgZXJyb3IuXG5cbkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGluY2x1ZGVzIGFuIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4uLiBBaCwgSSBzZWUuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpub3QqIHNldCwgYGNoZWNrX3BtZGAganVzdCByZXR1cm5zIGBmYWxzZWAuIFNvLCBpdCBhcHBlYXJzIHRoaXMgaXMgYSBidWlsZCBmaXgsIHJpZ2h0P1xuXG5CdXQgd2h5IGlzIGBjaGVja19wbWRgIGV2ZW4gY2FsbGVkIGluIHRoZSBub24tYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjYXNlPyBMZXQgbWUgdHJhY2UgdGhpcy4uLiBJdCdzIGNhbGxlZCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB3aGVuIGVpdGhlciBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIG9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpYCBpcyB0cnVlLiBJbiB0aGUgY29udGV4dCBvZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBub3QgYmVpbmcgc2V0LCBgcG1kX3RyYW5zX2h1Z2VgIHdpbGwgKmFsd2F5cyogYmUgZmFsc2UuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHdoYXQgYWJvdXQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgPyBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBvbmUgYSBsaXR0bGUgbW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoxNS43NzQyNTUyNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTQ5MzAxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2lzX21pZ3JhdGlvbl9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTE3MzU9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE3NTQtXFx0XFx0c2V0X3BtZF9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwbWRwLCBwbWQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxNzU1OlxcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTE3NTYtXFx0XFx0cG1kID0gcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjU0Mz1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NTEtXFx0XFx0c2V0X3BtZF9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwbWRwLCBwbWQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyNTUyOlxcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NTMtXFx0XFx0cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AocG1kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU5MT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTk6ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAwLSAqIEBwbWQ6IFBNRCBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuLS1cXG5tbS9obW0uYz0zOTY9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vaG1tLmMtNDE0LVxcbm1tL2htbS5jOjQxNTpcXHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZCkpIHtcXG5tbS9obW0uYy00MTYtXFx0XFx0aWYgKGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgMCkpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMwMC1cXHRcXHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2VfbWVtb3J5LmM6MjMwMTpcXHRcXHRcXHRcXHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XFxubW0vaHVnZV9tZW1vcnkuYy0yMzAyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDgwPXN0YXRpYyBwbWRfdCBtb3ZlX3NvZnRfZGlydHlfcG1kKHBtZF90IHBtZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ4Mi1cXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjI0ODM6XFx0XFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kKSkpXFxubW0vaHVnZV9tZW1vcnkuYy0yNDg0LVxcdFxcdFxcdHBtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI3NDg9aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc3NS1cXHRcXHRzcGluX3VubG9jayhzcmNfcHRsKTtcXG5tbS9odWdlX21lbW9yeS5jOjI3NzY6XFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTI3NzctXFx0XFx0XFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBcXHUwMDI2c3JjX3BtZHZhbCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMwNjEtXFx0XFx0XFx0cmV0dXJuO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzA2MjpcXHRcXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvbGRfcG1kKSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMwNjMtXFx0XFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBvbGRfZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChvbGRfcG1kKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzA5Ni1cXG5tbS9odWdlX21lbW9yeS5jOjMwOTc6XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMwOTgtXFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzIyNy1cXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjMyMjg6XFx0aWYgKGZyZWV6ZSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9sZF9wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjI5LVxcdFxcdHB0ZV90IGVudHJ5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMzAzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzMwNDpcXHRpZiAoIXBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpXFxubW0vaHVnZV9tZW1vcnkuYy0zMzA1LVxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgcGFnZSwgdm1hKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMDkwPXN0YXRpYyBpbmxpbmUgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RhdGUocG1kX3QgKnBtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTAxLVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoxMTAyOlxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKVxcbm1tL2todWdlcGFnZWQuYy0xMTAzLVxcdFxcdHJldHVybiBTQ0FOX1BNRF9NQVBQRUQ7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzkyLVxcdFxcdFxcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWFkdmlzZS5jOjM5MzpcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbm1tL21hZHZpc2UuYy0zOTQtXFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4tLVxcbm1tL21lbW9yeS5jPTY0MTc9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy02NDkzLVxcbm1tL21lbW9yeS5jOjY0OTQ6XFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkodm1mLm9yaWdfcG1kKSlcXG5tbS9tZW1vcnkuYy02NDk1LVxcdFxcdFxcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgdm1mLnBtZCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz02NTI9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Ni1cXG5tbS9tZW1wb2xpY3kuYzo2NTc6XFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpKSB7XFxubW0vbWVtcG9saWN5LmMtNjU4LVxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4tLVxcbm1tL21pZ3JhdGUuYz01NDk9dm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9taWdyYXRlLmMtNTUzLVxcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWQpO1xcbm1tL21pZ3JhdGUuYzo1NTQ6XFx0aWYgKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCpwbWQpKVxcbm1tL21pZ3JhdGUuYy01NTUtXFx0XFx0Z290byB1bmxvY2s7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTItXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjUzOlxcdFxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU0LVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoxNy45ODkxOTQ3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA5OTk4NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgUGFnZSBUYWJsZSBMb2dpYyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIGZ1bmN0aW9uIGFjdHVhbGx5IGNvbWVzIGZyb20uIE9rYXksIGEgcXVpY2sgc2NhbiBzdWdnZXN0cyBpdCdzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgZm9yIGxvdy1sZXZlbCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMgdG8gcmVzaWRlLiBOb3csIGxldCdzIHB1bGwgdXAgdGhhdCBoZWFkZXIgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YC4gTmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSB0aGlzIGZ1bmN0aW9uIHVzZXMgdG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gcGFnZSB0YWJsZSBlbnRyeSBpcyBhIG1pZ3JhdGlvbiBlbnRyeS4gUHJvYmFibHkgY2hlY2tpbmcgZmxhZ3Mgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIGJpdCBwYXR0ZXJucyB3aXRoaW4gdGhlIGBwbWRfdGAgc3RydWN0dXJlLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBwYWdlIG1pZ3JhdGlvbnMuIFRpbWUgdG8gZGlnIGluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoyMS42OTkxOTU0ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTY3MTMxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU5MT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ4OjI0LjQ5NTkyODI4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTM5NjY0MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtaWdyYXRpb24gZW50cmllcyBhdCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5IChQTUQpIGxldmVsLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCB0aGUgc291cmNlIGNvZGUgZm9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YC4gTGV0J3Mgc2VlLi4uIHRoZSBkZWZpbml0aW9uIGlzIG1vc3QgbGlrZWx5IHdpdGhpbiB0aGUgaW5jbHVkZSBmaWxlcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgZ2VuZXJhbCBwYWdlIG9wZXJhdGlvbnMuIFJpZ2h0LCBnb29kIGJldCwgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoyOS42MzU1OTUxNjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHQgKiBAcG1kOiBQTUQgZW50cnkuXFxuIDYwMTpcXHQgKlxcbiA2MDI6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgUE1EIGVuY29kZXMgYSBtaWdyYXRpb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbiA2MDU6XFx0e1xcbiA2MDY6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG4gNjA3OlxcdH1cXG4gNjA4OlxcdFxcbiA2MDk6XFx0LyoqXFxuIDYxMDpcXHQgKiBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoKSAtIElzIHRoZSBzcGVjaWZpZWQgc29mdGxlYWYgZW50cnkgb2J0YWluZWQgZnJvbVxcbiA2MTE6XFx0ICogYSBQTUQgb25lIHRoYXQgd2Ugc3VwcG9ydCBhdCBQTUQgbGV2ZWw/XFxuIDYxMjpcXHQgKiBAZW50cnk6IEVudHJ5IHRvIGNoZWNrLlxcbiA2MTM6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgc29mdGxlYWYgZW50cnkgaXMgdmFsaWQgYXQgUE1ELCBvdGhlcndpc2UgZmFsc2UuXFxuIDYxNDpcXHQgKi9cXG4gNjE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4gNjE2OlxcdHtcXG4gNjE3OlxcdFxcdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXFxuIDYxODpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuIDYxOTpcXHRcXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoyOS42MzU3MDcyOTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4MTM5NTI2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBzb2Z0bGVhZl9mcm9tX3BtZGAgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGBzb2Z0bGVhZl9mcm9tX3BtZGAgYmVpbmcgdXRpbGl6ZWQgaGVyZS4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBNeSBicmFpbiBpbW1lZGlhdGVseSBmbGFncyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgVEhQIGVuYWJsZW1lbnQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGlzLCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqbm90KiBlbmFibGVkLCBpcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCB0byBldmFsdWF0ZSB0byB0cnVlPyBJJ20gZG91YnRmdWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBjaGVjayB3aGF0IGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCByZXR1cm5zIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgcmVsYXRpb25zaGlwIG9mIHRoaXMgcGFydGljdWxhciBsaW5lIG9mIGNvZGUgdG8gdGhlIGJyb2FkZXIgVEhQIGNvbnRleHQuIEdvdHRhIG5haWwgZG93biB0aGVzZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjM2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODo0My40NDk2NjI1ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDE5NjgxNDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ4OjQ1Ljg5MTYzOTc2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzcwNjkxMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIE9wdGltaXphdGlvbioqXG5cbkhtbSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIHRoaXMgY29kZS4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBzbmlwcGV0LCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMuLi4gY291bGQgdGhpcyBiZSBhbiBpbmxpbmUgZnVuY3Rpb24gY2FuZGlkYXRlPyBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCB3aGVuIEkgc2VlIGEgc2hvcnQsIG9mdGVuLXVzZWQgcGllY2Ugb2YgbG9naWMgbGlrZSB0aGlzLiBJJ20gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBiZW5lZml0czogcmVkdWNlZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBpbXByb3ZlZCBpbnN0cnVjdGlvbiBjYWNoZSBsb2NhbGl0eSwgcG90ZW50aWFsbHkgYWxsb3dpbmcgZm9yIGZ1cnRoZXIgY29tcGlsZXIgb3B0aW1pemF0aW9uIGR1ZSB0byB0aGUgY29udGV4dCBub3cgYmVpbmcgZXhwYW5kZWQuIEknbSBxdWlja2x5IHdlaWdoaW5nIHRoaXMgYWdhaW5zdCB0aGUgdXN1YWwgZHJhd2JhY2tzIG9mIGlubGluaW5nLCBvZiBjb3Vyc2UgLSBpbmNyZWFzZWQgY29kZSBzaXplIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzIGlmIHVzZWQgdG9vIGxpYmVyYWxseSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgY29kZSBibG9hdCBvdmVyYWxsIGlmIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHRvbyBtYW55IHBsYWNlcy4gQnV0LCBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIHN5c3RlbSdzIGxpa2VseSB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIHBlcmZvcm1hbmNlIHByb2ZpbGUgSSdtIGFpbWluZyBmb3IsIGlubGluaW5nIGhlcmUgKm1pZ2h0KiB5aWVsZCBhIHdvcnRod2hpbGUgZ2Fpbi4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIGV4YW1pbmUgdGhlIGNvZGUncyBjYWxsIHNpdGVzIGFuZCBzaXplLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIHRoZSBmaXJzdCBhdmVudWUgSSdtIGV4cGxvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ4OjUzLjY2MjMzMjk3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNzk0OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aHBfbWlncmF0aW9uX3N1cHBvcnRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTEwOTY9c3RhdGljIHZvaWQgc21hcHNfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMTEwLVxcdFxcdHByZXNlbnQgPSB0cnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMTExOlxcdH0gZWxzZSBpZiAodW5saWtlbHkodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTExMi1cXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjA4OD1zdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxMTQtXFx0XFx0XFx0ZnJhbWUgPSBwbWRfcGZuKHBtZCkgKyBpZHg7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIxMTU6XFx0fSBlbHNlIGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIxMTYtXFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01NTc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTY3LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU2ODpzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01Njkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzU1LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjc1NjpzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03NTcte1xcbi0tXFxubW0vaG1tLmM9Mzk2PXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL2htbS5jLTQxNC1cXG5tbS9obW0uYzo0MTU6XFx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjYgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XFxubW0vaG1tLmMtNDE2LVxcdFxcdGlmIChobW1fcmFuZ2VfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIDApKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4NjQ9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxOTA5OlxcdGlmICh1bmxpa2VseSh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy0xOTEwLVxcdFxcdCAgICAgcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZCkpKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyODA9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyOTktXFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzoyMzAwOlxcdFxcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy0yMzAxLVxcdFxcdFxcdFxcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjM4ND1zdGF0aWMgc3RydWN0IGZvbGlvICpub3JtYWxfb3Jfc29mdGxlYWZfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMzg5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjM5MDpcXHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkpXFxubW0vaHVnZV9tZW1vcnkuYy0yMzkxLVxcdFxcdFdBUk5fT05DRSgxLCBcXFwiTm9uIHByZXNlbnQgaHVnZSBwbWQgd2l0aG91dCBwbWQgbWlncmF0aW9uIGVuYWJsZWQhXFxcIik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI2MDA9aW50IGNoYW5nZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjYxMy1cXG5tbS9odWdlX21lbW9yeS5jOjI2MTQ6XFx0aWYgKHByb3RfbnVtYSBcXHUwMDI2XFx1MDAyNiAhdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSlcXG5tbS9odWdlX21lbW9yeS5jLTI2MTUtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2MjAtXFxubW0vaHVnZV9tZW1vcnkuYzoyNjIxOlxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2IHBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyMi1cXHRcXHRjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgdWZmZF93cCxcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zOTEtXFx0XFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxubW0vbWFkdmlzZS5jOjM5MjpcXHRcXHRcXHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21hZHZpc2UuYy0zOTMtXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xODAwPXN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE4NzgtXFx0XFx0XFx0ICovXFxubW0vbWlncmF0ZS5jOjE4Nzk6XFx0XFx0XFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2IGlzX3RocCkge1xcbm1tL21pZ3JhdGUuYy0xODgwLVxcdFxcdFxcdFxcdG5yX2ZhaWxlZCsrO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0zNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy00Ny1cXG5tbS9taWdyYXRlX2RldmljZS5jOjQ4OlxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWlncmF0ZV9kZXZpY2UuYy00OS1cXHRcXHQobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5MS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE5MjpcXHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTkzLVxcdFxcdChtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTk4LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6OTk5OlxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2ICgqZHN0IFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDAwLVxcdFxcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShtaWdyYXRlLCBhZGRyLCBwYWdlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMDk4PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExNjctXFx0XFx0ICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTY4OlxcdFxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpKSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTY5LVxcdFxcdFxcdGlmICgoc3JjX3BmbnNbaV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTg3PWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU4LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI1OTpcXHRcXHRcXHRcXHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjAtXFx0XFx0XFx0XFx0ICAgICEocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTikpXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyNDYtXFx0XFx0aWYgKGRvX2RlbW90ZV9wYXNzIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmM6MTI0NzpcXHRcXHQgICAgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHwgIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSkge1xcbm1tL3Ztc2Nhbi5jLTEyNDgtXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZkZW1vdGVfZm9saW9zKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDg6NTYuMzAwMjg3Mjc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MjY5MzE2MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUSFAgTWlncmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIG1pZ3JhdGlvbiBpcyBzdXBwb3J0ZWQuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYW5kIGxpa2VseSwgdGhlIHN1cHBvcnQgY2hlY2tzIGZvciBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZm91bmRhdGlvbmFsIGluZm9ybWF0aW9uIHRvIHByb2NlZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDk6MTQuNTY5NjA2OTU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjU6XFx0XFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4gNTY2OlxcdH1cXG4gNTY3OlxcdFxcbiA1Njg6XFx0c3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXFxuIDU2OTpcXHR7XFxuIDU3MDpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTik7XFxuIDU3MTpcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdHZvaWQgc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIDU3NDpcXHRcXHRcXHRcXHQgICBwbWRfdCAqcG1kLCBib29sIGZyZWV6ZSk7XFxuIDU3NTpcXHRib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiA1NzY6XFx0XFx0XFx0XFx0ICAgcG1kX3QgKnBtZHAsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiA1Nzc6XFx0dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbiA1Nzg6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgaGFkZHIpO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHQjZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gNTgxOlxcdFxcbiA1ODI6XFx0c3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDU4MzpcXHR7XFxuIDU4NDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ5OjE0LjU2OTczMTE4OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM0ODI2MDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBEZWZpbml0aW9uIG9mIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJdCBqdXN0IHN0cnVjayBtZSB0aGF0IHRoZSB2YXJpYWJsZSBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWRgIGFwcGVhcnMgdG8gYmUgZGVmaW5lZCAqd2l0aGluKiBhIGNvbmRpdGlvbmFsIGJsb2NrLCBzcGVjaWZpY2FsbHkgdGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBibG9jay4gVGhhdCdzIHVudXN1YWwsIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gdmVyaWZ5IHdoZXJlIHRoaXMgZGVmaW5pdGlvbiAqYWN0dWFsbHkqIGhhcHBlbnMsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgYmVoYXZpb3IuIExldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaXRzIHBsYWNlbWVudCBvbiBsaW5lIDU4MCDigJMgeWVwLCB0aGF0J3Mgd2hlcmUgdGhlIGAjZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9gIHNlY3Rpb24gYmVnaW5zLiBOb3csIHRoZSBjcml0aWNhbCBwaWVjZSDigJMgSSBuZWVkIHRvIGxvb2sgZGlyZWN0bHkgYXQgaG93IGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAgaXMgZGVmaW5lZCAqaW5zaWRlKiB0aGF0IGAjZWxzZWAgYmxvY2suIFVuZGVyc3RhbmRpbmcgdGhhdCBhbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIGZsb3cgaGVyZS4gVGhpcyBjb3VsZCByZXZlYWwgYW4gaW1wb3J0YW50IGRlcGVuZGVuY3kgcmVsYXRlZCB0byBUSFAgY29uZmlndXJhdGlvbiBvciBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIGxvZ2ljLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ5OjI0LjkxNzk5NDU0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzUwOlxcdFxcbiA3NTE6XFx0c3RhdGljIGlubGluZSB2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDc1MjpcXHR7XFxuIDc1MzpcXHRcXHRyZXR1cm47XFxuIDc1NDpcXHR9XFxuIDc1NTpcXHRcXG4gNzU2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbiA3NTc6XFx0e1xcbiA3NTg6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NTk6XFx0fVxcbiA3NjA6XFx0XFxuIDc2MTpcXHRzdGF0aWMgaW5saW5lIGludCBoaWdoZXN0X29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXJzKVxcbiA3NjI6XFx0e1xcbiA3NjM6XFx0XFx0cmV0dXJuIDA7XFxuIDc2NDpcXHR9XFxuIDc2NTpcXHRcXG4gNzY2OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5leHRfb3JkZXIodW5zaWduZWQgbG9uZyAqb3JkZXJzLCBpbnQgcHJldilcXG4gNzY3OlxcdHtcXG4gNzY4OlxcdFxcdHJldHVybiAwO1xcbiA3Njk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0OToyNC45MTgxMzUwOThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzOTI2NjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFRIUCBhbmQgUGFnZSBUYWJsZSBXYWxraW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndCBlbmFibGVkLCB0aGVuIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBpcyBnb2luZyB0byByZXR1cm4gYGZhbHNlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZnVuY3Rpb24gYWdhaW4uIEknbSBnb2luZyB0byBoYXZlIHRvIGFuYWx5emUgaG93IHRoZSBsYWNrIG9mIFRIUCBzdXBwb3J0IGltcGFjdHMgdGhhdCBmdW5jdGlvbi4gSSdtIHN1c3BlY3RpbmcgaXQgaW1wYWN0cyB0aGUgcGFnZSB0YWJsZSB3YWxraW5nIGxvZ2ljLCBsaWtlbHkgc2ltcGxpZnlpbmcgaXQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWJzZW5jZSBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDk6MjguMDU3NDA0Mjc5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX3ZtYV9tYXBwZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0XFx0ICovXFxuIDI1MTpcXHRcXHRcXHRwbWRlID0gcG1kcF9nZXRfbG9ja2xlc3MocHZtdy1cXHUwMDNlcG1kKTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0XFx0XFx0aWYgKHBtZF90cmFuc19odWdlKHBtZGUpIHx8IHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkpIHtcXG4gMjU0OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNTU6XFx0XFx0XFx0XFx0cG1kZSA9ICpwdm13LVxcdTAwM2VwbWQ7XFxuIDI1NjpcXHRcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuIDI1NzpcXHRcXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcbiAyNTg6XFx0XFxuIDI1OTpcXHRcXHRcXHRcXHRcXHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHxcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdCAgICAhKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pKVxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjYyOlxcdFxcdFxcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSB8fFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXFxuIDI2NjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyNjc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI2ODpcXHRcXHRcXHRcXHR9XFxuIDI2OTpcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkge1xcbiAyNzA6XFx0XFx0XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pXFxuIDI3MTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyNzI6XFx0XFx0XFx0XFx0XFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXFxuIDI3MzpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyNzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI3NTpcXHRcXHRcXHRcXHR9XFxuIDI3NjpcXHRcXHRcXHRcXHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbiAyNzc6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHZtdy1cXHUwMDNlcHRsKTtcXG4gMjc4OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuIDI3OTpcXHRcXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0OToyOC4wNTc1MjE0OTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNzA2ODY0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBMb2dpYyBhbmQgQnVpbGQgRml4KipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJ3QgZW5hYmxlZCwgdGhlIGltcGxpY2F0aW9ucyBhcmUgcXVpdGUgY2xlYXIuIEZpcnN0LCBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIGlzIGdvaW5nIHRvIGJlIGZhbHNlLiBUaGVuLCBJIG5lZWQgdG8gY29uc2lkZXIgYHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSlgLiBJIGhhdmUgdG8gcGF1c2UgaGVyZS4gSWYgVEhQIG1pZ3JhdGlvbiBpc24ndCBzdXBwb3J0ZWQsIGNhbiB3ZSBldmVuIGhhdmUgYSBtaWdyYXRpb24gZW50cnk/IEFoLCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIGFuZCB3ZSBkbyBoYXZlIGEgbWlncmF0aW9uIGVudHJ5LCBpdCBnb2VzIGludG8gdGhlIHJlbGV2YW50IGBpZmAgYmxvY2suIFNpbmNlIG1pZ3JhdGlvbiBlbnRyaWVzIGFyZW4ndCBjb25zaWRlcmVkIHByZXNlbnQsIGAhcG1kX3ByZXNlbnQocG1kZSlgIGlzIHRydWUsIGFuZCBpZiB3ZSBhbHNvIGRvbid0IHN1cHBvcnQgdGhlIFRIUCBtaWdyYXRpb24sIHdlIHJldHVybiBgbm90X2ZvdW5kKHB2bXcpYC4gSXQncyBjbGVhciB0aGF0IGluIHRoaXMgcGF0aCwgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIGlzICpuZXZlciogY2FsbGVkLCBpZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQuXG5cbk5vdywgd2hhdCBpZiBgcG1kX3ByZXNlbnQocG1kZSlgIGlzIHRydWU/IFdlIGhpdCB0aGUgbmV4dCBgaWZgIGJsb2NrLCBleHBlY3RpbmcgYHBtZF90cmFuc19odWdlKHBtZGUpYCB0byBiZSB0cnVlLCBidXQgaXQncyAqZmFsc2UqIGJlY2F1c2Ugd2UgZGlzYWJsZWQgVEhQLiBTbywgd2UgZW5kIHVwIGluIHRoZSBzZWN0aW9uIHRoYXQgaGFuZGxlcyBhIFRIUCBQTUQgdGhhdCdzIGJlZW4gc3BsaXQsIHVubG9jaywgYW5kIGNvbnRpbnVlcy4gV2hpY2ggbWVhbnMsICphZ2FpbiosIGBjaGVja19wbWRgIGlzICpuZXZlciogY2FsbGVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2gsIHdpdGggaXRzIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgdGhlIGR1bW15IGBjaGVja19wbWRgIHJldHVybmluZyBgZmFsc2VgIGlzLCBhcyBJIHN1c3BlY3RlZCwgYSBwdXJlIGJ1aWxkIGZpeCEgQnV0Li4uIHdoeSBkaWQgaXQgbmVlZCB0byBiZSBmaXhlZCBpbiB0aGUgZmlyc3QgcGxhY2U/IEFoLCBpdCdzIHRoZSBgY2hlY2tfcG1kYCBmdW5jdGlvbiBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIGBIUEFHRV9QTURfTlJgLiBJZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkaXNhYmxlZCBhbmQsIGltcG9ydGFudGx5LCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgYWxzbyBkaXNhYmxlZCwgYEhQQUdFX1BNRF9OUmAgY2F1c2VzIGEgYnVpbGQgZXJyb3IgYmVjYXVzZSBgSFBBR0VfUE1EX1NISUZUYCBiZWNvbWVzIGEgYCh7IEJVSUxEX0JVRygpOyAwOyB9KWAsIHNpbmNlIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBhcmUgbWlzc2luZy5cblxuQWgsIHllcywgYEhQQUdFX1BNRF9OUmAgaXMgZGVmaW5lZCBhcyBgKDEgXHUwMDNjXHUwMDNjIChIUEFHRV9QTURfU0hJRlQgLSBQQUdFX1NISUZUKSlgLiBJZiBgSFBBR0VfUE1EX1NISUZUYCBpcyBgKHsgQlVJTERfQlVHKCk7IDA7IH0pYCwgdGhlbiwgcHJlY2lzZWx5LCBgSFBBR0VfUE1EX05SYCB0cmlnZ2VycyB0aGF0IGBCVUlMRF9CVUcoKWAuIFNvLCB0aGlzIHBhdGNoIGlzIHNvbGVseSBmaXhpbmcgYSBidWlsZCBlcnJvciB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCBidXQgdGhhdCdzIGEgc21hbGwgcGFydCBvZiB0aGUgc3RvcnkuXG5cbldhaXQsIGlmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCAqaXMqIHNldCwgYnV0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbid0PyBUaGVuIGBDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNgIGlzIHNldCwgYW5kIGBIUEFHRV9QTURfU0hJRlRgIGdldHMgYXNzaWduZWQgdGhlIGNvcnJlY3QgdmFsdWUgd2hpY2ggaXMgYFBNRF9TSElGVGAuIEluIHRoaXMgY2FzZSwgYGNoZWNrX3BtZGAgd291bGQgY29tcGlsZSB3aXRob3V0IGVycm9yLiBCdXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCB1bmNvbmRpdGlvbmFsbHkuIE5vdywgSSBoYXZlIHRvIGdvIGNoZWNrIHdoZXRoZXIgYGNoZWNrX3BtZGAgY291bGQgYmUgY2FsbGVkIGZvciBodWdldGxiIHBhZ2VzLiBJcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGV2ZXIgdXNlZCB3aXRoIGh1Z2V0bGIgcGFnZXM/IEkgbmVlZCB0byBnbyBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0OTozOS4yMjgyMTEyODRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTk4Nzg1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV92bWFfbWFwcGVkX3dhbGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9NTIyPXN0cnVjdCBscnV2ZWM7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzA4PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzEyOnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cXHRcXHR1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODYzLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2NS1cXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3Ni0jZGVmaW5lIERFRklORV9GT0xJT19WTUFfV0FMSyhuYW1lLCBfZm9saW8sIF92bWEsIF9hZGRyZXNzLCBfZmxhZ3MpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg3NzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc4LVxcdFxcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODUtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NjogKiBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0IC0gUmVzdGFydCB0aGUgcGFnZSB0YWJsZSB3YWxrLlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NzogKiBAcHZtdzogUG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05MDQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkwNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTE5OmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MjAtdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyMjpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIzLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjU6ZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjktXFx0XFx0c3RydWN0IHBhZ2UgKm5ldyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQxLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MjpzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ3LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3KVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE2NDpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2NS1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMDEtXFx0KmFjY2Vzc2VkID0gZmFsc2U7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNi1cXHRcXHRpZiAoKmFjY2Vzc2VkKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNzpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODYyPWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2NS0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5tbS9odWdlX21lbW9yeS5jOjQ4NjY6aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5MzktXFxubW0vaHVnZV9tZW1vcnkuYzo0OTQwOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMjU3LSAqL1xcbm1tL2ludGVybmFsLmg6MTI1ODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3NfZW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xcbi0tXFxubW0va3NtLmM9MTI3NT1zdGF0aWMgaW50IHdyaXRlX3Byb3RlY3RfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2tzbS5jLTEyOTYtXFxubW0va3NtLmM6MTI5NzpcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG5tbS9rc20uYy0xMjk4LVxcdFxcdGdvdG8gb3V0X21uO1xcbi0tXFxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxcbm1tL2tzbS5jOjEzNTk6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0va3NtLmMtMTM2MC1vdXRfbW46XFxuLS1cXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjk3LVxcbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbm1tL21pZ3JhdGUuYy0yOTktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzUxLVxcbm1tL21pZ3JhdGUuYzozNTI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL21pZ3JhdGUuYy0zNTMtXFx0XFx0cm1hcF90IHJtYXBfZmxhZ3MgPSBSTUFQX05PTkU7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcXHRcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cXHRcXHRcXHQucHRsID0gcHRsLFxcbi0tXFxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZV9pZGxlLmMtNTgtXFxubW0vcGFnZV9pZGxlLmM6NTk6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3BhZ2VfaWRsZS5jLTYwLVxcdFxcdGFkZHIgPSBwdm13LmFkZHJlc3M7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEwOnN0YXRpYyBpbmxpbmUgYm9vbCBub3RfZm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTExLXtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHB2bXcpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNy1cXHRcXHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04Ny0gKiBtYXBwZWQgYXQgdGhlIEBwdm13LVxcdTAwM2VwdGVcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo4ODogKiBAcHZtdzogcGFnZV92bWFfbWFwcGVkX3dhbGsgc3RydWN0LCBpbmNsdWRlcyBhIHBhaXIgcHRlIGFuZCBwZm4gcmFuZ2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04OS0gKiBmb3IgY2hlY2tpbmdcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTkxLSAqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6OTI6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBmb3VuZCBhIHBsYWNlIHdoZXJlIHBmbiByYW5nZSBpcyAqcG90ZW50aWFsbHkqXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwNi0gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTA4LXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0MTpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDIte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQ5LSNlbHNlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTUwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTUtXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU2OnN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTcte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTYzLS8qKlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2NDogKiBwYWdlX3ZtYV9tYXBwZWRfd2FsayAtIGNoZWNrIGlmIEBwdm13LVxcdTAwM2VwZm4gaXMgbWFwcGVkIGluIEBwdm13LVxcdTAwM2V2bWEgYXRcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjUtICogQHB2bXctXFx1MDAzZWFkZHJlc3NcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjY6ICogQHB2bXc6IHBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLiBwYWdlLCB2bWEsIGFkZHJlc3MgYW5kIGZsYWdzXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY3LSAqIG11c3QgYmUgc2V0LiBwbWQsIHB0ZSBhbmQgcHRsIG11c3QgYmUgTlVMTC5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3My0gKiBJZiBAcHZtdy1cXHUwMDNlcG1kIGlzIHNldCBidXQgQHB2bXctXFx1MDAzZXB0ZSBpcyBub3QsIHlvdSBoYXZlIGZvdW5kIFBNRC1tYXBwZWQgcGFnZVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3NDogKiAodXN1YWxseSBUSFApLiBGb3IgUFRFLW1hcHBlZCBUSFAsIHlvdSBzaG91bGQgcnVuIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgaW5cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzUtICogYSBsb29wIHRvIGZpbmQgYWxsIFBURXMgdGhhdCBtYXAgdGhlIFRIUC5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4My0gKlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4NDogKiBJZiB5b3UgbmVlZCB0byBzdG9wIHRoZSB3YWxrIGJlZm9yZSBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIHJldHVybmVkIGZhbHNlLFxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4NTogKiB1c2UgcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgpLiBJdCB3aWxsIGRvIHRoZSBob3VzZWtlZXBpbmcuXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTg2LSAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4Nzpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xODgte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MzUzPXVuc2lnbmVkIGxvbmcgcGFnZV9tYXBwZWRfaW5fdm1hKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzU2LVxcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM1NzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNTgtXFx0XFx0LnBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpLFxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzY2LVxcdFxcdGdvdG8gb3V0O1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM2NzpcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjgtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MzY5OlxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3MC1vdXQ6XFxuLS1cXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtOTI0LVxcbm1tL3JtYXAuYzo5MjU6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3JtYXAuYy05MjYtXFx0XFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcXG4tLVxcbm1tL3JtYXAuYy05NDgtXFx0XFx0XFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xcbm1tL3JtYXAuYzo5NDk6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTk1MC1cXHRcXHRcXHRwcmEtXFx1MDAzZXZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDtcXG4tLVxcbm1tL3JtYXAuYy05NjMtXFx0XFx0XFx0cHJhLVxcdTAwM2VyZWZlcmVuY2VkID0gLTE7XFxubW0vcm1hcC5jOjk2NDpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtOTY1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3JtYXAuYy0xMDAyLVxcdFxcdGlmIChwdGVzID09IHB2bXcubnJfcGFnZXMpIHtcXG5tbS9ybWFwLmM6MTAwMzpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMTAwNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYz0xMDY0PWludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuLS1cXG5tbS9ybWFwLmMtMTEwMi1cXG5tbS9ybWFwLmM6MTEwMzpzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9ybWFwLmMtMTEwNC17XFxuLS1cXG5tbS9ybWFwLmMtMTExNy1cXG5tbS9ybWFwLmM6MTExODpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsocHZtdykpIHtcXG5tbS9ybWFwLmMtMTExOS1cXHRcXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm1tL3JtYXAuYz0xMjMxPXN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTEyMzQtXFx0c3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKilhcmc7XFxubW0vcm1hcC5jOjEyMzU6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vcm1hcC5jLTEyMzYtXFx0XFx0LnBmblxcdFxcdD0gc3RhdGUtXFx1MDAzZXBmbixcXG4tLVxcbm1tL3JtYXAuYz0xMzEwPWludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcXG4tLVxcbm1tL3JtYXAuYy0xMzEyLXtcXG5tbS9ybWFwLmM6MTMxMzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9ybWFwLmMtMTMxNC1cXHRcXHQucGZuXFx0XFx0PSBwZm4sXFxuLS1cXG5tbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9ybWFwLmM6MTk0NTpcXHRcXHRcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxubW0vcm1hcC5jLTE5NDYtXFx0XFx0XFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MsIHB0ZV90IHB0ZSlcXG4tLVxcbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjAzMS1cXG5tbS9ybWFwLmM6MjAzMjpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vcm1hcC5jLTIwMzMtXFx0XFx0bnJfcGFnZXMgPSAxO1xcbi0tXFxubW0vcm1hcC5jLTIwODktXFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcXG5tbS9ybWFwLmM6MjA5MDpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjA5MS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3JtYXAuYy0yMzYzLXdhbGtfZG9uZTpcXG5tbS9ybWFwLmM6MjM2NDpcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjM2NS1cXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDYwLVxcbm1tL3JtYXAuYzoyNDYxOlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9ybWFwLmMtMjQ2Mi1cXHRcXHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cXG4tLVxcbm1tL3JtYXAuYy0yNDc2LVxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XFxubW0vcm1hcC5jOjI0Nzc6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI0NzgtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9ybWFwLmMtMjQ5My1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjQ5NDpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjQ5NS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNTQ5LVxcdFxcdFxcdFxcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XFxubW0vcm1hcC5jOjI1NTA6XFx0XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI1NTEtXFx0XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuLS1cXG5tbS9ybWFwLmMtMjU2My1cXHRcXHRcXHRcXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjU2NDpcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjU2NS1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNjUwLVxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNjUxOlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNjUyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI2NjEtXFx0XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI2NjI6XFx0XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI2NjMtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjY2OC1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjY2OTpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjY3MC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxMzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxODAtICovXFxubW0vdm1zY2FuLmM6NDE4MTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDE4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ5OjQzLjc0ODA5Nzc1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODAwMDI4MzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBQYWdlIE1hcHBpbmcqKlxuXG5Ib2xkIG9uIGEgbWludXRlLi4uIGlzbid0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gdHJhdmVyc2UgdGhlIG1hcHBpbmdzIG9mIEh1Z2VUTEIgcGFnZXM/IEkgY291bGQgc3dlYXIgSSd2ZSBzZWVuIHRoYXQgaW4gcmVsYXRpb24gdG8gdGhlbS4gQWxyaWdodCwgYmV0dGVyIGNvbmZpcm0gdGhhdCBodW5jaC4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgbGV0J3MgcHVsbCB1cCBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZS4gVGhpcyBzaG91bGQgcmV2ZWFsIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBsYXJnZSBtZW1vcnkgcmVnaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo1MDowMS43NDgzODQ3ODVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NzpcXHRib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4gMTg4OlxcdHtcXG4gMTg5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cXHUwMDNldm1hO1xcbiAxOTA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbiAxOTE6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxuIDE5MjpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDE5MzpcXHRcXHRwdGVfdCBwdGV2YWw7XFxuIDE5NDpcXHRcXHRwZ2RfdCAqcGdkO1xcbiAxOTU6XFx0XFx0cDRkX3QgKnA0ZDtcXG4gMTk2OlxcdFxcdHB1ZF90ICpwdWQ7XFxuIDE5NzpcXHRcXHRwbWRfdCBwbWRlO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHQvKiBUaGUgb25seSBwb3NzaWJsZSBwbWQgbWFwcGluZyBoYXMgYmVlbiBoYW5kbGVkIG9uIGxhc3QgaXRlcmF0aW9uICovXFxuIDIwMDpcXHRcXHRpZiAocHZtdy1cXHUwMDNlcG1kIFxcdTAwMjZcXHUwMDI2ICFwdm13LVxcdTAwM2VwdGUpXFxuIDIwMTpcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRpZiAodW5saWtlbHkoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpKSB7XFxuIDIwNDpcXHRcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfdm1hKHZtYSk7XFxuIDIwNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGUpO1xcbiAyMDY6XFx0XFx0XFx0LyogVGhlIG9ubHkgcG9zc2libGUgbWFwcGluZyB3YXMgaGFuZGxlZCBvbiBsYXN0IGl0ZXJhdGlvbiAqL1xcbiAyMDc6XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZXB0ZSlcXG4gMjA4OlxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDIwOTpcXHRcXHRcXHQvKlxcbiAyMTA6XFx0XFx0XFx0ICogQWxsIGNhbGxlcnMgdGhhdCBnZXQgaGVyZSB3aWxsIGFscmVhZHkgaG9sZCB0aGVcXG4gMjExOlxcdFxcdFxcdCAqIGlfbW1hcF9yd3NlbS4gIFRoZXJlZm9yZSwgbm8gYWRkaXRpb25hbCBsb2NrcyBuZWVkIHRvIGJlXFxuIDIxMjpcXHRcXHRcXHQgKiB0YWtlbiBiZWZvcmUgY2FsbGluZyBodWdldGxiX3dhbGsoKS5cXG4gMjEzOlxcdFxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRlID0gaHVnZXRsYl93YWxrKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcywgc2l6ZSk7XFxuIDIxNTpcXHRcXHRcXHRpZiAoIXB2bXctXFx1MDAzZXB0ZSlcXG4gMjE2OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGUsIG1tLCBwdm13LVxcdTAwM2VwdGUpO1xcbiAyMTk6XFx0XFx0XFx0aWYgKCFjaGVja19wdGUocHZtdywgcGFnZXNfcGVyX2h1Z2VfcGFnZShoc3RhdGUpKSlcXG4gMjIwOlxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDIyMTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZW5kID0gdm1hX2FkZHJlc3NfZW5kKHB2bXcpO1xcbiAyMjU6XFx0XFx0aWYgKHB2bXctXFx1MDAzZXB0ZSlcXG4gMjI2OlxcdFxcdFxcdGdvdG8gbmV4dF9wdGU7XFxuIDIyNzpcXHRyZXN0YXJ0OlxcbiAyMjg6XFx0XFx0ZG8ge1xcbiAyMjk6XFx0XFx0XFx0cGdkID0gcGdkX29mZnNldChtbSwgcHZtdy1cXHUwMDNlYWRkcmVzcyk7XFxuIDIzMDpcXHRcXHRcXHRpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSB7XFxuIDIzMTpcXHRcXHRcXHRcXHRzdGVwX2ZvcndhcmQocHZtdywgUEdESVJfU0laRSk7XFxuIDIzMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjMzOlxcdFxcdFxcdH1cXG4gMjM0OlxcdFxcdFxcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBwdm13LVxcdTAwM2VhZGRyZXNzKTtcXG4gMjM1OlxcdFxcdFxcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpIHtcXG4gMjM2OlxcdFxcdFxcdFxcdHN0ZXBfZm9yd2FyZChwdm13LCBQNERfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjUwOjAxLjc0ODUxNDgzNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjI2NDU0MzczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIGZvciBodWdldGxiIHBhZ2VzLCBpdCdzIGBodWdldGxiX3dhbGtgIGFuZCBgY2hlY2tfcHRlYCwgbm90IGBjaGVja19wbWRgIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoLlwiIFRoYXQncyBjcnVjaWFsOyBgY2hlY2tfcG1kYCBpcyAqc3BlY2lmaWNhbGx5KiBmb3IgVEhQIOKAkyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBTbywgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJ3Qgc2V0LCBgY2hlY2tfcG1kYCBpcyBuZXZlciBldmVuICpjYWxsZWQqLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBibG9jayBhbmQgYSBkdW1teSBgY2hlY2tfcG1kYCB0aGF0IHJldHVybnMgYGZhbHNlYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBqdXN0IGEgYnVpbGQgZml4LCB0byBhdm9pZCBhIGBCVUlMRF9CVUcoKWAgY2F1c2VkIGJ5IGBIUEFHRV9QTURfTlJgIHdoZW4gVEhQIGlzIG9mZi5cblxuQnV0IHdhaXQgYSBtaW51dGUsIGxldCBtZSBwbGF5IGRldmlsJ3MgYWR2b2NhdGUuIFdoYXQgaWYgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXMgc2V0IChiZWNhdXNlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyksIGJ1dCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndD8gSW4gdGhhdCBjYXNlLCBgSFBBR0VfUE1EX05SYCAqd291bGQqIGJlIGRlZmluZWQgYW55d2F5LCBhbmQgdGhlIG9yaWdpbmFsIGNvZGUgc2hvdWxkIGNvbXBpbGUganVzdCBmaW5lLiAgU28sIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBldmVuIHRob3VnaCB0aGUgb3JpZ2luYWwgY29kZSBtaWdodCBoYXZlIHdvcmtlZC4gSXMgdGhlcmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0IGhlcmUsIG9yIGlzIGl0ICpwdXJlbHkqIGEgYnVpbGQtdGltZSB0aGluZz9cblxuSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKm5vdCogc2V0LCB0aGUgYGNoZWNrX3BtZGAgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLiBUaGVyZWZvcmUsIGNoYW5naW5nIGl0cyByZXR1cm4gdmFsdWUgdG8gYGZhbHNlYCBoYXMgbm8gZWZmZWN0IG9uIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgaGF2ZSB0byBkb3VibGUgY2hlY2suIFdoZXJlICpjb3VsZCogYGNoZWNrX3BtZGAgYmUgY2FsbGVkPyBMZXQncyB0cmFjZSBpdCB0aHJvdWdoLiBBaCwgSSBzZWUgaXQhIEl0J3MgaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgd2l0aGluIHRoaXMgY3JpdGljYWwgYmxvY2sgb2YgY29kZTpcblxuYGBgY1xuXHRcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XG5cdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG5cdFx0XHRwbWRlID0gKnB2bXctXHUwMDNlcG1kO1xuXHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuXHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuXG5cdFx0XHRcdGlmICghdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSB8fFxuXHRcdFx0XHQgICAgIShwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTikpXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcblxuXHRcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHxcblx0XHRcdFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkge1xuXHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuXHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuXHRcdH1cbmBgYFxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGlzIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGlzYWJsZWQ6XG5cbjEuICBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIGlzIGBmYWxzZWAuIFRoYXQncyBndWFyYW50ZWVkLlxuMi4gIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpYCBjb3VsZCBiZSBgdHJ1ZWAsIHJpZ2h0PyBMZXQncyBjaGVjay5cbjMuICBJZiBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKWAgaXMgYHRydWVgLCB0aGVuIGAhcG1kX3ByZXNlbnQocG1kZSlgIHdpbGwgYWxzbyBiZSBgdHJ1ZWAuXG40LiAgVGhlbiwgdGhlIGNvZGUgY2hlY2tzIGAhdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpub3QqIHNldCwgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkKClgIGlzIGBmYWxzZWAuXG41LiAgVGhlcmVmb3JlLCBgIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKClgIGlzIGB0cnVlYC5cbjYuICBJdCBpbW1lZGlhdGVseSByZXR1cm5zIGBub3RfZm91bmQocHZtdylgLiAgQ3JpdGljYWxseSwgaXQgKm5ldmVyKiByZWFjaGVzIHRoZSBgY2hlY2tfcG1kYCBjYWxsIVxuXG5XaGF0IGlmIGBwbWRfcHJlc2VudChwbWRlKWAgKmlzKiBgdHJ1ZWAgKHNvIHdlIHNraXAgdGhlIGZpcnN0IGBpZlxuXG4iLCJJbnB1dFRva2VucyI6MjMxMzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NTA6MTguMDEzMDYyNDYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgyNDMxMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBwbWRfdHJhbnNfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaD0yNT1zdGF0aWMgaW5saW5lIHBtZF90IHB0ZV9wbWQocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaC00Mi1cXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oOjQzOiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVxcdChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IV19TWilcXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQ0LVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaD0xODM9c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgtMTk0LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oOjE5NTojZGVmaW5lIHBtZF90cmFuc19odWdlKHBtZClcXHQocG1kX3ZhbChwbWQpIFxcdTAwMjZcXHUwMDI2ICFwbWRfdGFibGUocG1kKSlcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oLTE5Ni0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NTA6MjEuNzk1NTAwMDM4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTg0NDU5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOlxuXG4qKkh1aCwgVGhhdCdzIFVuZXhwZWN0ZWQuKipcblxuV2FpdCBhIHNlY29uZC4uLiBJJ20gbG9va2luZyBhdCBgYXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaGAgYW5kIEkgc2VlIGBwbWRfdHJhbnNfaHVnZWAgZGVmaW5lZCAqd2l0aG91dCogYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjaGVjayBmb3IgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWA/IFRoYXQncyBub3QgcmlnaHQuIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIGNoZWNrIHRoZXJlLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgcG9ydGFiaWxpdHkgaXNzdWUgb3IgYSBtaXNzZWQgY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBtZF90cmFuc19odWdlYCBpcyBhY3R1YWxseSBoYW5kbGVkIGluIHRoZSBhYnNlbmNlIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBiZWluZyBlbmFibGVkLlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSBwaXZvdCBhbmQgY2hlY2sgYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSdtIGJldHRpbmcgb25lIG9mIHRoZW0gcHJvdmlkZXMgdGhlIGZhbGxiYWNrIGRlZmluaXRpb24gb3IgdGhlIGJhc2UgZGVmaW5pdGlvbiBmb3IgdGhpcywgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb25lIGlzIHN1cHBvc2VkIHRvIGJ1aWxkIHVwb24gdGhhdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSBnZW5lcmljIGRlZmluaXRpb24sIGFuZCB3aGF0IGl0IGRvZXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjbHVlIEkgbmVlZCB0byBrbm93IHdoeSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgZG9pbmcgd2hhdCBpdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjUwOjI5LjQ5Mzk0ODM4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0Mzc2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF90cmFuc19odWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ0NT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2h1Z2UocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDQ3LVxcdGlmIChwbWRfcHJlc2VudChwbWQpKSB7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDQ4OlxcdFxcdHJldHVybiBwbWRfdHJhbnNfaHVnZShwbWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ0OS1cXHR9IGVsc2UgaWYgKCFwbWRfbm9uZShwbWQpKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTY9dm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5ODpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ5OS1zcGlubG9ja190ICpfX3B1ZF90cmFuc19odWdlX2xvY2socHVkX3QgKnB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAxLS8qIG1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDI6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA1LVxcdGlmIChwbWRfaXNfaHVnZSgqcG1kKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XFx0XFx0cmV0dXJuIF9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzA5PXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTQtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxNTpzdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKnBtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTA9ZW51bSBwYWdlX3dhbGtfbG9jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMjctICpcXHRcXHRcXHR0aGlzIGhhbmRsZXIgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBoYW5kbGVcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6Mjg6ICpcXHRcXHRcXHRwbWRfdHJhbnNfaHVnZSgpIHBtZHMuICBUaGV5IG1heSBzaW1wbHkgY2hvb3NlIHRvXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTI5LSAqXFx0XFx0XFx0c3BsaXRfaHVnZV9wYWdlKCkgaW5zdGVhZCBvZiBoYW5kbGluZyBpdCBleHBsaWNpdGx5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTk5OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfemVyb19wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIwMDktI2lmbmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMDEwOnN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDExLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NTA6MjkuODA4MzMwNzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzODA2ODY3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHBtZF90cmFuc19odWdlYCBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY29kZSdzIHBvaW50aW5nIG1lIGRpcmVjdGx5IHRvIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAsIHNwZWNpZmljYWxseSBsaW5lIDIwMTAuIFJpZ2h0LCBgcG1kX3RyYW5zX2h1Z2VgLiBPa2F5LCBzbyBpdCdzIHNldHRpbmcgdXAgdGhlIHJldHVybiB2YWx1ZS4gQW5kIHdoYXQgYW0gSSBsb29raW5nIGF0PyAqSWYqIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbid0IHNldCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uLi50aGVuIHRoZSBmdW5jdGlvbiBgcG1kX3RyYW5zX2h1Z2VgIHJldHVybnMgMC4gVGhhdOKAmXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZS4gQSBzdHJhaWdodGZvcndhcmQgYW5kIGV4cGVjdGVkIGNvbmRpdGlvbmFsIGRlZmluaXRpb24uIE5vdGhpbmcgcGFydGljdWxhcmx5IGdyb3VuZGJyZWFraW5nLCBidXQgdml0YWwuIEl0J3MgYSBxdWljaywgY2xlYXIgd2F5IG9mIGRpc2FibGluZyBodWdlIHBhZ2Ugc3VwcG9ydCBhdCB0aGUgcGFnZSB0YWJsZSBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo1MDo0MS4xODkwMTk4MjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGd0YWJsZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMDU6XFx0I2VuZGlmIC8qIF9fSEFWRV9DT0xPUl9aRVJPX1BBR0UgKi9cXG4yMDA2OlxcdFxcbjIwMDc6XFx0I2lmZGVmIENPTkZJR19NTVVcXG4yMDA4OlxcdFxcbjIwMDk6XFx0I2lmbmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4yMDEwOlxcdHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG4yMDExOlxcdHtcXG4yMDEyOlxcdFxcdHJldHVybiAwO1xcbjIwMTM6XFx0fVxcbjIwMTQ6XFx0I2lmbmRlZiBwbWRfd3JpdGVcXG4yMDE1OlxcdHN0YXRpYyBpbmxpbmUgaW50IHBtZF93cml0ZShwbWRfdCBwbWQpXFxuMjAxNjpcXHR7XFxuMjAxNzpcXHRcXHRCVUcoKTtcXG4yMDE4OlxcdFxcdHJldHVybiAwO1xcbjIwMTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo1MDo0MS4xODkyMzg3NzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxNjkzNjI1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWlsZCBGaXggZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0J3MgY3J5c3RhbCBjbGVhciB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbid0IGVuYWJsZWQsIHRoZW4gYHBtZF90cmFuc19odWdlYCBpcyBhbHdheXMgemVybywgYW5kIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAgaXMgYWx3YXlzIGZhbHNlLiBUaGVyZWZvcmUsIHRoZSBjb25kaXRpb25hbCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgc3BlY2lmaWNhbGx5IHRoZSBgaWZgIHN0YXRlbWVudCBpbnZvbHZpbmcgYHBtZF90cmFuc19odWdlYCBhbmQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgLCBpcyBhIGRlYWQgZW5kLiBUaGUgYGNoZWNrX3BtZGAgcGF0aCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMuIFNvLCB0aGlzIHBhdGNoIGlzIHNpbXBseSBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBhIGJ1aWxkIGZpeCB0byBwcmV2ZW50IGBIUEFHRV9QTURfTlJgIGZyb20gdHJpZ2dlcmluZyBhIGBCVUlMRF9CVUcoKWAgd2hlbiBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYXJlIGRpc2FibGVkLiBJdCdzIHN0cmljdGx5IGEgY29tcGlsZS10aW1lIHNhZmVndWFyZDsgdGhlcmUncyB6ZXJvIGltcGFjdCBvbiBhbnkgcmVhY2hhYmxlIGNvZGUgcGF0aHMuIE15IGZpbmFsIGNvbmNsdXNpb24/IFRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZzogZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTIxLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjUwOjU5LjM1ODYwMzQ3NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYXJvdW5kIGNoZWNrX3BtZCgpIHRvIGZpeCBhIGJ1aWxkIGVycm9yIHdoZW4gVEhQIGlzIGRpc2FibGVkLiBXaGVuIFRIUCBpcyBkaXNhYmxlZCwgY2hlY2tfcG1kKCkgaXMgbmV2ZXIgcmVhY2hlZCBpbiBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGJlY2F1c2UgcG1kX3RyYW5zX2h1Z2UoKSBhbmQgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBib3RoIHJldHVybiBmYWxzZSwgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gYmFpbCBvdXQgZWFybHkuIFRodXMsIHRoaXMgaXMgcHVyZWx5IGEgYnVpbGQgZml4IHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowswc89[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 08:36:59 +0000 UTC FinishedAt: 2026-06-24 08:51:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmFhNTFkMTM2YzVmZThkOGZiYjdkNjljYTM1ZmQ0ZmUzMDFkMjYyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA4OjQ2OjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi43ODEyMDA4NjA4ODY0NSAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuQEAgLTEzNiw2ICYjNDM7MTM2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xuIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIHtcbkBAIC0xNDUsNiAmIzQzOzE0NiwxMiBAQCBzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYWE1MWQxMzZjNWZlOGQ4ZmJiN2Q2OWNhMzVmZDRmZTMwMWQyNjJhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdW4gMjQgMDg6NDY6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jCmluZGV4IDJjY2JhYmZiMmNjMTdhLi43ODEyMDA4NjA4ODY0NSAxMDA2NDQKLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV92bWFfbWFwcGVkLmMKQEAgLTEzNiw2ICYjNDM7MTM2LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqLwogc3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiB7CkBAIC0xNDUsNiAmIzQzOzE0NiwxMiBAQCBzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJcmV0dXJuIGZhbHNlOwogCXJldHVybiB0cnVlOwogfQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgogCiBzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTt2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsbHkgd3JhcHBpbmcgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIHdpdGggYSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNvLCBpZiBUSFAgaXMgZW5hYmxlZCwgYGNoZWNrX3BtZGAgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIElmIG5vdCwgaXQganVzdCByZXR1cm5zIGZhbHNlLiBUaGF0JiMzOTtzIGEgY2xldmVyIHdheSB0byBrZWVwIHRoaW5ncyBjbGVhbiBhbmQgZnVuY3Rpb25hbC4gTm93LCB0byB0cnVseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2gsIEkgbmVlZCB0byBzZWUgKmhvdyogYGNoZWNrX3BtZGAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AuIEkmIzM5O2xsIGRlbHZlIGludG8gdGhlIGNvZGUgdG8gdHJhY2UgaXRzIHVzYWdlIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhcm91bmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBjb250cm9sIGZsb3csIGFuZCB3aHkgdGhleSBvcHRlZCBmb3IgdGhpcyBhcHByb2FjaC4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0eSBUSFAgYnJpbmdzIGludG8gdGhlIG1peC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQwLS8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDE6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDIte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0OS0jZWxzZVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTUwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUxLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY0LVx0XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpIHx8XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNjU6XHRcdFx0XHQgICAgIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ni1cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzEtXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzI6XHRcdFx0XHRpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3My1cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IHJlc29sdmluZyBhIGJ1aWxkIG9yIGxvZ2ljYWwgZXJyb3IsIHNwZWNpZmljYWxseSB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydDsgY2F0Y2hpbmcgdGhlc2UgZWRnZSBjYXNlcyBpcyBpbXBvcnRhbnQuIE5vdywgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYGNoZWNrX3BtZGAgaXMgdXNlZCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCgpUaGUgY29kZSYjMzk7cyBiZWhhdmlvciBkaWN0YXRlcyB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG9mZiwgYGNoZWNrX3BtZGAgaXMgc3VwcG9zZWQgdG8gcmV0dXJuIGBmYWxzZWAuIEkgbmVlZCB0byB0aGluayB0aGlzIHRocm91Z2guIElzIHRoaXMgdHJ1bHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgb3IgaXMgdGhpcyBtb3JlIG9mIGEgY29ycmVjdGlvbiBmb3IgYW4gZXhpc3RpbmcgY29uZGl0aW9uPyBZZXMsIHRoaXMgYmVoYXZpb3IgY2hhbmdlcyB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIG5vdCBlbmFibGVkLgoKTXkgY29uY2VybiBpcyB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGVyZSBzaG91bGRuJiMzOTt0ICpiZSogYW55IGh1Z2UgUE1EcywgcmlnaHQ/IFNvLCBpcyBgY2hlY2tfcG1kYCBvbmx5IGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBodWdlIFBNRHMgdG8gYmVnaW4gd2l0aD8gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCBmaWxlLiBUaW1lIHRvIGludmVzdGlnYXRlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0XHQgKi9cbiAyNTE6XHRcdFx0cG1kZSA9IHBtZHBfZ2V0X2xvY2tsZXNzKHB2bXctXHUwMDNlcG1kKTtcbiAyNTI6XHRcbiAyNTM6XHRcdFx0aWYgKHBtZF90cmFuc19odWdlKHBtZGUpIHx8IHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkpIHtcbiAyNTQ6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjU1Olx0XHRcdFx0cG1kZSA9ICpwdm13LVx1MDAzZXBtZDtcbiAyNTY6XHRcdFx0XHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4gMjU3Olx0XHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuIDI1ODpcdFxuIDI1OTpcdFx0XHRcdFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIHx8XG4gMjYwOlx0XHRcdFx0XHQgICAgIShwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTikpXG4gMjYxOlx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjYyOlx0XHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuIDI2MzpcdFxuIDI2NDpcdFx0XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpIHx8XG4gMjY1Olx0XHRcdFx0XHQgICAgIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbiAyNjY6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNjc6XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuIDI2ODpcdFx0XHRcdH1cbiAyNjk6XHRcdFx0XHRpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkge1xuIDI3MDpcdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuIDI3MTpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI3MjpcdFx0XHRcdFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXG4gMjczOlx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjc0Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNzU6XHRcdFx0XHR9XG4gMjc2Olx0XHRcdFx0LyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cbiAyNzc6XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4gMjc4Olx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuIDI3OTpcdFx0XHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuIDI4MDpcdFx0XHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiAyODE6XHRcbiAyODI6XHRcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gMjgzOlx0XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjg0Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyODU6XHRcdFx0XHR9XG4gMjg2Olx0XG4gMjg3Olx0XHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuIDI4ODpcdFx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuIDI4OTpcdFx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4gMjkwOlx0XHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbiAyOTE6XHRcdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjkyOlx0XG4gMjkzOlx0XHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbiAyOTQ6XHRcdFx0XHRjb250aW51ZTtcbiAyOTU6XHRcdFx0fVxuIDI5NjpcdFx0XHRpZiAoIW1hcF9wdGUocHZtdywgXHUwMDI2cG1kZSwgXHUwMDI2cHRsKSkge1xuIDI5NzpcdFx0XHRcdGlmICghcHZtdy1cdTAwM2VwdGUpXG4gMjk4Olx0XHRcdFx0XHRnb3RvIHJlc3RhcnQ7XG4gMjk5Olx0XHRcdFx0Z290byBuZXh0X3B0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlIFBhZ2UgTWlncmF0aW9uIGluIHRoZSBBYnNlbmNlIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGJlaGF2ZXMgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApIGFyZW4mIzM5O3QgZW5hYmxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJiMzOTt0IGRlZmluZWQsIHRoZW4gYHBtZF90cmFuc19odWdlYCBpcyAqYWxtb3N0IGNlcnRhaW5seSogYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlLiBCdXQgdGhlbiBJIHJlbWVtYmVyLCBoYW5nIG9uIGEgc2Vjb25kLCB3aGF0IGFib3V0IGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YD8gQ291bGQgdGhhdCBwb3RlbnRpYWxseSBiZSB0cnVlIGV2ZW4gd2l0aG91dCBUSFA/IEl0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuCgpEaWdnaW5nIGRlZXBlciwgaWYgVEhQIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBpcyBwcm9iYWJseSBnb2luZyB0byByZXR1cm4gZmFsc2UsIHJpZ2h0PyBUaGF0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBzY2VuYXJpby4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGF0IGBjaGVja19wbWRgIGNvdWxkIGJlIGVudGlyZWx5IHVucmVhY2hhYmxlIGluIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgdGltZSB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLgoKVG8gY29uZmlybSBteSBoeXBvdGhlc2VzIGFuZCBnYWluIGEgY29uY3JldGUgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkKClgIGFuZCBgcG1kX3RyYW5zX2h1Z2UoKWAuIEFuYWx5emluZyB0aG9zZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXJzIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgcG1kX3RyYW5zX2h1Z2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaD0yNT1zdGF0aWMgaW5saW5lIHBtZF90IHB0ZV9wbWQocHRlX3QgcHRlKVxuLS1cbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmgtNDItXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oOjQzOiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVx0KHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFdfU1opXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQ0LVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmg9MTgzPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaC0xOTQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaDoxOTU6I2RlZmluZSBwbWRfdHJhbnNfaHVnZShwbWQpXHQocG1kX3ZhbChwbWQpIFx1MDAyNlx1MDAyNiAhcG1kX3RhYmxlKHBtZCkpXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oLTE5Ni0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgY2hlY2tfcG1kYCBhbmQgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBjaGVja19wbWRgLiBSaWdodCwgaXQmIzM5O3MgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gTm93LCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiBgY2hlY2tfcG1kYCBpcyBnb2luZyB0byByZXR1cm4gYGZhbHNlYCwgcmlnaHQ/IEhtbSwgaXMgdGhpcyBwYXRjaCBqdXN0IGFkZHJlc3Npbmcgc29tZSBraW5kIG9mIGJ1aWxkIGlzc3VlPyBJdCBmZWVscyB0aGF0IHdheS4gSSBzaG91bGQgcmVhbGx5IHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGZpbGUgKmJlZm9yZSogdGhpcyBwYXRjaCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzaXR1YXRpb24gYW5kIHVuZGVyc3RhbmQgaXRzIGltcGFjdCwgYW5kIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHdoYXQgSSB0aGluayBpdCBpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQxOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQyLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDktI2Vsc2Vcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1MDpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTg3PWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2NC1cdFx0XHRcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSB8fFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjY1Olx0XHRcdFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjYtXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjcxLVx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MjcyOlx0XHRcdFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzMtXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipQTUQgSW52ZXN0aWdhdGlvbiAtIEEgUXVpY2sgRGlncmVzc2lvbioqCgpSaWdodCwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHNhdyB0aGF0IGBjaGVja19wbWRgIGlzIHJlbHlpbmcgb24gYEhQQUdFX1BNRF9OUmAuIFRoYXQgdHJpZ2dlcnMgc29tZXRoaW5nIGluIG15IGhlYWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGxvZ2ljIGNvcnJlY3RseSwgYW5kIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzbiYjMzk7dCBtYXNraW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsLiBMZXQgbWUgcXVpY2tseSBqdW1wIGJhY2sgdG8gdGhlIHNvdXJjZSBhbmQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBjaGVja19wbWRgLiBKdXN0IGEgc2FuaXR5IGNoZWNrLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiBob3cgaXQgdXNlcyBgSFBBR0VfUE1EX05SYCB3aXRoaW4gaXRzIGNvbnRleHQsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0JiMzOTtzIG1ha2luZyBhYm91dCB0aGUgUE1EIHN0cnVjdHVyZSBpdHNlbGYuIEdvdHRhIGtlZXAgdGhlIHdob2xlIHBpY3R1cmUgY2xlYXIgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0XHRcdHJldHVybiBmYWxzZTtcbiAxMzY6XHRcdHJldHVybiB0cnVlO1xuIDEzNzpcdH1cbiAxMzg6XHRcbiAxMzk6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gMTQwOlx0LyogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gcmFuZ2VzIG92ZXJsYXAuICBDYXJlZnVsIHRvIG5vdCBvdmVyZmxvdy4gKi9cbiAxNDE6XHRzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiAxNDI6XHR7XG4gMTQzOlx0XHRpZiAoKHBmbiAmIzQzOyBIUEFHRV9QTURfTlIgLSAxKSBcdTAwM2MgcHZtdy1cdTAwM2VwZm4pXG4gMTQ0Olx0XHRcdHJldHVybiBmYWxzZTtcbiAxNDU6XHRcdGlmIChwZm4gXHUwMDNlIHB2bXctXHUwMDNlcGZuICYjNDM7IHB2bXctXHUwMDNlbnJfcGFnZXMgLSAxKVxuIDE0NjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTQ3Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxNDg6XHR9XG4gMTQ5Olx0I2Vsc2VcbiAxNTA6XHRzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiAxNTE6XHR7XG4gMTUyOlx0XHRyZXR1cm4gZmFsc2U7XG4gMTUzOlx0fVxuIDE1NDpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDgyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdoZXJlIHRoZSBiZWhhdmlvciBzZWVtcyBkZXBlbmRlbnQgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIElmIHRoYXQmIzM5O3MgKm5vdCogc2V0LCB0aGUgdmFsdWUgb2YgYEhQQUdFX1BNRF9OUmAgY291bGQgYmUgcHJvYmxlbWF0aWMg4oCTIGVpdGhlciB1bmRlZmluZWQsIG9yIHBvc3NpYmx5IGp1c3QgMS4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBCdXQgaG9sZCBvbiwgaXNuJiMzOTt0IGBIUEFHRV9QTURfTlJgICp1c3VhbGx5KiBkZWZpbmVkIHNvbWV3aGVyZSBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbi4gSSBoYXZlIGEgaHVuY2ggaXQmIzM5O3MgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3BlY2lmaWNzIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoYXQgaW5jbHVkZSBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgSFBBR0VfUE1EX05SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExNy0jZGVmaW5lIEhQQUdFX1BNRF9PUkRFUiAoSFBBR0VfUE1EX1NISUZULVBBR0VfU0hJRlQpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMTg6I2RlZmluZSBIUEFHRV9QTURfTlIgKDFcdTAwM2NcdTAwM2NIUEFHRV9QTURfT1JERVIpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTktI2RlZmluZSBIUEFHRV9QTURfTUFTS1x0KH4oSFBBR0VfUE1EX1NJWkUgLSAxKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBodWdlIHBhZ2Ugc3R1ZmYgYWdhaW4sIGFuZCBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYEhQQUdFX1BNRF9TSElGVGAgY29uc3RhbnQgaXMgZGVmaW5lZC4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGl0ISAqYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCouLi4gb2YgY291cnNlLiBJdCB3b3VsZG4mIzM5O3QgYmUgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaGVhZGVyLCBidXQgcmF0aGVyIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMuIEdvdCBpdC4gVGhhdCBmaWxlIGlzIHRoZSBjZW50cmFsIHBsYWNlIHRvIGJlIGZvciB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgTGludXgga2VybmVsIGFuZCBodWdlIG1lbW9yeSBwYWdlcy4gTm93IEkgY2FuIGdldCBvbiB3aXRoIHdoYXRldmVyIEkgd2FzIHJlc2VhcmNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgSFBBR0VfUE1EX1NISUZUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwOS0jaWZkZWYgQ09ORklHX1BHVEFCTEVfSEFTX0hVR0VfTEVBVkVTXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMTA6I2RlZmluZSBIUEFHRV9QTURfU0hJRlQgUE1EX1NISUZUXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTEtI2RlZmluZSBIUEFHRV9QVURfU0hJRlQgUFVEX1NISUZUXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTItI2Vsc2VcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjExMzojZGVmaW5lIEhQQUdFX1BNRF9TSElGVCAoeyBCVUlMRF9CVUcoKTsgMDsgfSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExNC0jZGVmaW5lIEhQQUdFX1BVRF9TSElGVCAoeyBCVUlMRF9CVUcoKTsgMDsgfSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg5MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvbiBgY2hlY2tfcG1kYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXNuJiMzOTt0IHNldCwgdGhlbiBgSFBBR0VfUE1EX1NISUZUYCBiZWNvbWVzIGEgYEJVSUxEX0JVRygpYCwgd2hpY2ggaXMgYSBjb21waWxlLXRpbWUgZXJyb3IuIE5vdywgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXMgdGllZCB0byBlaXRoZXIgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYENPTkZJR19IVUdFVExCX1BBR0VgLiBSaWdodCwgc28gaWYgbmVpdGhlciBvZiB0aG9zZSBhcmUgc2V0LCB3ZSYjMzk7cmUgZ3VhcmFudGVlZCBhIGJ1aWxkIGZhaWx1cmUgd2hlcmUgYEhQQUdFX1BNRF9TSElGVGAgaXMgdXNlZCwgc3BlY2lmaWNhbGx5IGR1ZSB0byB0aGUgYEJVSUxEX0JVRygpYC4gVGhpcyBgY2hlY2tfcG1kYCBmdW5jdGlvbiByZWxpZXMgb24gYEhQQUdFX1BNRF9OUmAsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhhdCBlcnJvci4KCkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGluY2x1ZGVzIGFuIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4uLiBBaCwgSSBzZWUuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpub3QqIHNldCwgYGNoZWNrX3BtZGAganVzdCByZXR1cm5zIGBmYWxzZWAuIFNvLCBpdCBhcHBlYXJzIHRoaXMgaXMgYSBidWlsZCBmaXgsIHJpZ2h0PwoKQnV0IHdoeSBpcyBgY2hlY2tfcG1kYCBldmVuIGNhbGxlZCBpbiB0aGUgbm9uLWBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgY2FzZT8gTGV0IG1lIHRyYWNlIHRoaXMuLi4gSXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gZWl0aGVyIGBwbWRfdHJhbnNfaHVnZShwbWRlKWAgb3IgYHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSlgIGlzIHRydWUuIEluIHRoZSBjb250ZXh0IG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG5vdCBiZWluZyBzZXQsIGBwbWRfdHJhbnNfaHVnZWAgd2lsbCAqYWx3YXlzKiBiZSBmYWxzZS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgd2hhdCBhYm91dCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWA/IEkgbmVlZCB0byBkaWcgaW50byB0aGF0IG9uZSBhIGxpdHRsZSBtb3JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfbWlncmF0aW9uX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xNzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTc1NC1cdFx0c2V0X3BtZF9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHBtZHAsIHBtZCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTc1NTpcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTc1Ni1cdFx0cG1kID0gcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCk7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTI1NDM9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU1MS1cdFx0c2V0X3BtZF9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHBtZHAsIHBtZCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjU1MjpcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjU1My1cdFx0cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AocG1kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01OTE9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTk4LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTk5OiAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAwLSAqIEBwbWQ6IFBNRCBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcbi0tXG5tbS9obW0uYz0zOTY9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL2htbS5jLTQxNC1cbm1tL2htbS5jOjQxNTpcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZCkpIHtcbm1tL2htbS5jLTQxNi1cdFx0aWYgKGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgMCkpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIyODA9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMzAwLVx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmM6MjMwMTpcdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjMwMi1cdFx0Z290byBvdXQ7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNDgwPXN0YXRpYyBwbWRfdCBtb3ZlX3NvZnRfZGlydHlfcG1kKHBtZF90IHBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0ODItXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ4MzpcdFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kKSkpXG5tbS9odWdlX21lbW9yeS5jLTI0ODQtXHRcdFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI3NDg9aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI3NzUtXHRcdHNwaW5fdW5sb2NrKHNyY19wdGwpO1xubW0vaHVnZV9tZW1vcnkuYzoyNzc2Olx0XHRpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShzcmNfcG1kdmFsKSkge1xubW0vaHVnZV9tZW1vcnkuYy0yNzc3LVx0XHRcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgXHUwMDI2c3JjX3BtZHZhbCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzA2MS1cdFx0XHRyZXR1cm47XG5tbS9odWdlX21lbW9yeS5jOjMwNjI6XHRcdGlmICh1bmxpa2VseShwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9sZF9wbWQpKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMDYzLVx0XHRcdGNvbnN0IHNvZnRsZWFmX3Qgb2xkX2VudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQob2xkX3BtZCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMDk2LVxubW0vaHVnZV9tZW1vcnkuYzozMDk3Olx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMzA5OC1cdFx0c29mdGxlYWZfdCBlbnRyeTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMyMjctXHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MzIyODpcdGlmIChmcmVlemUgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvbGRfcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYy0zMjI5LVx0XHRwdGVfdCBlbnRyeTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMzMDMtXG5tbS9odWdlX21lbW9yeS5jOjMzMDQ6XHRpZiAoIXBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpXG5tbS9odWdlX21lbW9yeS5jLTMzMDUtXHRcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgcGFnZSwgdm1hKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTA5MD1zdGF0aWMgaW5saW5lIGVudW0gc2Nhbl9yZXN1bHQgY2hlY2tfcG1kX3N0YXRlKHBtZF90ICpwbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTExMDEtXHQgKi9cbm1tL2todWdlcGFnZWQuYzoxMTAyOlx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkpXG5tbS9raHVnZXBhZ2VkLmMtMTEwMy1cdFx0cmV0dXJuIFNDQU5fUE1EX01BUFBFRDtcbi0tXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWFkdmlzZS5jLTM5Mi1cdFx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL21hZHZpc2UuYzozOTM6XHRcdFx0XHRcdCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XG5tbS9tYWR2aXNlLmMtMzk0LVx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4tLVxubW0vbWVtb3J5LmM9NjQxNz1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy02NDkzLVxubW0vbWVtb3J5LmM6NjQ5NDpcdFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jLTY0OTUtXHRcdFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCB2bWYucG1kKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz02NTI9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsaylcbi0tXG5tbS9tZW1wb2xpY3kuYy02NTYtXG5tbS9tZW1wb2xpY3kuYzo2NTc6XHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgqcG1kKSkpIHtcbm1tL21lbXBvbGljeS5jLTY1OC1cdFx0cXAtXHUwMDNlbnJfZmFpbGVkJiM0MzsmIzQzOztcbi0tXG5tbS9taWdyYXRlLmM9NTQ5PXZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuLS1cbm1tL21pZ3JhdGUuYy01NTMtXHRwdGwgPSBwbWRfbG9jayhtbSwgcG1kKTtcbm1tL21pZ3JhdGUuYzo1NTQ6XHRpZiAoIXBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpXG5tbS9taWdyYXRlLmMtNTU1LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjUyLVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjUzOlx0XHRpZiAocG1kX3RyYW5zX2h1Z2UocG1kZSkgfHwgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU0LVx0XHRcdHB2bXctXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXHUwMDNlcG1kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwmIzM5O3MgUGFnZSBUYWJsZSBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZyBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAgZnVuY3Rpb24gYWN0dWFsbHkgY29tZXMgZnJvbS4gT2theSwgYSBxdWljayBzY2FuIHN1Z2dlc3RzIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHBsYWNlIGZvciBsb3ctbGV2ZWwgcGFnZSB0YWJsZSBvcGVyYXRpb25zIHRvIHJlc2lkZS4gTm93LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGF0IGhlYWRlciBmaWxlIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYHBtZF9pc19taWdyYXRpb25fZW50cnlgLiBOZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGNyaXRlcmlhIHRoaXMgZnVuY3Rpb24gdXNlcyB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBwYWdlIHRhYmxlIGVudHJ5IGlzIGEgbWlncmF0aW9uIGVudHJ5LiBQcm9iYWJseSBjaGVja2luZyBmbGFncyBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgYml0IHBhdHRlcm5zIHdpdGhpbiB0aGUgYHBtZF90YCBzdHJ1Y3R1cmUuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHBhZ2UgbWlncmF0aW9ucy4gVGltZSB0byBkaWcgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTkxPXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYwNDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtaWdyYXRpb24gZW50cmllcyBhdCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5IChQTUQpIGxldmVsLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBvdXQgdGhlIHNvdXJjZSBjb2RlIGZvciBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAuIExldCYjMzk7cyBzZWUuLi4gdGhlIGRlZmluaXRpb24gaXMgbW9zdCBsaWtlbHkgd2l0aGluIHRoZSBpbmNsdWRlIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBnZW5lcmFsIHBhZ2Ugb3BlcmF0aW9ucy4gUmlnaHQsIGdvb2QgYmV0LCBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0ICogQHBtZDogUE1EIGVudHJ5LlxuIDYwMTpcdCAqXG4gNjAyOlx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgUE1EIGVuY29kZXMgYSBtaWdyYXRpb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cbiA2MDM6XHQgKi9cbiA2MDQ6XHRzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRfdCBwbWQpXG4gNjA1Olx0e1xuIDYwNjpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbiA2MDc6XHR9XG4gNjA4Olx0XG4gNjA5Olx0LyoqXG4gNjEwOlx0ICogc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KCkgLSBJcyB0aGUgc3BlY2lmaWVkIHNvZnRsZWFmIGVudHJ5IG9idGFpbmVkIGZyb21cbiA2MTE6XHQgKiBhIFBNRCBvbmUgdGhhdCB3ZSBzdXBwb3J0IGF0IFBNRCBsZXZlbD9cbiA2MTI6XHQgKiBAZW50cnk6IEVudHJ5IHRvIGNoZWNrLlxuIDYxMzpcdCAqIFJldHVybnM6IHRydWUgaWYgdGhlIHNvZnRsZWFmIGVudHJ5IGlzIHZhbGlkIGF0IFBNRCwgb3RoZXJ3aXNlIGZhbHNlLlxuIDYxNDpcdCAqL1xuIDYxNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcbiA2MTY6XHR7XG4gNjE3Olx0XHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xuIDYxODpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuIDYxOTpcdFx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzNgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc29mdGxlYWZfZnJvbV9wbWRgIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBzb2Z0bGVhZl9mcm9tX3BtZGAgYmVpbmcgdXRpbGl6ZWQgaGVyZS4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBNeSBicmFpbiBpbW1lZGlhdGVseSBmbGFncyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgVEhQIGVuYWJsZW1lbnQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGlzLCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqbm90KiBlbmFibGVkLCBpcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCB0byBldmFsdWF0ZSB0byB0cnVlPyBJJiMzOTttIGRvdWJ0ZnVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTXkgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8gY2hlY2sgd2hhdCBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgcmV0dXJucyB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIHJlbGF0aW9uc2hpcCBvZiB0aGlzIHBhcnRpY3VsYXIgbGluZSBvZiBjb2RlIHRvIHRoZSBicm9hZGVyIFRIUCBjb250ZXh0LiBHb3R0YSBuYWlsIGRvd24gdGhlc2UgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIE9wdGltaXphdGlvbioqCgpIbW0sIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gdGhpcyBjb2RlLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBzbmlwcGV0LCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMuLi4gY291bGQgdGhpcyBiZSBhbiBpbmxpbmUgZnVuY3Rpb24gY2FuZGlkYXRlPyBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIHRvIG1pbmQgd2hlbiBJIHNlZSBhIHNob3J0LCBvZnRlbi11c2VkIHBpZWNlIG9mIGxvZ2ljIGxpa2UgdGhpcy4gSSYjMzk7bSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGJlbmVmaXRzOiByZWR1Y2VkIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGltcHJvdmVkIGluc3RydWN0aW9uIGNhY2hlIGxvY2FsaXR5LCBwb3RlbnRpYWxseSBhbGxvd2luZyBmb3IgZnVydGhlciBjb21waWxlciBvcHRpbWl6YXRpb24gZHVlIHRvIHRoZSBjb250ZXh0IG5vdyBiZWluZyBleHBhbmRlZC4gSSYjMzk7bSBxdWlja2x5IHdlaWdoaW5nIHRoaXMgYWdhaW5zdCB0aGUgdXN1YWwgZHJhd2JhY2tzIG9mIGlubGluaW5nLCBvZiBjb3Vyc2UgLSBpbmNyZWFzZWQgY29kZSBzaXplIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzIGlmIHVzZWQgdG9vIGxpYmVyYWxseSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgY29kZSBibG9hdCBvdmVyYWxsIGlmIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHRvbyBtYW55IHBsYWNlcy4gQnV0LCBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIHN5c3RlbSYjMzk7cyBsaWtlbHkgdXNhZ2UgcGF0dGVybnMgYW5kIHRoZSBwZXJmb3JtYW5jZSBwcm9maWxlIEkmIzM5O20gYWltaW5nIGZvciwgaW5saW5pbmcgaGVyZSAqbWlnaHQqIHlpZWxkIGEgd29ydGh3aGlsZSBnYWluLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIGV4YW1pbmUgdGhlIGNvZGUmIzM5O3MgY2FsbCBzaXRlcyBhbmQgc2l6ZSwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgdGhlIGZpcnN0IGF2ZW51ZSBJJiMzOTttIGV4cGxvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTEwOTY9c3RhdGljIHZvaWQgc21hcHNfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTExMC1cdFx0cHJlc2VudCA9IHRydWU7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTExMTpcdH0gZWxzZSBpZiAodW5saWtlbHkodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkpIHtcbmZzL3Byb2MvdGFza19tbXUuYy0xMTEyLVx0XHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTIwODg9c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjExNC1cdFx0XHRmcmFtZSA9IHBtZF9wZm4ocG1kKSAmIzQzOyBpZHg7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjExNTpcdH0gZWxzZSBpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkge1xuZnMvcHJvYy90YXNrX21tdS5jLTIxMTYtXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWQpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU1Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZ2V0X3BlcnNpc3RlbnRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTY3LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTY4OnN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTY5LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03NTE9c3RhdGljIGlubGluZSB2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzU1LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzU2OnN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzU3LXtcbi0tXG5tbS9obW0uYz0zOTY9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL2htbS5jLTQxNC1cbm1tL2htbS5jOjQxNTpcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZCkpIHtcbm1tL2htbS5jLTQxNi1cdFx0aWYgKGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgMCkpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4NjQ9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTA4LVxubW0vaHVnZV9tZW1vcnkuYzoxOTA5Olx0aWYgKHVubGlrZWx5KHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTE5MTAtXHRcdCAgICAgcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZCkpKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMjgwPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjI5OS1cdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQob3JpZ19wbWQpKSkge1xubW0vaHVnZV9tZW1vcnkuYzoyMzAwOlx0XHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtMjMwMS1cdFx0XHRcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIzODQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqbm9ybWFsX29yX3NvZnRsZWFmX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzODktXG5tbS9odWdlX21lbW9yeS5jOjIzOTA6XHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkpXG5tbS9odWdlX21lbW9yeS5jLTIzOTEtXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtOb24gcHJlc2VudCBodWdlIHBtZCB3aXRob3V0IHBtZCBtaWdyYXRpb24gZW5hYmxlZCFcJiMzNDspO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMD1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjYxMy1cbm1tL2h1Z2VfbWVtb3J5LmM6MjYxNDpcdGlmIChwcm90X251bWEgXHUwMDI2XHUwMDI2ICF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpKVxubW0vaHVnZV9tZW1vcnkuYy0yNjE1LVx0XHRyZXR1cm4gMTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2MjAtXG5tbS9odWdlX21lbW9yeS5jOjI2MjE6XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjYgcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKCpwbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTI2MjItXHRcdGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChtbSwgYWRkciwgcG1kLCB1ZmZkX3dwLFxuLS1cbm1tL21hZHZpc2UuYz0zNTQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbi0tXG5tbS9tYWR2aXNlLmMtMzkxLVx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbm1tL21hZHZpc2UuYzozOTI6XHRcdFx0Vk1fQlVHX09OKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9tYWR2aXNlLmMtMzkzLVx0XHRcdFx0XHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xuLS1cbm1tL21pZ3JhdGUuYz0xODAwPXN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuLS1cbm1tL21pZ3JhdGUuYy0xODc4LVx0XHRcdCAqL1xubW0vbWlncmF0ZS5jOjE4Nzk6XHRcdFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFx1MDAyNlx1MDAyNiBpc190aHApIHtcbm1tL21pZ3JhdGUuYy0xODgwLVx0XHRcdFx0bnJfZmFpbGVkJiM0MzsmIzQzOztcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy00Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NDg6XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNDktXHRcdChtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE5MS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTkyOlx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2XG5tbS9taWdyYXRlX2RldmljZS5jLTE5My1cdFx0KG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz05NjU9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfaW5zZXJ0X3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTk4LVxubW0vbWlncmF0ZV9kZXZpY2UuYzo5OTk6XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjYgKCpkc3QgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDAwLVx0XHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UobWlncmF0ZSwgYWRkciwgcGFnZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEwOTg9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTExNjctXHRcdCAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTY4Olx0XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTY5LVx0XHRcdGlmICgoc3JjX3BmbnNbaV0gXHUwMDI2IE1JR1JBVEVfUEZOX01JR1JBVEUpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nz1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTgtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNTk6XHRcdFx0XHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2MC1cdFx0XHRcdCAgICAhKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSlcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjQ2LVx0XHRpZiAoZG9fZGVtb3RlX3Bhc3MgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYzoxMjQ3Olx0XHQgICAgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHwgIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSkge1xubW0vdm1zY2FuLmMtMTI0OC1cdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmRlbW90ZV9mb2xpb3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI2OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFRIUCBNaWdyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIG1pZ3JhdGlvbiBpcyBzdXBwb3J0ZWQuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBhbmQgbGlrZWx5LCB0aGUgc3VwcG9ydCBjaGVja3MgZm9yIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgZm91bmRhdGlvbmFsIGluZm9ybWF0aW9uIHRvIHByb2NlZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuIDU2NjpcdH1cbiA1Njc6XHRcbiA1Njg6XHRzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZClcbiA1Njk6XHR7XG4gNTcwOlx0XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTik7XG4gNTcxOlx0fVxuIDU3MjpcdFxuIDU3MzpcdHZvaWQgc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gNTc0Olx0XHRcdFx0ICAgcG1kX3QgKnBtZCwgYm9vbCBmcmVlemUpO1xuIDU3NTpcdGJvb2wgdW5tYXBfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gNTc2Olx0XHRcdFx0ICAgcG1kX3QgKnBtZHAsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIDU3NzpcdHZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcbiA1Nzg6XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgaGFkZHIpO1xuIDU3OTpcdFxuIDU4MDpcdCNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIDU4MTpcdFxuIDU4MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDU4MzpcdHtcbiA1ODQ6XHRcdHJldHVybiBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBEZWZpbml0aW9uIG9mIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSXQganVzdCBzdHJ1Y2sgbWUgdGhhdCB0aGUgdmFyaWFibGUgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkYCBhcHBlYXJzIHRvIGJlIGRlZmluZWQgKndpdGhpbiogYSBjb25kaXRpb25hbCBibG9jaywgc3BlY2lmaWNhbGx5IHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2suIFRoYXQmIzM5O3MgdW51c3VhbCwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byB2ZXJpZnkgd2hlcmUgdGhpcyBkZWZpbml0aW9uICphY3R1YWxseSogaGFwcGVucywgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCBiZWhhdmlvci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaXRzIHBsYWNlbWVudCBvbiBsaW5lIDU4MCDigJMgeWVwLCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBgI2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovYCBzZWN0aW9uIGJlZ2lucy4gTm93LCB0aGUgY3JpdGljYWwgcGllY2Ug4oCTIEkgbmVlZCB0byBsb29rIGRpcmVjdGx5IGF0IGhvdyBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWRgIGlzIGRlZmluZWQgKmluc2lkZSogdGhhdCBgI2Vsc2VgIGJsb2NrLiBVbmRlcnN0YW5kaW5nIHRoYXQgYWx0ZXJuYXRpdmUgZGVmaW5pdGlvbiBpcyBjcnVjaWFsIGZvciB0aGUgb3ZlcmFsbCBmbG93IGhlcmUuIFRoaXMgY291bGQgcmV2ZWFsIGFuIGltcG9ydGFudCBkZXBlbmRlbmN5IHJlbGF0ZWQgdG8gVEhQIGNvbmZpZ3VyYXRpb24gb3IgYSBzdWJ0bGUgZGlmZmVyZW5jZSBpbiBsb2dpYy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc1MDpcdFxuIDc1MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIDc1MjpcdHtcbiA3NTM6XHRcdHJldHVybjtcbiA3NTQ6XHR9XG4gNzU1Olx0XG4gNzU2Olx0c3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXG4gNzU3Olx0e1xuIDc1ODpcdFx0cmV0dXJuIGZhbHNlO1xuIDc1OTpcdH1cbiA3NjA6XHRcbiA3NjE6XHRzdGF0aWMgaW5saW5lIGludCBoaWdoZXN0X29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXJzKVxuIDc2MjpcdHtcbiA3NjM6XHRcdHJldHVybiAwO1xuIDc2NDpcdH1cbiA3NjU6XHRcbiA3NjY6XHRzdGF0aWMgaW5saW5lIGludCBuZXh0X29yZGVyKHVuc2lnbmVkIGxvbmcgKm9yZGVycywgaW50IHByZXYpXG4gNzY3Olx0e1xuIDc2ODpcdFx0cmV0dXJuIDA7XG4gNzY5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBUSFAgYW5kIFBhZ2UgVGFibGUgV2Fsa2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgaXMgZ29pbmcgdG8gcmV0dXJuIGBmYWxzZWAsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byByZXZpc2l0IHRoZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9uIGFnYWluLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gYW5hbHl6ZSBob3cgdGhlIGxhY2sgb2YgVEhQIHN1cHBvcnQgaW1wYWN0cyB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIHN1c3BlY3RpbmcgaXQgaW1wYWN0cyB0aGUgcGFnZSB0YWJsZSB3YWxraW5nIGxvZ2ljLCBsaWtlbHkgc2ltcGxpZnlpbmcgaXQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWJzZW5jZSBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Vfdm1hX21hcHBlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdFx0ICovXG4gMjUxOlx0XHRcdHBtZGUgPSBwbWRwX2dldF9sb2NrbGVzcyhwdm13LVx1MDAzZXBtZCk7XG4gMjUyOlx0XG4gMjUzOlx0XHRcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XG4gMjU0Olx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuIDI1NTpcdFx0XHRcdHBtZGUgPSAqcHZtdy1cdTAwM2VwbWQ7XG4gMjU2Olx0XHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuIDI1NzpcdFx0XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiAyNTg6XHRcbiAyNTk6XHRcdFx0XHRcdGlmICghdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSB8fFxuIDI2MDpcdFx0XHRcdFx0ICAgICEocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pKVxuIDI2MTpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI2MjpcdFx0XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiAyNjM6XHRcbiAyNjQ6XHRcdFx0XHRcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSB8fFxuIDI2NTpcdFx0XHRcdFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4gMjY2Olx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjY3Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNjg6XHRcdFx0XHR9XG4gMjY5Olx0XHRcdFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcbiAyNzA6XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiAyNzE6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNzI6XHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxuIDI3MzpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI3NDpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjc1Olx0XHRcdFx0fVxuIDI3NjpcdFx0XHRcdC8qIFRIUCBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4gMjc3Olx0XHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuIDI3ODpcdFx0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbiAyNzk6XHRcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBMb2dpYyBhbmQgQnVpbGQgRml4KioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbiYjMzk7dCBlbmFibGVkLCB0aGUgaW1wbGljYXRpb25zIGFyZSBxdWl0ZSBjbGVhci4gRmlyc3QsIGBwbWRfdHJhbnNfaHVnZShwbWRlKWAgaXMgZ29pbmcgdG8gYmUgZmFsc2UuIFRoZW4sIEkgbmVlZCB0byBjb25zaWRlciBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKWAuIEkgaGF2ZSB0byBwYXVzZSBoZXJlLiBJZiBUSFAgbWlncmF0aW9uIGlzbiYjMzk7dCBzdXBwb3J0ZWQsIGNhbiB3ZSBldmVuIGhhdmUgYSBtaWdyYXRpb24gZW50cnk/IEFoLCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIGFuZCB3ZSBkbyBoYXZlIGEgbWlncmF0aW9uIGVudHJ5LCBpdCBnb2VzIGludG8gdGhlIHJlbGV2YW50IGBpZmAgYmxvY2suIFNpbmNlIG1pZ3JhdGlvbiBlbnRyaWVzIGFyZW4mIzM5O3QgY29uc2lkZXJlZCBwcmVzZW50LCBgIXBtZF9wcmVzZW50KHBtZGUpYCBpcyB0cnVlLCBhbmQgaWYgd2UgYWxzbyBkb24mIzM5O3Qgc3VwcG9ydCB0aGUgVEhQIG1pZ3JhdGlvbiwgd2UgcmV0dXJuIGBub3RfZm91bmQocHZtdylgLiBJdCYjMzk7cyBjbGVhciB0aGF0IGluIHRoaXMgcGF0aCwgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIGlzICpuZXZlciogY2FsbGVkLCBpZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQuCgpOb3csIHdoYXQgaWYgYHBtZF9wcmVzZW50KHBtZGUpYCBpcyB0cnVlPyBXZSBoaXQgdGhlIG5leHQgYGlmYCBibG9jaywgZXhwZWN0aW5nIGBwbWRfdHJhbnNfaHVnZShwbWRlKWAgdG8gYmUgdHJ1ZSwgYnV0IGl0JiMzOTtzICpmYWxzZSogYmVjYXVzZSB3ZSBkaXNhYmxlZCBUSFAuIFNvLCB3ZSBlbmQgdXAgaW4gdGhlIHNlY3Rpb24gdGhhdCBoYW5kbGVzIGEgVEhQIFBNRCB0aGF0JiMzOTtzIGJlZW4gc3BsaXQsIHVubG9jaywgYW5kIGNvbnRpbnVlcy4gV2hpY2ggbWVhbnMsICphZ2FpbiosIGBjaGVja19wbWRgIGlzICpuZXZlciogY2FsbGVkLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoLCB3aXRoIGl0cyBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIHRoZSBkdW1teSBgY2hlY2tfcG1kYCByZXR1cm5pbmcgYGZhbHNlYCBpcywgYXMgSSBzdXNwZWN0ZWQsIGEgcHVyZSBidWlsZCBmaXghIEJ1dC4uLiB3aHkgZGlkIGl0IG5lZWQgdG8gYmUgZml4ZWQgaW4gdGhlIGZpcnN0IHBsYWNlPyBBaCwgaXQmIzM5O3MgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIGl0c2VsZiwgc3BlY2lmaWNhbGx5IHRoZSB1c2Ugb2YgYEhQQUdFX1BNRF9OUmAuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkIGFuZCwgaW1wb3J0YW50bHksIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyBhbHNvIGRpc2FibGVkLCBgSFBBR0VfUE1EX05SYCBjYXVzZXMgYSBidWlsZCBlcnJvciBiZWNhdXNlIGBIUEFHRV9QTURfU0hJRlRgIGJlY29tZXMgYSBgKHsgQlVJTERfQlVHKCk7IDA7IH0pYCwgc2luY2UgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIGFyZSBtaXNzaW5nLgoKQWgsIHllcywgYEhQQUdFX1BNRF9OUmAgaXMgZGVmaW5lZCBhcyBgKDEgJmx0OyZsdDsgKEhQQUdFX1BNRF9TSElGVCAtIFBBR0VfU0hJRlQpKWAuIElmIGBIUEFHRV9QTURfU0hJRlRgIGlzIGAoeyBCVUlMRF9CVUcoKTsgMDsgfSlgLCB0aGVuLCBwcmVjaXNlbHksIGBIUEFHRV9QTURfTlJgIHRyaWdnZXJzIHRoYXQgYEJVSUxEX0JVRygpYC4gU28sIHRoaXMgcGF0Y2ggaXMgc29sZWx5IGZpeGluZyBhIGJ1aWxkIGVycm9yIHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQsIGJ1dCB0aGF0JiMzOTtzIGEgc21hbGwgcGFydCBvZiB0aGUgc3RvcnkuCgpXYWl0LCBpZiBgQ09ORklHX0hVR0VUTEJfUEFHRWAgKmlzKiBzZXQsIGJ1dCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3Q/IFRoZW4gYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXMgc2V0LCBhbmQgYEhQQUdFX1BNRF9TSElGVGAgZ2V0cyBhc3NpZ25lZCB0aGUgY29ycmVjdCB2YWx1ZSB3aGljaCBpcyBgUE1EX1NISUZUYC4gSW4gdGhpcyBjYXNlLCBgY2hlY2tfcG1kYCB3b3VsZCBjb21waWxlIHdpdGhvdXQgZXJyb3IuIEJ1dCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgIHVuY29uZGl0aW9uYWxseS4gTm93LCBJIGhhdmUgdG8gZ28gY2hlY2sgd2hldGhlciBgY2hlY2tfcG1kYCBjb3VsZCBiZSBjYWxsZWQgZm9yIGh1Z2V0bGIgcGFnZXMuIElzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZXZlciB1c2VkIHdpdGggaHVnZXRsYiBwYWdlcz8gSSBuZWVkIHRvIGdvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3ZtYV9tYXBwZWRfd2FsayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTUyMj1zdHJ1Y3QgbHJ1dmVjO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjQtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2My1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xuaW5jbHVkZS9saW51eC9ybWFwLmgtODY1LVx0dW5zaWduZWQgbG9uZyBwZm47XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc2LSNkZWZpbmUgREVGSU5FX0ZPTElPX1ZNQV9XQUxLKG5hbWUsIF9mb2xpbywgX3ZtYSwgX2FkZHJlc3MsIF9mbGFncylcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4Nzc6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzgtXHRcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg1LVxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg4Ny17XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODk2OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQgLSBSZXN0YXJ0IHRoZSBwYWdlIHRhYmxlIHdhbGsuXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTc6ICogQHB2bXc6IFBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLlxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9OTA0PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTA2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5MTk6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpO1xuaW5jbHVkZS9saW51eC9ybWFwLmgtOTIwLXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMxNz1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZ3VhcmRfc3dwX2VudHJ5KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzIyOnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNTpleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI3LVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyOS1cdFx0c3RydWN0IHBhZ2UgKm5ldyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDEtI2Vsc2UgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDI6c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cdFx0c3RydWN0IHBhZ2UgKm5ldylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTY0Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTY1LVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xOTQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMS1cdCphY2Nlc3NlZCA9IGZhbHNlO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI2LVx0XHRpZiAoKmFjY2Vzc2VkKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjI3Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Mj1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODY1LSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxubW0vaHVnZV9tZW1vcnkuYzo0ODY2OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkzOS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk0MDp2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XG4tLVxubW0vaW50ZXJuYWwuaD0xMjM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTEyNTctICovXG5tbS9pbnRlcm5hbC5oOjEyNTg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xuLS1cbm1tL2tzbS5jPTEyNzU9c3RhdGljIGludCB3cml0ZV9wcm90ZWN0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0va3NtLmMtMTI5Ni1cbm1tL2tzbS5jOjEyOTc6XHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKVxubW0va3NtLmMtMTI5OC1cdFx0Z290byBvdXRfbW47XG4tLVxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxubW0va3NtLmM6MTM1OTpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9rc20uYy0xMzYwLW91dF9tbjpcbi0tXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vbWlncmF0ZS5jLTI5Ny1cbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vbWlncmF0ZS5jLTI5OS1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXG4tLVxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zNTEtXG5tbS9taWdyYXRlLmM6MzUyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9taWdyYXRlLmMtMzUzLVx0XHRybWFwX3Qgcm1hcF9mbGFncyA9IFJNQVBfTk9ORTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cdFx0XHQucHRsID0gcHRsLFxuLS1cbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lkbGUuYy01OC1cbm1tL3BhZ2VfaWRsZS5jOjU5Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9wYWdlX2lkbGUuYy02MC1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTA6c3RhdGljIGlubGluZSBib29sIG5vdF9mb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMS17XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUocHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMy1cdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3LVx0XHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODctICogbWFwcGVkIGF0IHRoZSBAcHZtdy1cdTAwM2VwdGVcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjg4OiAqIEBwdm13OiBwYWdlX3ZtYV9tYXBwZWRfd2FsayBzdHJ1Y3QsIGluY2x1ZGVzIGEgcGFpciBwdGUgYW5kIHBmbiByYW5nZVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODktICogZm9yIGNoZWNraW5nXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTEtICpcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjkyOiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgZm91bmQgYSBwbGFjZSB3aGVyZSBwZm4gcmFuZ2UgaXMgKnBvdGVudGlhbGx5KlxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDYtICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDgte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQxOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQyLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDktI2Vsc2Vcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1MDpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTU1LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU2OnN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1Ny17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTYzLS8qKlxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY0OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrIC0gY2hlY2sgaWYgQHB2bXctXHUwMDNlcGZuIGlzIG1hcHBlZCBpbiBAcHZtdy1cdTAwM2V2bWEgYXRcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2NS0gKiBAcHZtdy1cdTAwM2VhZGRyZXNzXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjY6ICogQHB2bXc6IHBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLiBwYWdlLCB2bWEsIGFkZHJlc3MgYW5kIGZsYWdzXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjctICogbXVzdCBiZSBzZXQuIHBtZCwgcHRlIGFuZCBwdGwgbXVzdCBiZSBOVUxMLlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3My0gKiBJZiBAcHZtdy1cdTAwM2VwbWQgaXMgc2V0IGJ1dCBAcHZtdy1cdTAwM2VwdGUgaXMgbm90LCB5b3UgaGF2ZSBmb3VuZCBQTUQtbWFwcGVkIHBhZ2Vcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3NDogKiAodXN1YWxseSBUSFApLiBGb3IgUFRFLW1hcHBlZCBUSFAsIHlvdSBzaG91bGQgcnVuIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgaW5cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3NS0gKiBhIGxvb3AgdG8gZmluZCBhbGwgUFRFcyB0aGF0IG1hcCB0aGUgVEhQLlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4My0gKlxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTg0OiAqIElmIHlvdSBuZWVkIHRvIHN0b3AgdGhlIHdhbGsgYmVmb3JlIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgcmV0dXJuZWQgZmFsc2UsXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxODU6ICogdXNlIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoKS4gSXQgd2lsbCBkbyB0aGUgaG91c2VrZWVwaW5nLlxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTg2LSAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTg3OmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTg4LXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0zNTM9dW5zaWduZWQgbG9uZyBwYWdlX21hcHBlZF9pbl92bWEoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzU2LVx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNTc6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM1OC1cdFx0LnBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpLFxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM2Ni1cdFx0Z290byBvdXQ7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNjc6XHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzY4LVx0XHRyZXR1cm4gLUVGQVVMVDtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM2OTpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzAtb3V0OlxuLS1cbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTI0LVxubW0vcm1hcC5jOjkyNTpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vcm1hcC5jLTkyNi1cdFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9ybWFwLmMtOTQ4LVx0XHRcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcbm1tL3JtYXAuYzo5NDk6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy05NTAtXHRcdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDtcbi0tXG5tbS9ybWFwLmMtOTYzLVx0XHRcdHByYS1cdTAwM2VyZWZlcmVuY2VkID0gLTE7XG5tbS9ybWFwLmM6OTY0Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtOTY1LVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9ybWFwLmMtMTAwMi1cdFx0aWYgKHB0ZXMgPT0gcHZtdy5ucl9wYWdlcykge1xubW0vcm1hcC5jOjEwMDM6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0xMDA0LVx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYz0xMDY0PWludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4tLVxubW0vcm1hcC5jLTExMDItXG5tbS9ybWFwLmM6MTEwMzpzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3JtYXAuYy0xMTA0LXtcbi0tXG5tbS9ybWFwLmMtMTExNy1cbm1tL3JtYXAuYzoxMTE4Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKHB2bXcpKSB7XG5tbS9ybWFwLmMtMTExOS1cdFx0aW50IHJldCA9IDA7XG4tLVxubW0vcm1hcC5jPTEyMzE9c3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTEyMzQtXHRzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqKWFyZztcbm1tL3JtYXAuYzoxMjM1Olx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9ybWFwLmMtMTIzNi1cdFx0LnBmblx0XHQ9IHN0YXRlLVx1MDAzZXBmbixcbi0tXG5tbS9ybWFwLmM9MTMxMD1pbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXG4tLVxubW0vcm1hcC5jLTEzMTIte1xubW0vcm1hcC5jOjEzMTM6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL3JtYXAuYy0xMzE0LVx0XHQucGZuXHRcdD0gcGZuLFxuLS1cbm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vcm1hcC5jOjE5NDU6XHRcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vcm1hcC5jLTE5NDYtXHRcdFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MsIHB0ZV90IHB0ZSlcbi0tXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yMDMxLVxubW0vcm1hcC5jOjIwMzI6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3JtYXAuYy0yMDMzLVx0XHRucl9wYWdlcyA9IDE7XG4tLVxubW0vcm1hcC5jLTIwODktXHRcdFx0XHRmbGFncyBcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XG5tbS9ybWFwLmM6MjA5MDpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjA5MS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3JtYXAuYy0yMzYzLXdhbGtfZG9uZTpcbm1tL3JtYXAuYzoyMzY0Olx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTIzNjUtXHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjQ2MC1cbm1tL3JtYXAuYzoyNDYxOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9ybWFwLmMtMjQ2Mi1cdFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXG4tLVxubW0vcm1hcC5jLTI0NzYtXHRcdFx0XHRmbGFncyBcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XG5tbS9ybWFwLmM6MjQ3NzpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjQ3OC1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL3JtYXAuYy0yNDkzLVx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjQ5NDpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjQ5NS1cdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNTQ5LVx0XHRcdFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpIHtcbm1tL3JtYXAuYzoyNTUwOlx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI1NTEtXHRcdFx0XHRcdHJldCA9IGZhbHNlO1xuLS1cbm1tL3JtYXAuYy0yNTYzLVx0XHRcdFx0XHQgKi9cbm1tL3JtYXAuYzoyNTY0Olx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI1NjUtXHRcdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNjUwLVx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjY1MTpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjY1Mi1cdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNjYxLVx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNjYyOlx0XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI2NjMtXHRcdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3JtYXAuYy0yNjY4LVx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjY2OTpcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjY3MC1cdFx0XHRcdGJyZWFrO1xuLS1cbm1tL3Ztc2Nhbi5jPTQxMzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00MTgwLSAqL1xubW0vdm1zY2FuLmM6NDE4MTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG5tbS92bXNjYW4uYy00MTgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwNjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEaXZpbmcgaW50byBIdWdlVExCIFBhZ2UgTWFwcGluZyoqCgpIb2xkIG9uIGEgbWludXRlLi4uIGlzbiYjMzk7dCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHRyYXZlcnNlIHRoZSBtYXBwaW5ncyBvZiBIdWdlVExCIHBhZ2VzPyBJIGNvdWxkIHN3ZWFyIEkmIzM5O3ZlIHNlZW4gdGhhdCBpbiByZWxhdGlvbiB0byB0aGVtLiBBbHJpZ2h0LCBiZXR0ZXIgY29uZmlybSB0aGF0IGh1bmNoLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSDigJMgc3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgcHVsbCB1cCBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZS4gVGhpcyBzaG91bGQgcmV2ZWFsIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBsYXJnZSBtZW1vcnkgcmVnaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTg3Olx0Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4gMTg4Olx0e1xuIDE4OTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBwdm13LVx1MDAzZXZtYTtcbiAxOTA6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuIDE5MTpcdFx0dW5zaWduZWQgbG9uZyBlbmQ7XG4gMTkyOlx0XHRzcGlubG9ja190ICpwdGw7XG4gMTkzOlx0XHRwdGVfdCBwdGV2YWw7XG4gMTk0Olx0XHRwZ2RfdCAqcGdkO1xuIDE5NTpcdFx0cDRkX3QgKnA0ZDtcbiAxOTY6XHRcdHB1ZF90ICpwdWQ7XG4gMTk3Olx0XHRwbWRfdCBwbWRlO1xuIDE5ODpcdFxuIDE5OTpcdFx0LyogVGhlIG9ubHkgcG9zc2libGUgcG1kIG1hcHBpbmcgaGFzIGJlZW4gaGFuZGxlZCBvbiBsYXN0IGl0ZXJhdGlvbiAqL1xuIDIwMDpcdFx0aWYgKHB2bXctXHUwMDNlcG1kIFx1MDAyNlx1MDAyNiAhcHZtdy1cdTAwM2VwdGUpXG4gMjAxOlx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjAyOlx0XG4gMjAzOlx0XHRpZiAodW5saWtlbHkoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpKSB7XG4gMjA0Olx0XHRcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZSA9IGhzdGF0ZV92bWEodm1hKTtcbiAyMDU6XHRcdFx0dW5zaWduZWQgbG9uZyBzaXplID0gaHVnZV9wYWdlX3NpemUoaHN0YXRlKTtcbiAyMDY6XHRcdFx0LyogVGhlIG9ubHkgcG9zc2libGUgbWFwcGluZyB3YXMgaGFuZGxlZCBvbiBsYXN0IGl0ZXJhdGlvbiAqL1xuIDIwNzpcdFx0XHRpZiAocHZtdy1cdTAwM2VwdGUpXG4gMjA4Olx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyMDk6XHRcdFx0LypcbiAyMTA6XHRcdFx0ICogQWxsIGNhbGxlcnMgdGhhdCBnZXQgaGVyZSB3aWxsIGFscmVhZHkgaG9sZCB0aGVcbiAyMTE6XHRcdFx0ICogaV9tbWFwX3J3c2VtLiAgVGhlcmVmb3JlLCBubyBhZGRpdGlvbmFsIGxvY2tzIG5lZWQgdG8gYmVcbiAyMTI6XHRcdFx0ICogdGFrZW4gYmVmb3JlIGNhbGxpbmcgaHVnZXRsYl93YWxrKCkuXG4gMjEzOlx0XHRcdCAqL1xuIDIxNDpcdFx0XHRwdm13LVx1MDAzZXB0ZSA9IGh1Z2V0bGJfd2Fsayh2bWEsIHB2bXctXHUwMDNlYWRkcmVzcywgc2l6ZSk7XG4gMjE1Olx0XHRcdGlmICghcHZtdy1cdTAwM2VwdGUpXG4gMjE2Olx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDIxNzpcdFxuIDIxODpcdFx0XHRwdm13LVx1MDAzZXB0bCA9IGh1Z2VfcHRlX2xvY2soaHN0YXRlLCBtbSwgcHZtdy1cdTAwM2VwdGUpO1xuIDIxOTpcdFx0XHRpZiAoIWNoZWNrX3B0ZShwdm13LCBwYWdlc19wZXJfaHVnZV9wYWdlKGhzdGF0ZSkpKVxuIDIyMDpcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjIxOlx0XHRcdHJldHVybiB0cnVlO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdFx0ZW5kID0gdm1hX2FkZHJlc3NfZW5kKHB2bXcpO1xuIDIyNTpcdFx0aWYgKHB2bXctXHUwMDNlcHRlKVxuIDIyNjpcdFx0XHRnb3RvIG5leHRfcHRlO1xuIDIyNzpcdHJlc3RhcnQ6XG4gMjI4Olx0XHRkbyB7XG4gMjI5Olx0XHRcdHBnZCA9IHBnZF9vZmZzZXQobW0sIHB2bXctXHUwMDNlYWRkcmVzcyk7XG4gMjMwOlx0XHRcdGlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHtcbiAyMzE6XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUEdESVJfU0laRSk7XG4gMjMyOlx0XHRcdFx0Y29udGludWU7XG4gMjMzOlx0XHRcdH1cbiAyMzQ6XHRcdFx0cDRkID0gcDRkX29mZnNldChwZ2QsIHB2bXctXHUwMDNlYWRkcmVzcyk7XG4gMjM1Olx0XHRcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpIHtcbiAyMzY6XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUDREX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3Q6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIHJpZ2h0LCBmb3IgaHVnZXRsYiBwYWdlcywgaXQmIzM5O3MgYGh1Z2V0bGJfd2Fsa2AgYW5kIGBjaGVja19wdGVgLCBub3QgYGNoZWNrX3BtZGAgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiYjMzQ7IFRoYXQmIzM5O3MgY3J1Y2lhbDsgYGNoZWNrX3BtZGAgaXMgKnNwZWNpZmljYWxseSogZm9yIFRIUCDigJMgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcy4gU28sIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbiYjMzk7dCBzZXQsIGBjaGVja19wbWRgIGlzIG5ldmVyIGV2ZW4gKmNhbGxlZCouIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBhZGRpbmcgYW4gYCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGJsb2NrIGFuZCBhIGR1bW15IGBjaGVja19wbWRgIHRoYXQgcmV0dXJucyBgZmFsc2VgLiBNeSBndXQgZmVlbGluZyBpcyB0aGlzIGlzIGp1c3QgYSBidWlsZCBmaXgsIHRvIGF2b2lkIGEgYEJVSUxEX0JVRygpYCBjYXVzZWQgYnkgYEhQQUdFX1BNRF9OUmAgd2hlbiBUSFAgaXMgb2ZmLgoKQnV0IHdhaXQgYSBtaW51dGUsIGxldCBtZSBwbGF5IGRldmlsJiMzOTtzIGFkdm9jYXRlLiBXaGF0IGlmIGBDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNgIGlzIHNldCAoYmVjYXVzZSBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMpLCBidXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJiMzOTt0PyBJbiB0aGF0IGNhc2UsIGBIUEFHRV9QTURfTlJgICp3b3VsZCogYmUgZGVmaW5lZCBhbnl3YXksIGFuZCB0aGUgb3JpZ2luYWwgY29kZSBzaG91bGQgY29tcGlsZSBqdXN0IGZpbmUuICBTbywgdGhlIHBhdGNoIGlzIGFkZGluZyB0aGUgYCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGV2ZW4gdGhvdWdoIHRoZSBvcmlnaW5hbCBjb2RlIG1pZ2h0IGhhdmUgd29ya2VkLiBJcyB0aGVyZSBhbnkgZnVuY3Rpb25hbCBpbXBhY3QgaGVyZSwgb3IgaXMgaXQgKnB1cmVseSogYSBidWlsZC10aW1lIHRoaW5nPwoKSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKm5vdCogc2V0LCB0aGUgYGNoZWNrX3BtZGAgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLiBUaGVyZWZvcmUsIGNoYW5naW5nIGl0cyByZXR1cm4gdmFsdWUgdG8gYGZhbHNlYCBoYXMgbm8gZWZmZWN0IG9uIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgaGF2ZSB0byBkb3VibGUgY2hlY2suIFdoZXJlICpjb3VsZCogYGNoZWNrX3BtZGAgYmUgY2FsbGVkPyBMZXQmIzM5O3MgdHJhY2UgaXQgdGhyb3VnaC4gQWgsIEkgc2VlIGl0ISBJdCYjMzk7cyBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCB3aXRoaW4gdGhpcyBjcml0aWNhbCBibG9jayBvZiBjb2RlOgoKYGBgYwoJCWlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7CgkJCXB2bXctJmd0O3B0bCA9IHBtZF9sb2NrKG1tLCBwdm13LSZndDtwbWQpOwoJCQlwbWRlID0gKnB2bXctJmd0O3BtZDsKCQkJaWYgKCFwbWRfcHJlc2VudChwbWRlKSkgewoJCQkJc29mdGxlYWZfdCBlbnRyeTsKCgkJCQlpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHwKCQkJCSAgICAhKHB2bXctJmd0O2ZsYWdzICZhbXA7IFBWTVdfTUlHUkFUSU9OKSkKCQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwoJCQkJZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTsKCgkJCQlpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHwKCQkJCSAgICAhY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKQoJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQlpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkgewoJCQkJaWYgKHB2bXctJmd0O2ZsYWdzICZhbXA7IFBWTVdfTUlHUkFUSU9OKQoJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CgkJCQlpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSkKCQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJLyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi8KCQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKCQkJcHZtdy0mZ3Q7cHRsID0gTlVMTDsKCQl9CmBgYAoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMgd2l0aCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBkaXNhYmxlZDoKCjEuICBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIGlzIGBmYWxzZWAuIFRoYXQmIzM5O3MgZ3VhcmFudGVlZC4KMi4gIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpYCBjb3VsZCBiZSBgdHJ1ZWAsIHJpZ2h0PyBMZXQmIzM5O3MgY2hlY2suCjMuICBJZiBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKWAgaXMgYHRydWVgLCB0aGVuIGAhcG1kX3ByZXNlbnQocG1kZSlgIHdpbGwgYWxzbyBiZSBgdHJ1ZWAuCjQuICBUaGVuLCB0aGUgY29kZSBjaGVja3MgYCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYC4gSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKm5vdCogc2V0LCBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgaXMgYGZhbHNlYC4KNS4gIFRoZXJlZm9yZSwgYCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBpcyBgdHJ1ZWAuCjYuICBJdCBpbW1lZGlhdGVseSByZXR1cm5zIGBub3RfZm91bmQocHZtdylgLiAgQ3JpdGljYWxseSwgaXQgKm5ldmVyKiByZWFjaGVzIHRoZSBgY2hlY2tfcG1kYCBjYWxsIQoKV2hhdCBpZiBgcG1kX3ByZXNlbnQocG1kZSlgICppcyogYHRydWVgIChzbyB3ZSBza2lwIHRoZSBmaXJzdCBgaWYKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUgcG1kX3RyYW5zX2h1Z2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaD0yNT1zdGF0aWMgaW5saW5lIHBtZF90IHB0ZV9wbWQocHRlX3QgcHRlKVxuLS1cbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmgtNDItXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oOjQzOiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVx0KHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFdfU1opXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQ0LVxuLS1cbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmg9MTgzPXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpXG4tLVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaC0xOTQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaDoxOTU6I2RlZmluZSBwbWRfdHJhbnNfaHVnZShwbWQpXHQocG1kX3ZhbChwbWQpIFx1MDAyNlx1MDAyNiAhcG1kX3RhYmxlKHBtZCkpXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oLTE5Ni0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDg6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU1MTcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOgoKKipIdWgsIFRoYXQmIzM5O3MgVW5leHBlY3RlZC4qKgoKV2FpdCBhIHNlY29uZC4uLiBJJiMzOTttIGxvb2tpbmcgYXQgYGFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmhgIGFuZCBJIHNlZSBgcG1kX3RyYW5zX2h1Z2VgIGRlZmluZWQgKndpdGhvdXQqIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY2hlY2sgZm9yIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgPyBUaGF0JiMzOTtzIG5vdCByaWdodC4gSSB3b3VsZCBoYXZlIGV4cGVjdGVkIGEgY2hlY2sgdGhlcmUuIFRoaXMgZmVlbHMgbGlrZSBhIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBpc3N1ZSBvciBhIG1pc3NlZCBjb25maWd1cmF0aW9uIGNvbnNpZGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcG1kX3RyYW5zX2h1Z2VgIGlzIGFjdHVhbGx5IGhhbmRsZWQgaW4gdGhlIGFic2VuY2Ugb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGJlaW5nIGVuYWJsZWQuCgpPa2F5LCBsZXQgbWUgcXVpY2tseSBwaXZvdCBhbmQgY2hlY2sgYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSYjMzk7bSBiZXR0aW5nIG9uZSBvZiB0aGVtIHByb3ZpZGVzIHRoZSBmYWxsYmFjayBkZWZpbml0aW9uIG9yIHRoZSBiYXNlIGRlZmluaXRpb24gZm9yIHRoaXMsIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9uZSBpcyBzdXBwb3NlZCB0byBidWlsZCB1cG9uIHRoYXQuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXJlIGlzIGEgZ2VuZXJpYyBkZWZpbml0aW9uLCBhbmQgd2hhdCBpdCBkb2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY2x1ZSBJIG5lZWQgdG8ga25vdyB3aHkgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGlzIGRvaW5nIHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BtZF90cmFuc19odWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfaHVnZShwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDQ3LVx0aWYgKHBtZF9wcmVzZW50KHBtZCkpIHtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ0ODpcdFx0cmV0dXJuIHBtZF90cmFuc19odWdlKHBtZCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00NDktXHR9IGVsc2UgaWYgKCFwbWRfbm9uZShwbWQpKSB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDk2PXZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk4OnNwaW5sb2NrX3QgKl9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTktc3BpbmxvY2tfdCAqX19wdWRfdHJhbnNfaHVnZV9sb2NrKHB1ZF90ICpwdWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDEtLyogbW1hcF9sb2NrIG11c3QgYmUgaGVsZCBvbiBlbnRyeSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTAyOnN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWRfdCAqcG1kLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MDUtXHRpZiAocG1kX2lzX2h1Z2UoKnBtZCkpXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XHRcdHJldHVybiBfX3BtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTcwOT1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2FkanVzdF90cmFuc19odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTcxNC19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo3MTU6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xMD1lbnVtIHBhZ2Vfd2Fsa19sb2NrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMjctICpcdFx0XHR0aGlzIGhhbmRsZXIgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBoYW5kbGVcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoyODogKlx0XHRcdHBtZF90cmFuc19odWdlKCkgcG1kcy4gIFRoZXkgbWF5IHNpbXBseSBjaG9vc2UgdG9cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0yOS0gKlx0XHRcdHNwbGl0X2h1Z2VfcGFnZSgpIGluc3RlYWQgb2YgaGFuZGxpbmcgaXQgZXhwbGljaXRseS5cbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xOTk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKl96ZXJvX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIwMDktI2lmbmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIwMTA6c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjAxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjYyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcG1kX3RyYW5zX2h1Z2VgIERlZmluaXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGNvZGUmIzM5O3MgcG9pbnRpbmcgbWUgZGlyZWN0bHkgdG8gYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCwgc3BlY2lmaWNhbGx5IGxpbmUgMjAxMC4gUmlnaHQsIGBwbWRfdHJhbnNfaHVnZWAuIE9rYXksIHNvIGl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIHJldHVybiB2YWx1ZS4gQW5kIHdoYXQgYW0gSSBsb29raW5nIGF0PyAqSWYqIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbiYjMzk7dCBzZXQgZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLi4udGhlbiB0aGUgZnVuY3Rpb24gYHBtZF90cmFuc19odWdlYCByZXR1cm5zIDAuIFRoYXTigJlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUuIEEgc3RyYWlnaHRmb3J3YXJkIGFuZCBleHBlY3RlZCBjb25kaXRpb25hbCBkZWZpbml0aW9uLiBOb3RoaW5nIHBhcnRpY3VsYXJseSBncm91bmRicmVha2luZywgYnV0IHZpdGFsLiBJdCYjMzk7cyBhIHF1aWNrLCBjbGVhciB3YXkgb2YgZGlzYWJsaW5nIGh1Z2UgcGFnZSBzdXBwb3J0IGF0IHRoZSBwYWdlIHRhYmxlIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGd0YWJsZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDA1Olx0I2VuZGlmIC8qIF9fSEFWRV9DT0xPUl9aRVJPX1BBR0UgKi9cbjIwMDY6XHRcbjIwMDc6XHQjaWZkZWYgQ09ORklHX01NVVxuMjAwODpcdFxuMjAwOTpcdCNpZm5kZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4yMDEwOlx0c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuMjAxMTpcdHtcbjIwMTI6XHRcdHJldHVybiAwO1xuMjAxMzpcdH1cbjIwMTQ6XHQjaWZuZGVmIHBtZF93cml0ZVxuMjAxNTpcdHN0YXRpYyBpbmxpbmUgaW50IHBtZF93cml0ZShwbWRfdCBwbWQpXG4yMDE2Olx0e1xuMjAxNzpcdFx0QlVHKCk7XG4yMDE4Olx0XHRyZXR1cm4gMDtcbjIwMTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTIxCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1aWxkIEZpeCBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0JiMzOTtzIGNyeXN0YWwgY2xlYXIgdGhhdCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiBgcG1kX3RyYW5zX2h1Z2VgIGlzIGFsd2F5cyB6ZXJvLCBhbmQgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkYCBpcyBhbHdheXMgZmFsc2UuIFRoZXJlZm9yZSwgdGhlIGNvbmRpdGlvbmFsIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBzcGVjaWZpY2FsbHkgdGhlIGBpZmAgc3RhdGVtZW50IGludm9sdmluZyBgcG1kX3RyYW5zX2h1Z2VgIGFuZCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAsIGlzIGEgZGVhZCBlbmQuIFRoZSBgY2hlY2tfcG1kYCBwYXRoIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcy4gU28sIHRoaXMgcGF0Y2ggaXMgc2ltcGx5IGEgZGVmZW5zaXZlIG1lYXN1cmUsIGEgYnVpbGQgZml4IHRvIHByZXZlbnQgYEhQQUdFX1BNRF9OUmAgZnJvbSB0cmlnZ2VyaW5nIGEgYEJVSUxEX0JVRygpYCB3aGVuIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhcmUgZGlzYWJsZWQuIEl0JiMzOTtzIHN0cmljdGx5IGEgY29tcGlsZS10aW1lIHNhZmVndWFyZDsgdGhlcmUmIzM5O3MgemVybyBpbXBhY3Qgb24gYW55IHJlYWNoYWJsZSBjb2RlIHBhdGhzLiBNeSBmaW5hbCBjb25jbHVzaW9uPyBUaGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmc6IGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGFuICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYXJvdW5kIGNoZWNrX3BtZCgpIHRvIGZpeCBhIGJ1aWxkIGVycm9yIHdoZW4gVEhQIGlzIGRpc2FibGVkLiBXaGVuIFRIUCBpcyBkaXNhYmxlZCwgY2hlY2tfcG1kKCkgaXMgbmV2ZXIgcmVhY2hlZCBpbiBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGJlY2F1c2UgcG1kX3RyYW5zX2h1Z2UoKSBhbmQgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBib3RoIHJldHVybiBmYWxzZSwgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gYmFpbCBvdXQgZWFybHkuIFRodXMsIHRoaXMgaXMgcHVyZWx5IGEgYnVpbGQgZml4IHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ2OjM0LjAxODM4OTk4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTM0MDI1NDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFyb3VuZCBjaGVja19wbWQoKSB0byBmaXggYSBidWlsZCBlcnJvciB3aGVuIFRIUCBpcyBkaXNhYmxlZC4gV2hlbiBUSFAgaXMgZGlzYWJsZWQsIGNoZWNrX3BtZCgpIGlzIG5ldmVyIHJlYWNoZWQgaW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBiZWNhdXNlIHBtZF90cmFuc19odWdlKCkgYW5kIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgYm90aCByZXR1cm4gZmFsc2UsIGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGJhaWwgb3V0IGVhcmx5LiBUaHVzLCB0aGlzIGlzIHB1cmVseSBhIGJ1aWxkIGZpeCB3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ2OjM0LjAxODM5ODQwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxMzE1NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmFhNTFkMTM2YzVmZThkOGZiYjdkNjljYTM1ZmQ0ZmUzMDFkMjYyYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAwODo0NjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjc4MTIwMDg2MDg4NjQ1IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcXG5AQCAtMTM2LDYgKzEzNiw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbiBzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4ge1xcbkBAIC0xNDUsNiArMTQ2LDEyIEBAIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NjozNC41NTA2NTcyNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NDgwNzk3Nzc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFyb3VuZCBjaGVja19wbWQoKSB0byBmaXggYSBidWlsZCBlcnJvciB3aGVuIFRIUCBpcyBkaXNhYmxlZC4gV2hlbiBUSFAgaXMgZGlzYWJsZWQsIGNoZWNrX3BtZCgpIGlzIG5ldmVyIHJlYWNoZWQgaW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBiZWNhdXNlIHBtZF90cmFuc19odWdlKCkgYW5kIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgYm90aCByZXR1cm4gZmFsc2UsIGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIGJhaWwgb3V0IGVhcmx5LiBUaHVzLCB0aGlzIGlzIHB1cmVseSBhIGJ1aWxkIGZpeCB3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmFhNTFkMTM2YzVmZThkOGZiYjdkNjljYTM1ZmQ0ZmUzMDFkMjYyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA4OjQ2OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjc4MTIwMDg2MDg4NjQ1IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmNcbisrKyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5AQCAtMTM2LDYgKzEzNiw3IEBAIHN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xuIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIHtcbkBAIC0xNDUsNiArMTQ2LDEyIEBAIHN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NjozNC41NTA2NjEyODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMwNjM0NjM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSd2ZSBnb3QgYSBwYXRjaCB0YXJnZXRpbmcgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRvIGJlIGNvbmRpdGlvbmFsbHkgd3JhcHBpbmcgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIHdpdGggYSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFNvLCBpZiBUSFAgaXMgZW5hYmxlZCwgYGNoZWNrX3BtZGAgZ2V0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIElmIG5vdCwgaXQganVzdCByZXR1cm5zIGZhbHNlLiBUaGF0J3MgYSBjbGV2ZXIgd2F5IHRvIGtlZXAgdGhpbmdzIGNsZWFuIGFuZCBmdW5jdGlvbmFsLiBOb3csIHRvIHRydWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCwgSSBuZWVkIHRvIHNlZSAqaG93KiBgY2hlY2tfcG1kYCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIGl0cyB1c2FnZSBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgYXJvdW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gR290dGEgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgY29udHJvbCBmbG93LCBhbmQgd2h5IHRoZXkgb3B0ZWQgZm9yIHRoaXMgYXBwcm9hY2guIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdHkgVEhQIGJyaW5ncyBpbnRvIHRoZSBtaXguIExldCdzIGRpZyBpbiBhbmQgc2VlIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6MjIuODU3MDA5NjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAzOTkwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0MTpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDIte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQ5LSNlbHNlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTUwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjQtXFx0XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpIHx8XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjY1OlxcdFxcdFxcdFxcdCAgICAhY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2Ni1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjcxLVxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjcyOlxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3My1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NzoyNC40OTc0MTY0ODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY2MDMyODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgcmVzb2x2aW5nIGEgYnVpbGQgb3IgbG9naWNhbCBlcnJvciwgc3BlY2lmaWNhbGx5IHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGlzYWJsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnQ7IGNhdGNoaW5nIHRoZXNlIGVkZ2UgY2FzZXMgaXMgaW1wb3J0YW50LiBOb3csIEkgc2VlIHRoYXQgdGhlIGZ1bmN0aW9uIGBjaGVja19wbWRgIGlzIHVzZWQgd2l0aGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuICBUaGF0J3MgaW50ZXJlc3RpbmcuXG5cblRoZSBjb2RlJ3MgYmVoYXZpb3IgZGljdGF0ZXMgdGhhdCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBvZmYsIGBjaGVja19wbWRgIGlzIHN1cHBvc2VkIHRvIHJldHVybiBgZmFsc2VgLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBJcyB0aGlzIHRydWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG9yIGlzIHRoaXMgbW9yZSBvZiBhIGNvcnJlY3Rpb24gZm9yIGFuIGV4aXN0aW5nIGNvbmRpdGlvbj8gWWVzLCB0aGlzIGJlaGF2aW9yIGNoYW5nZXMgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBub3QgZW5hYmxlZC5cblxuTXkgY29uY2VybiBpcyB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCB0aGVyZSBzaG91bGRuJ3QgKmJlKiBhbnkgaHVnZSBQTURzLCByaWdodD8gU28sIGlzIGBjaGVja19wbWRgIG9ubHkgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIGh1Z2UgUE1EcyB0byBiZWdpbiB3aXRoPyBJdCBsb29rcyBsaWtlIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0J3MgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AgZmlsZS4gVGltZSB0byBpbnZlc3RpZ2F0ZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NzoyOS45NjM0NTE3OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdFxcdCAqL1xcbiAyNTE6XFx0XFx0XFx0cG1kZSA9IHBtZHBfZ2V0X2xvY2tsZXNzKHB2bXctXFx1MDAzZXBtZCk7XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdFxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XFxuIDI1NDpcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4gMjU1OlxcdFxcdFxcdFxcdHBtZGUgPSAqcHZtdy1cXHUwMDNlcG1kO1xcbiAyNTY6XFx0XFx0XFx0XFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbiAyNTc6XFx0XFx0XFx0XFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0XFx0XFx0XFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIHx8XFxuIDI2MDpcXHRcXHRcXHRcXHRcXHQgICAgIShwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKSlcXG4gMjYxOlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI2MjpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xcbiAyNjM6XFx0XFxuIDI2NDpcXHRcXHRcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHxcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdCAgICAhY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbiAyNjY6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjY3OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjg6XFx0XFx0XFx0XFx0fVxcbiAyNjk6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcXG4gMjcwOlxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbiAyNzE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjcyOlxcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxcbiAyNzM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjc0OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNzU6XFx0XFx0XFx0XFx0fVxcbiAyNzY6XFx0XFx0XFx0XFx0LyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjc3OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI3ODpcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyNzk6XFx0XFx0XFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcXG4gMjgwOlxcdFxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcXG4gMjgxOlxcdFxcbiAyODI6XFx0XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbiAyODM6XFx0XFx0XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXFx1MDAzZXBtZCk7XFxuIDI4NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjg1OlxcdFxcdFxcdFxcdH1cXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0XFx0XFx0aWYgKChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfU1lOQykgXFx1MDAyNlxcdTAwMjZcXG4gMjg4OlxcdFxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBNRF9PUkRFUikgXFx1MDAyNlxcdTAwMjZcXG4gMjkwOlxcdFxcdFxcdFxcdCAgICAocHZtdy1cXHUwMDNlbnJfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRcXHRcXHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xcbiAyOTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI5NTpcXHRcXHRcXHR9XFxuIDI5NjpcXHRcXHRcXHRpZiAoIW1hcF9wdGUocHZtdywgXFx1MDAyNnBtZGUsIFxcdTAwMjZwdGwpKSB7XFxuIDI5NzpcXHRcXHRcXHRcXHRpZiAoIXB2bXctXFx1MDAzZXB0ZSlcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmVzdGFydDtcXG4gMjk5OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9wdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ3OjI5Ljk2MzU2ODQxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTA3MDg1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBNaWdyYXRpb24gaW4gdGhlIEFic2VuY2Ugb2YgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0IGJlaGF2ZXMgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApIGFyZW4ndCBlbmFibGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndCBkZWZpbmVkLCB0aGVuIGBwbWRfdHJhbnNfaHVnZWAgaXMgKmFsbW9zdCBjZXJ0YWlubHkqIGFsd2F5cyBnb2luZyB0byBiZSBmYWxzZS4gQnV0IHRoZW4gSSByZW1lbWJlciwgaGFuZyBvbiBhIHNlY29uZCwgd2hhdCBhYm91dCBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWA/IENvdWxkIHRoYXQgcG90ZW50aWFsbHkgYmUgdHJ1ZSBldmVuIHdpdGhvdXQgVEhQPyBJdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbkRpZ2dpbmcgZGVlcGVyLCBpZiBUSFAgaXNuJ3QgZW5hYmxlZCwgdGhlbiBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgaXMgcHJvYmFibHkgZ29pbmcgdG8gcmV0dXJuIGZhbHNlLCByaWdodD8gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBzY2VuYXJpby4gVGhpcyBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgYGNoZWNrX3BtZGAgY291bGQgYmUgZW50aXJlbHkgdW5yZWFjaGFibGUgaW4gdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBJdCdzIHRpbWUgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi5cblxuVG8gY29uZmlybSBteSBoeXBvdGhlc2VzIGFuZCBnYWluIGEgY29uY3JldGUgdW5kZXJzdGFuZGluZywgSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAgYW5kIGBwbWRfdHJhbnNfaHVnZSgpYC4gQW5hbHl6aW5nIHRob3NlIHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlcnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6MzQuMTU0Mjc5NDM3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjY3NjU3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIHBtZF90cmFuc19odWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oPTI1PXN0YXRpYyBpbmxpbmUgcG1kX3QgcHRlX3BtZChwdGVfdCBwdGUpXFxuLS1cXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQyLVxcbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmg6NDM6I2RlZmluZSBwbWRfdHJhbnNfaHVnZShwbWQpXFx0KHBtZF92YWwocG1kKSBcXHUwMDI2IF9QQUdFX0hXX1NaKVxcbmFyY2gvYXJjL2luY2x1ZGUvYXNtL2h1Z2VwYWdlLmgtNDQtXFxuLS1cXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oPTE4Mz1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaC0xOTQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmg6MTk1OiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVxcdChwbWRfdmFsKHBtZCkgXFx1MDAyNlxcdTAwMjYgIXBtZF90YWJsZShwbWQpKVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgtMTk2LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0NzozNi44MjEwNTE3MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk5MjkzMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBjaGVja19wbWRgIGFuZCBUcmFuc3BhcmVudCBIdWdlcGFnZXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgY2hlY2tfcG1kYC4gUmlnaHQsIGl0J3MgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gTm93LCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndCBlbmFibGVkLCB0aGVuIGBjaGVja19wbWRgIGlzIGdvaW5nIHRvIHJldHVybiBgZmFsc2VgLCByaWdodD8gSG1tLCBpcyB0aGlzIHBhdGNoIGp1c3QgYWRkcmVzc2luZyBzb21lIGtpbmQgb2YgYnVpbGQgaXNzdWU/IEl0IGZlZWxzIHRoYXQgd2F5LiBJIHNob3VsZCByZWFsbHkgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AgZmlsZSAqYmVmb3JlKiB0aGlzIHBhdGNoIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHNpdHVhdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LCBhbmQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0Nzo0MS45MjAzNDc1NjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODcxNzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19wbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQwLS8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQxOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0Mi17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDktI2Vsc2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNTA6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUxLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4Nz1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI2NC1cXHRcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNjU6XFx0XFx0XFx0XFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjY2LVxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzEtXFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzI6XFx0XFx0XFx0XFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjczLVxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ3OjQyLjIzOTA3MjU5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg4NDQyMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipQTUQgSW52ZXN0aWdhdGlvbiAtIEEgUXVpY2sgRGlncmVzc2lvbioqXG5cblJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3Qgc2F3IHRoYXQgYGNoZWNrX3BtZGAgaXMgcmVseWluZyBvbiBgSFBBR0VfUE1EX05SYC4gVGhhdCB0cmlnZ2VycyBzb21ldGhpbmcgaW4gbXkgaGVhZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBsb2dpYyBjb3JyZWN0bHksIGFuZCB0aGF0IHRoaXMgZGVwZW5kZW5jeSBpc24ndCBtYXNraW5nIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsLiBMZXQgbWUgcXVpY2tseSBqdW1wIGJhY2sgdG8gdGhlIHNvdXJjZSBhbmQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIG9mIGBjaGVja19wbWRgLiBKdXN0IGEgc2FuaXR5IGNoZWNrLiBJIHdhbnQgdG8gc2VlICpleGFjdGx5KiBob3cgaXQgdXNlcyBgSFBBR0VfUE1EX05SYCB3aXRoaW4gaXRzIGNvbnRleHQsIGFuZCB3aGF0IGFzc3VtcHRpb25zIGl0J3MgbWFraW5nIGFib3V0IHRoZSBQTUQgc3RydWN0dXJlIGl0c2VsZi4gR290dGEga2VlcCB0aGUgd2hvbGUgcGljdHVyZSBjbGVhciBpbiBteSBoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NDYuNDI3NTE3NTM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX3ZtYV9tYXBwZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxMzY6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDEzNzpcXHR9XFxuIDEzODpcXHRcXG4gMTM5OlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gMTQwOlxcdC8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXFxuIDE0MTpcXHRzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4gMTQyOlxcdHtcXG4gMTQzOlxcdFxcdGlmICgocGZuICsgSFBBR0VfUE1EX05SIC0gMSkgXFx1MDAzYyBwdm13LVxcdTAwM2VwZm4pXFxuIDE0NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE0NTpcXHRcXHRpZiAocGZuIFxcdTAwM2UgcHZtdy1cXHUwMDNlcGZuICsgcHZtdy1cXHUwMDNlbnJfcGFnZXMgLSAxKVxcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNDc6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDE0ODpcXHR9XFxuIDE0OTpcXHQjZWxzZVxcbiAxNTA6XFx0c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuIDE1MTpcXHR7XFxuIDE1MjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDE1MzpcXHR9XFxuIDE1NDpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NDYuNDI3NjIxNzU2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NTg1NzAyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nIHdoZXJlIHRoZSBiZWhhdmlvciBzZWVtcyBkZXBlbmRlbnQgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIElmIHRoYXQncyAqbm90KiBzZXQsIHRoZSB2YWx1ZSBvZiBgSFBBR0VfUE1EX05SYCBjb3VsZCBiZSBwcm9ibGVtYXRpYyDigJMgZWl0aGVyIHVuZGVmaW5lZCwgb3IgcG9zc2libHkganVzdCAxLiBUaGF0J3MgYSByZWQgZmxhZy4gQnV0IGhvbGQgb24sIGlzbid0IGBIUEFHRV9QTURfTlJgICp1c3VhbGx5KiBkZWZpbmVkIHNvbWV3aGVyZSBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgZGVmaW5pdGlvbi4gSSBoYXZlIGEgaHVuY2ggaXQncyB0aGVyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBzcGVjaWZpY3MgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGF0IGluY2x1ZGUgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NTQuMjg2MTk0MDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjE2MzI0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEhQQUdFX1BNRF9OUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTctI2RlZmluZSBIUEFHRV9QTURfT1JERVIgKEhQQUdFX1BNRF9TSElGVC1QQUdFX1NISUZUKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjExODojZGVmaW5lIEhQQUdFX1BNRF9OUiAoMVxcdTAwM2NcXHUwMDNjSFBBR0VfUE1EX09SREVSKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExOS0jZGVmaW5lIEhQQUdFX1BNRF9NQVNLXFx0KH4oSFBBR0VfUE1EX1NJWkUgLSAxKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDc6NTcuMDA3ODMwOTI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTYyNTg4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBIdWdlIFBhZ2UgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgaHVnZSBwYWdlIHN0dWZmIGFnYWluLCBhbmQgSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBIUEFHRV9QTURfU0hJRlRgIGNvbnN0YW50IGlzIGRlZmluZWQuIEFoLCByaWdodCwgdGhhdCdzIGl0ISAqYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYCouLi4gb2YgY291cnNlLiBJdCB3b3VsZG4ndCBiZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZWFkZXIsIGJ1dCByYXRoZXIgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaHVnZSBwYWdlcy4gR290IGl0LiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgcGxhY2UgdG8gYmUgZm9yIHRoaXMga2luZCBvZiBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBMaW51eCBrZXJuZWwgYW5kIGh1Z2UgbWVtb3J5IHBhZ2VzLiBOb3cgSSBjYW4gZ2V0IG9uIHdpdGggd2hhdGV2ZXIgSSB3YXMgcmVzZWFyY2hpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODowMC4yMjQwOTI5NzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjUwMjIwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIEhQQUdFX1BNRF9TSElGVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9OTc9ZW51bSB0dmFfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDktI2lmZGVmIENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjExMDojZGVmaW5lIEhQQUdFX1BNRF9TSElGVCBQTURfU0hJRlRcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMTEtI2RlZmluZSBIUEFHRV9QVURfU0hJRlQgUFVEX1NISUZUXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTEyLSNlbHNlXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTEzOiNkZWZpbmUgSFBBR0VfUE1EX1NISUZUICh7IEJVSUxEX0JVRygpOyAwOyB9KVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTExNC0jZGVmaW5lIEhQQUdFX1BVRF9TSElGVCAoeyBCVUlMRF9CVUcoKTsgMDsgfSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDg6MDIuNDQ5MTIwNjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzI1MTMxOTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9uIGBjaGVja19wbWRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXNuJ3Qgc2V0LCB0aGVuIGBIUEFHRV9QTURfU0hJRlRgIGJlY29tZXMgYSBgQlVJTERfQlVHKClgLCB3aGljaCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvci4gTm93LCBgQ09ORklHX1BHVEFCTEVfSEFTX0hVR0VfTEVBVkVTYCBpcyB0aWVkIHRvIGVpdGhlciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBvciBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIFJpZ2h0LCBzbyBpZiBuZWl0aGVyIG9mIHRob3NlIGFyZSBzZXQsIHdlJ3JlIGd1YXJhbnRlZWQgYSBidWlsZCBmYWlsdXJlIHdoZXJlIGBIUEFHRV9QTURfU0hJRlRgIGlzIHVzZWQsIHNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGBCVUlMRF9CVUcoKWAuIFRoaXMgYGNoZWNrX3BtZGAgZnVuY3Rpb24gcmVsaWVzIG9uIGBIUEFHRV9QTURfTlJgLCB3aGljaCB3b3VsZCB0cmlnZ2VyIHRoYXQgZXJyb3IuXG5cbkJ1dCB3YWl0LCB0aGlzIHBhdGNoIGluY2x1ZGVzIGFuIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4uLiBBaCwgSSBzZWUuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpub3QqIHNldCwgYGNoZWNrX3BtZGAganVzdCByZXR1cm5zIGBmYWxzZWAuIFNvLCBpdCBhcHBlYXJzIHRoaXMgaXMgYSBidWlsZCBmaXgsIHJpZ2h0P1xuXG5CdXQgd2h5IGlzIGBjaGVja19wbWRgIGV2ZW4gY2FsbGVkIGluIHRoZSBub24tYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjYXNlPyBMZXQgbWUgdHJhY2UgdGhpcy4uLiBJdCdzIGNhbGxlZCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB3aGVuIGVpdGhlciBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIG9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpYCBpcyB0cnVlLiBJbiB0aGUgY29udGV4dCBvZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBub3QgYmVpbmcgc2V0LCBgcG1kX3RyYW5zX2h1Z2VgIHdpbGwgKmFsd2F5cyogYmUgZmFsc2UuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IHdoYXQgYWJvdXQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgPyBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBvbmUgYSBsaXR0bGUgbW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoxNS43NzQyNTUyNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTQ5MzAxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2lzX21pZ3JhdGlvbl9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTE3MzU9c3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE3NTQtXFx0XFx0c2V0X3BtZF9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwbWRwLCBwbWQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxNzU1OlxcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTE3NTYtXFx0XFx0cG1kID0gcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjU0Mz1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NTEtXFx0XFx0c2V0X3BtZF9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwbWRwLCBwbWQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyNTUyOlxcdH0gZWxzZSBpZiAocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTI1NTMtXFx0XFx0cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AocG1kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU5MT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1OTk6ICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjAwLSAqIEBwbWQ6IFBNRCBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuLS1cXG5tbS9obW0uYz0zOTY9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vaG1tLmMtNDE0LVxcbm1tL2htbS5jOjQxNTpcXHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZCkpIHtcXG5tbS9obW0uYy00MTYtXFx0XFx0aWYgKGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgMCkpIHtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjI4MD1ib29sIG1hZHZpc2VfZnJlZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMwMC1cXHRcXHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2h1Z2VfbWVtb3J5LmM6MjMwMTpcXHRcXHRcXHRcXHQgICFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSk7XFxubW0vaHVnZV9tZW1vcnkuYy0yMzAyLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDgwPXN0YXRpYyBwbWRfdCBtb3ZlX3NvZnRfZGlydHlfcG1kKHBtZF90IHBtZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ4Mi1cXHRpZiAocGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjI0ODM6XFx0XFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kKSkpXFxubW0vaHVnZV9tZW1vcnkuYy0yNDg0LVxcdFxcdFxcdHBtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI3NDg9aW50IG1vdmVfcGFnZXNfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCwgcG1kX3QgZHN0X3BtZHZhbCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc3NS1cXHRcXHRzcGluX3VubG9jayhzcmNfcHRsKTtcXG5tbS9odWdlX21lbW9yeS5jOjI3NzY6XFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoc3JjX3BtZHZhbCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTI3NzctXFx0XFx0XFx0cG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KG1tLCBcXHUwMDI2c3JjX3BtZHZhbCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMwNjEtXFx0XFx0XFx0cmV0dXJuO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzA2MjpcXHRcXHRpZiAodW5saWtlbHkocG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvbGRfcG1kKSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMwNjMtXFx0XFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBvbGRfZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChvbGRfcG1kKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzA5Ni1cXG5tbS9odWdlX21lbW9yeS5jOjMwOTc6XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMwOTgtXFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzIyNy1cXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjMyMjg6XFx0aWYgKGZyZWV6ZSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9sZF9wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjI5LVxcdFxcdHB0ZV90IGVudHJ5O1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMzAzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzMwNDpcXHRpZiAoIXBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpXFxubW0vaHVnZV9tZW1vcnkuYy0zMzA1LVxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgcGFnZSwgdm1hKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMDkwPXN0YXRpYyBpbmxpbmUgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RhdGUocG1kX3QgKnBtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTAxLVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzoxMTAyOlxcdGlmIChwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKVxcbm1tL2todWdlcGFnZWQuYy0xMTAzLVxcdFxcdHJldHVybiBTQ0FOX1BNRF9NQVBQRUQ7XFxuLS1cXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzkyLVxcdFxcdFxcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWFkdmlzZS5jOjM5MzpcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShvcmlnX3BtZCkpO1xcbm1tL21hZHZpc2UuYy0zOTQtXFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4tLVxcbm1tL21lbW9yeS5jPTY0MTc9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1vcnkuYy02NDkzLVxcbm1tL21lbW9yeS5jOjY0OTQ6XFx0XFx0aWYgKHBtZF9pc19taWdyYXRpb25fZW50cnkodm1mLm9yaWdfcG1kKSlcXG5tbS9tZW1vcnkuYy02NDk1LVxcdFxcdFxcdHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChtbSwgdm1mLnBtZCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz02NTI9c3RhdGljIHZvaWQgcXVldWVfZm9saW9zX3BtZChwbWRfdCAqcG1kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTY1Ni1cXG5tbS9tZW1wb2xpY3kuYzo2NTc6XFx0aWYgKHVubGlrZWx5KHBtZF9pc19taWdyYXRpb25fZW50cnkoKnBtZCkpKSB7XFxubW0vbWVtcG9saWN5LmMtNjU4LVxcdFxcdHFwLVxcdTAwM2Vucl9mYWlsZWQrKztcXG4tLVxcbm1tL21pZ3JhdGUuYz01NDk9dm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9taWdyYXRlLmMtNTUzLVxcdHB0bCA9IHBtZF9sb2NrKG1tLCBwbWQpO1xcbm1tL21pZ3JhdGUuYzo1NTQ6XFx0aWYgKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCpwbWQpKVxcbm1tL21pZ3JhdGUuYy01NTUtXFx0XFx0Z290byB1bmxvY2s7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODc9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNTItXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjUzOlxcdFxcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU0LVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoxNy45ODkxOTQ3N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA5OTk4NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgUGFnZSBUYWJsZSBMb2dpYyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHBtZF9pc19taWdyYXRpb25fZW50cnlgIGZ1bmN0aW9uIGFjdHVhbGx5IGNvbWVzIGZyb20uIE9rYXksIGEgcXVpY2sgc2NhbiBzdWdnZXN0cyBpdCdzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIFRoYXQncyBhIHJlYXNvbmFibGUgcGxhY2UgZm9yIGxvdy1sZXZlbCBwYWdlIHRhYmxlIG9wZXJhdGlvbnMgdG8gcmVzaWRlLiBOb3csIGxldCdzIHB1bGwgdXAgdGhhdCBoZWFkZXIgZmlsZSBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YC4gTmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBjcml0ZXJpYSB0aGlzIGZ1bmN0aW9uIHVzZXMgdG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gcGFnZSB0YWJsZSBlbnRyeSBpcyBhIG1pZ3JhdGlvbiBlbnRyeS4gUHJvYmFibHkgY2hlY2tpbmcgZmxhZ3Mgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIGJpdCBwYXR0ZXJucyB3aXRoaW4gdGhlIGBwbWRfdGAgc3RydWN0dXJlLiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBwYWdlIG1pZ3JhdGlvbnMuIFRpbWUgdG8gZGlnIGluLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoyMS42OTkxOTU0ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTY3MTMxODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU5MT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwMy0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ4OjI0LjQ5NTkyODI4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTM5NjY0MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtaWdyYXRpb24gZW50cmllcyBhdCB0aGUgUGFnZSBNaWRkbGUgRGlyZWN0b3J5IChQTUQpIGxldmVsLCBzbyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCB0aGUgc291cmNlIGNvZGUgZm9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YC4gTGV0J3Mgc2VlLi4uIHRoZSBkZWZpbml0aW9uIGlzIG1vc3QgbGlrZWx5IHdpdGhpbiB0aGUgaW5jbHVkZSBmaWxlcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgZ2VuZXJhbCBwYWdlIG9wZXJhdGlvbnMuIFJpZ2h0LCBnb29kIGJldCwgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoyOS42MzU1OTUxNjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHQgKiBAcG1kOiBQTUQgZW50cnkuXFxuIDYwMTpcXHQgKlxcbiA2MDI6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgUE1EIGVuY29kZXMgYSBtaWdyYXRpb24gZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gNjAzOlxcdCAqL1xcbiA2MDQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kX3QgcG1kKVxcbiA2MDU6XFx0e1xcbiA2MDY6XFx0XFx0cmV0dXJuIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG4gNjA3OlxcdH1cXG4gNjA4OlxcdFxcbiA2MDk6XFx0LyoqXFxuIDYxMDpcXHQgKiBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoKSAtIElzIHRoZSBzcGVjaWZpZWQgc29mdGxlYWYgZW50cnkgb2J0YWluZWQgZnJvbVxcbiA2MTE6XFx0ICogYSBQTUQgb25lIHRoYXQgd2Ugc3VwcG9ydCBhdCBQTUQgbGV2ZWw/XFxuIDYxMjpcXHQgKiBAZW50cnk6IEVudHJ5IHRvIGNoZWNrLlxcbiA2MTM6XFx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgc29mdGxlYWYgZW50cnkgaXMgdmFsaWQgYXQgUE1ELCBvdGhlcndpc2UgZmFsc2UuXFxuIDYxNDpcXHQgKi9cXG4gNjE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4gNjE2OlxcdHtcXG4gNjE3OlxcdFxcdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXFxuIDYxODpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuIDYxOTpcXHRcXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODoyOS42MzU3MDcyOTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4MTM5NTI2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBzb2Z0bGVhZl9mcm9tX3BtZGAgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGBzb2Z0bGVhZl9mcm9tX3BtZGAgYmVpbmcgdXRpbGl6ZWQgaGVyZS4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApLiBNeSBicmFpbiBpbW1lZGlhdGVseSBmbGFncyB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgVEhQIGVuYWJsZW1lbnQuIFRoZSBjZW50cmFsIHF1ZXN0aW9uIGlzLCBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyAqbm90KiBlbmFibGVkLCBpcyBpdCBldmVuICpwb3NzaWJsZSogZm9yIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5YCB0byBldmFsdWF0ZSB0byB0cnVlPyBJJ20gZG91YnRmdWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXJseSB0byBjaGVjayB3aGF0IGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCByZXR1cm5zIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgcmVsYXRpb25zaGlwIG9mIHRoaXMgcGFydGljdWxhciBsaW5lIG9mIGNvZGUgdG8gdGhlIGJyb2FkZXIgVEhQIGNvbnRleHQuIEdvdHRhIG5haWwgZG93biB0aGVzZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjM2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0ODo0My40NDk2NjI1ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDE5NjgxNDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ4OjQ1Ljg5MTYzOTc2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzcwNjkxMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbnNpZGVyaW5nIEZ1bmN0aW9uIE9wdGltaXphdGlvbioqXG5cbkhtbSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIHRoaXMgY29kZS4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBzbmlwcGV0LCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMuLi4gY291bGQgdGhpcyBiZSBhbiBpbmxpbmUgZnVuY3Rpb24gY2FuZGlkYXRlPyBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCB3aGVuIEkgc2VlIGEgc2hvcnQsIG9mdGVuLXVzZWQgcGllY2Ugb2YgbG9naWMgbGlrZSB0aGlzLiBJJ20gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBiZW5lZml0czogcmVkdWNlZCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBpbXByb3ZlZCBpbnN0cnVjdGlvbiBjYWNoZSBsb2NhbGl0eSwgcG90ZW50aWFsbHkgYWxsb3dpbmcgZm9yIGZ1cnRoZXIgY29tcGlsZXIgb3B0aW1pemF0aW9uIGR1ZSB0byB0aGUgY29udGV4dCBub3cgYmVpbmcgZXhwYW5kZWQuIEknbSBxdWlja2x5IHdlaWdoaW5nIHRoaXMgYWdhaW5zdCB0aGUgdXN1YWwgZHJhd2JhY2tzIG9mIGlubGluaW5nLCBvZiBjb3Vyc2UgLSBpbmNyZWFzZWQgY29kZSBzaXplIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5zdHJ1Y3Rpb24gY2FjaGUgbWlzc2VzIGlmIHVzZWQgdG9vIGxpYmVyYWxseSwgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGEgY29kZSBibG9hdCBvdmVyYWxsIGlmIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHRvbyBtYW55IHBsYWNlcy4gQnV0LCBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIHN5c3RlbSdzIGxpa2VseSB1c2FnZSBwYXR0ZXJucyBhbmQgdGhlIHBlcmZvcm1hbmNlIHByb2ZpbGUgSSdtIGFpbWluZyBmb3IsIGlubGluaW5nIGhlcmUgKm1pZ2h0KiB5aWVsZCBhIHdvcnRod2hpbGUgZ2Fpbi4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIGV4YW1pbmUgdGhlIGNvZGUncyBjYWxsIHNpdGVzIGFuZCBzaXplLCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIHRoZSBmaXJzdCBhdmVudWUgSSdtIGV4cGxvcmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MDcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ4OjUzLjY2MjMzMjk3N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNzk0OTY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aHBfbWlncmF0aW9uX3N1cHBvcnRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTEwOTY9c3RhdGljIHZvaWQgc21hcHNfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMTEwLVxcdFxcdHByZXNlbnQgPSB0cnVlO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMTExOlxcdH0gZWxzZSBpZiAodW5saWtlbHkodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSkpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTExMi1cXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjA4OD1zdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIxMTQtXFx0XFx0XFx0ZnJhbWUgPSBwbWRfcGZuKHBtZCkgKyBpZHg7XFxuZnMvcHJvYy90YXNrX21tdS5jOjIxMTU6XFx0fSBlbHNlIGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jLTIxMTYtXFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01NTc9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTY3LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU2ODpzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01Njkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzU1LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjc1NjpzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03NTcte1xcbi0tXFxubW0vaG1tLmM9Mzk2PXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL2htbS5jLTQxNC1cXG5tbS9obW0uYzo0MTU6XFx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjYgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWQpKSB7XFxubW0vaG1tLmMtNDE2LVxcdFxcdGlmIChobW1fcmFuZ2VfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIDApKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4NjQ9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxOTA5OlxcdGlmICh1bmxpa2VseSh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy0xOTEwLVxcdFxcdCAgICAgcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZCkpKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIyODA9Ym9vbCBtYWR2aXNlX2ZyZWVfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIyOTktXFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzoyMzAwOlxcdFxcdFZNX0JVR19PTih0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vaHVnZV9tZW1vcnkuYy0yMzAxLVxcdFxcdFxcdFxcdCAgIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjM4ND1zdGF0aWMgc3RydWN0IGZvbGlvICpub3JtYWxfb3Jfc29mdGxlYWZfZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMzg5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjM5MDpcXHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkpXFxubW0vaHVnZV9tZW1vcnkuYy0yMzkxLVxcdFxcdFdBUk5fT05DRSgxLCBcXFwiTm9uIHByZXNlbnQgaHVnZSBwbWQgd2l0aG91dCBwbWQgbWlncmF0aW9uIGVuYWJsZWQhXFxcIik7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI2MDA9aW50IGNoYW5nZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjYxMy1cXG5tbS9odWdlX21lbW9yeS5jOjI2MTQ6XFx0aWYgKHByb3RfbnVtYSBcXHUwMDI2XFx1MDAyNiAhdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSlcXG5tbS9odWdlX21lbW9yeS5jLTI2MTUtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI2MjAtXFxubW0vaHVnZV9tZW1vcnkuYzoyNjIxOlxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2IHBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyMi1cXHRcXHRjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgdWZmZF93cCxcXG4tLVxcbm1tL21hZHZpc2UuYz0zNTQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zOTEtXFx0XFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxubW0vbWFkdmlzZS5jOjM5MjpcXHRcXHRcXHRWTV9CVUdfT04odGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21hZHZpc2UuYy0zOTMtXFx0XFx0XFx0XFx0XFx0IXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xODAwPXN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE4NzgtXFx0XFx0XFx0ICovXFxubW0vbWlncmF0ZS5jOjE4Nzk6XFx0XFx0XFx0aWYgKCF0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2IGlzX3RocCkge1xcbm1tL21pZ3JhdGUuYy0xODgwLVxcdFxcdFxcdFxcdG5yX2ZhaWxlZCsrO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0zNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSh1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy00Ny1cXG5tbS9taWdyYXRlX2RldmljZS5jOjQ4OlxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxubW0vbWlncmF0ZV9kZXZpY2UuYy00OS1cXHRcXHQobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5MS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE5MjpcXHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcXHUwMDI2XFx1MDAyNlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTkzLVxcdFxcdChtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTY1PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTk4LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6OTk5OlxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2ICgqZHN0IFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpKSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDAwLVxcdFxcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShtaWdyYXRlLCBhZGRyLCBwYWdlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMDk4PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTExNjctXFx0XFx0ICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMTY4OlxcdFxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpKSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMTY5LVxcdFxcdFxcdGlmICgoc3JjX3BmbnNbaV0gXFx1MDAyNiBNSUdSQVRFX1BGTl9NSUdSQVRFKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTg3PWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjU4LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI1OTpcXHRcXHRcXHRcXHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNjAtXFx0XFx0XFx0XFx0ICAgICEocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTikpXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyNDYtXFx0XFx0aWYgKGRvX2RlbW90ZV9wYXNzIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmM6MTI0NzpcXHRcXHQgICAgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHwgIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKSkge1xcbm1tL3Ztc2Nhbi5jLTEyNDgtXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZkZW1vdGVfZm9saW9zKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDg6NTYuMzAwMjg3Mjc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MjY5MzE2MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUSFAgTWlncmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIG1pZ3JhdGlvbiBpcyBzdXBwb3J0ZWQuIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byBodWdlIHBhZ2UgbWFuYWdlbWVudCwgYW5kIGxpa2VseSwgdGhlIHN1cHBvcnQgY2hlY2tzIGZvciBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgZm91bmRhdGlvbmFsIGluZm9ybWF0aW9uIHRvIHByb2NlZWQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDk6MTQuNTY5NjA2OTU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NjU6XFx0XFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4gNTY2OlxcdH1cXG4gNTY3OlxcdFxcbiA1Njg6XFx0c3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXFxuIDU2OTpcXHR7XFxuIDU3MDpcXHRcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTik7XFxuIDU3MTpcXHR9XFxuIDU3MjpcXHRcXG4gNTczOlxcdHZvaWQgc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIDU3NDpcXHRcXHRcXHRcXHQgICBwbWRfdCAqcG1kLCBib29sIGZyZWV6ZSk7XFxuIDU3NTpcXHRib29sIHVubWFwX2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiA1NzY6XFx0XFx0XFx0XFx0ICAgcG1kX3QgKnBtZHAsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiA1Nzc6XFx0dm9pZCBtYXBfYW5vbl9mb2xpb19wbWRfbm9wZihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwbWRfdCAqcG1kLFxcbiA1Nzg6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgaGFkZHIpO1xcbiA1Nzk6XFx0XFxuIDU4MDpcXHQjZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gNTgxOlxcdFxcbiA1ODI6XFx0c3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDU4MzpcXHR7XFxuIDU4NDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ5OjE0LjU2OTczMTE4OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM0ODI2MDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBEZWZpbml0aW9uIG9mIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJdCBqdXN0IHN0cnVjayBtZSB0aGF0IHRoZSB2YXJpYWJsZSBgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWRgIGFwcGVhcnMgdG8gYmUgZGVmaW5lZCAqd2l0aGluKiBhIGNvbmRpdGlvbmFsIGJsb2NrLCBzcGVjaWZpY2FsbHkgdGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBibG9jay4gVGhhdCdzIHVudXN1YWwsIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gdmVyaWZ5IHdoZXJlIHRoaXMgZGVmaW5pdGlvbiAqYWN0dWFsbHkqIGhhcHBlbnMsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgYmVoYXZpb3IuIExldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaXRzIHBsYWNlbWVudCBvbiBsaW5lIDU4MCDigJMgeWVwLCB0aGF0J3Mgd2hlcmUgdGhlIGAjZWxzZSAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9gIHNlY3Rpb24gYmVnaW5zLiBOb3csIHRoZSBjcml0aWNhbCBwaWVjZSDigJMgSSBuZWVkIHRvIGxvb2sgZGlyZWN0bHkgYXQgaG93IGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAgaXMgZGVmaW5lZCAqaW5zaWRlKiB0aGF0IGAjZWxzZWAgYmxvY2suIFVuZGVyc3RhbmRpbmcgdGhhdCBhbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSBvdmVyYWxsIGZsb3cgaGVyZS4gVGhpcyBjb3VsZCByZXZlYWwgYW4gaW1wb3J0YW50IGRlcGVuZGVuY3kgcmVsYXRlZCB0byBUSFAgY29uZmlndXJhdGlvbiBvciBhIHN1YnRsZSBkaWZmZXJlbmNlIGluIGxvZ2ljLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ5OjI0LjkxNzk5NDU0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzUwOlxcdFxcbiA3NTE6XFx0c3RhdGljIGlubGluZSB2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIDc1MjpcXHR7XFxuIDc1MzpcXHRcXHRyZXR1cm47XFxuIDc1NDpcXHR9XFxuIDc1NTpcXHRcXG4gNzU2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxcbiA3NTc6XFx0e1xcbiA3NTg6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA3NTk6XFx0fVxcbiA3NjA6XFx0XFxuIDc2MTpcXHRzdGF0aWMgaW5saW5lIGludCBoaWdoZXN0X29yZGVyKHVuc2lnbmVkIGxvbmcgb3JkZXJzKVxcbiA3NjI6XFx0e1xcbiA3NjM6XFx0XFx0cmV0dXJuIDA7XFxuIDc2NDpcXHR9XFxuIDc2NTpcXHRcXG4gNzY2OlxcdHN0YXRpYyBpbmxpbmUgaW50IG5leHRfb3JkZXIodW5zaWduZWQgbG9uZyAqb3JkZXJzLCBpbnQgcHJldilcXG4gNzY3OlxcdHtcXG4gNzY4OlxcdFxcdHJldHVybiAwO1xcbiA3Njk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0OToyNC45MTgxMzUwOThaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzOTI2NjU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFRIUCBhbmQgUGFnZSBUYWJsZSBXYWxraW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndCBlbmFibGVkLCB0aGVuIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpYCBpcyBnb2luZyB0byByZXR1cm4gYGZhbHNlYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZnVuY3Rpb24gYWdhaW4uIEknbSBnb2luZyB0byBoYXZlIHRvIGFuYWx5emUgaG93IHRoZSBsYWNrIG9mIFRIUCBzdXBwb3J0IGltcGFjdHMgdGhhdCBmdW5jdGlvbi4gSSdtIHN1c3BlY3RpbmcgaXQgaW1wYWN0cyB0aGUgcGFnZSB0YWJsZSB3YWxraW5nIGxvZ2ljLCBsaWtlbHkgc2ltcGxpZnlpbmcgaXQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWJzZW5jZSBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIG1vZGlmaWVzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM3NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NDk6MjguMDU3NDA0Mjc5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX3ZtYV9tYXBwZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0XFx0ICovXFxuIDI1MTpcXHRcXHRcXHRwbWRlID0gcG1kcF9nZXRfbG9ja2xlc3MocHZtdy1cXHUwMDNlcG1kKTtcXG4gMjUyOlxcdFxcbiAyNTM6XFx0XFx0XFx0aWYgKHBtZF90cmFuc19odWdlKHBtZGUpIHx8IHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSkpIHtcXG4gMjU0OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNTU6XFx0XFx0XFx0XFx0cG1kZSA9ICpwdm13LVxcdTAwM2VwbWQ7XFxuIDI1NjpcXHRcXHRcXHRcXHRpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuIDI1NzpcXHRcXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5O1xcbiAyNTg6XFx0XFxuIDI1OTpcXHRcXHRcXHRcXHRcXHRpZiAoIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgfHxcXG4gMjYwOlxcdFxcdFxcdFxcdFxcdCAgICAhKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pKVxcbiAyNjE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjYyOlxcdFxcdFxcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdGlmICghc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSB8fFxcbiAyNjU6XFx0XFx0XFx0XFx0XFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXFxuIDI2NjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyNjc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI2ODpcXHRcXHRcXHRcXHR9XFxuIDI2OTpcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkge1xcbiAyNzA6XFx0XFx0XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pXFxuIDI3MTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyNzI6XFx0XFx0XFx0XFx0XFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXFxuIDI3MzpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyNzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI3NTpcXHRcXHRcXHRcXHR9XFxuIDI3NjpcXHRcXHRcXHRcXHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbiAyNzc6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHZtdy1cXHUwMDNlcHRsKTtcXG4gMjc4OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuIDI3OTpcXHRcXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0OToyOC4wNTc1MjE0OTlaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExNzA2ODY0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb25hbCBMb2dpYyBhbmQgQnVpbGQgRml4KipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJ3QgZW5hYmxlZCwgdGhlIGltcGxpY2F0aW9ucyBhcmUgcXVpdGUgY2xlYXIuIEZpcnN0LCBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIGlzIGdvaW5nIHRvIGJlIGZhbHNlLiBUaGVuLCBJIG5lZWQgdG8gY29uc2lkZXIgYHBtZF9pc19taWdyYXRpb25fZW50cnkocG1kZSlgLiBJIGhhdmUgdG8gcGF1c2UgaGVyZS4gSWYgVEhQIG1pZ3JhdGlvbiBpc24ndCBzdXBwb3J0ZWQsIGNhbiB3ZSBldmVuIGhhdmUgYSBtaWdyYXRpb24gZW50cnk/IEFoLCBpZiB0aGF0IGZ1bmN0aW9uIHJldHVybnMgZmFsc2UsIGFuZCB3ZSBkbyBoYXZlIGEgbWlncmF0aW9uIGVudHJ5LCBpdCBnb2VzIGludG8gdGhlIHJlbGV2YW50IGBpZmAgYmxvY2suIFNpbmNlIG1pZ3JhdGlvbiBlbnRyaWVzIGFyZW4ndCBjb25zaWRlcmVkIHByZXNlbnQsIGAhcG1kX3ByZXNlbnQocG1kZSlgIGlzIHRydWUsIGFuZCBpZiB3ZSBhbHNvIGRvbid0IHN1cHBvcnQgdGhlIFRIUCBtaWdyYXRpb24sIHdlIHJldHVybiBgbm90X2ZvdW5kKHB2bXcpYC4gSXQncyBjbGVhciB0aGF0IGluIHRoaXMgcGF0aCwgdGhlIGBjaGVja19wbWRgIGZ1bmN0aW9uIGlzICpuZXZlciogY2FsbGVkLCBpZiB0aGlzIGNvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQuXG5cbk5vdywgd2hhdCBpZiBgcG1kX3ByZXNlbnQocG1kZSlgIGlzIHRydWU/IFdlIGhpdCB0aGUgbmV4dCBgaWZgIGJsb2NrLCBleHBlY3RpbmcgYHBtZF90cmFuc19odWdlKHBtZGUpYCB0byBiZSB0cnVlLCBidXQgaXQncyAqZmFsc2UqIGJlY2F1c2Ugd2UgZGlzYWJsZWQgVEhQLiBTbywgd2UgZW5kIHVwIGluIHRoZSBzZWN0aW9uIHRoYXQgaGFuZGxlcyBhIFRIUCBQTUQgdGhhdCdzIGJlZW4gc3BsaXQsIHVubG9jaywgYW5kIGNvbnRpbnVlcy4gV2hpY2ggbWVhbnMsICphZ2FpbiosIGBjaGVja19wbWRgIGlzICpuZXZlciogY2FsbGVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2gsIHdpdGggaXRzIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgdGhlIGR1bW15IGBjaGVja19wbWRgIHJldHVybmluZyBgZmFsc2VgIGlzLCBhcyBJIHN1c3BlY3RlZCwgYSBwdXJlIGJ1aWxkIGZpeCEgQnV0Li4uIHdoeSBkaWQgaXQgbmVlZCB0byBiZSBmaXhlZCBpbiB0aGUgZmlyc3QgcGxhY2U/IEFoLCBpdCdzIHRoZSBgY2hlY2tfcG1kYCBmdW5jdGlvbiBpdHNlbGYsIHNwZWNpZmljYWxseSB0aGUgdXNlIG9mIGBIUEFHRV9QTURfTlJgLiBJZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkaXNhYmxlZCBhbmQsIGltcG9ydGFudGx5LCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgYWxzbyBkaXNhYmxlZCwgYEhQQUdFX1BNRF9OUmAgY2F1c2VzIGEgYnVpbGQgZXJyb3IgYmVjYXVzZSBgSFBBR0VfUE1EX1NISUZUYCBiZWNvbWVzIGEgYCh7IEJVSUxEX0JVRygpOyAwOyB9KWAsIHNpbmNlIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBhcmUgbWlzc2luZy5cblxuQWgsIHllcywgYEhQQUdFX1BNRF9OUmAgaXMgZGVmaW5lZCBhcyBgKDEgXHUwMDNjXHUwMDNjIChIUEFHRV9QTURfU0hJRlQgLSBQQUdFX1NISUZUKSlgLiBJZiBgSFBBR0VfUE1EX1NISUZUYCBpcyBgKHsgQlVJTERfQlVHKCk7IDA7IH0pYCwgdGhlbiwgcHJlY2lzZWx5LCBgSFBBR0VfUE1EX05SYCB0cmlnZ2VycyB0aGF0IGBCVUlMRF9CVUcoKWAuIFNvLCB0aGlzIHBhdGNoIGlzIHNvbGVseSBmaXhpbmcgYSBidWlsZCBlcnJvciB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRpc2FibGVkLCBidXQgdGhhdCdzIGEgc21hbGwgcGFydCBvZiB0aGUgc3RvcnkuXG5cbldhaXQsIGlmIGBDT05GSUdfSFVHRVRMQl9QQUdFYCAqaXMqIHNldCwgYnV0IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbid0PyBUaGVuIGBDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNgIGlzIHNldCwgYW5kIGBIUEFHRV9QTURfU0hJRlRgIGdldHMgYXNzaWduZWQgdGhlIGNvcnJlY3QgdmFsdWUgd2hpY2ggaXMgYFBNRF9TSElGVGAuIEluIHRoaXMgY2FzZSwgYGNoZWNrX3BtZGAgd291bGQgY29tcGlsZSB3aXRob3V0IGVycm9yLiBCdXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCB1bmNvbmRpdGlvbmFsbHkuIE5vdywgSSBoYXZlIHRvIGdvIGNoZWNrIHdoZXRoZXIgYGNoZWNrX3BtZGAgY291bGQgYmUgY2FsbGVkIGZvciBodWdldGxiIHBhZ2VzLiBJcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGV2ZXIgdXNlZCB3aXRoIGh1Z2V0bGIgcGFnZXM/IEkgbmVlZCB0byBnbyBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo0OTozOS4yMjgyMTEyODRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTk4Nzg1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV92bWFfbWFwcGVkX3dhbGtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9NTIyPXN0cnVjdCBscnV2ZWM7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzA4PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzEyOnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cXHRcXHR1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODYzLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2NS1cXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3Ni0jZGVmaW5lIERFRklORV9GT0xJT19WTUFfV0FMSyhuYW1lLCBfZm9saW8sIF92bWEsIF9hZGRyZXNzLCBfZmxhZ3MpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg3NzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc4LVxcdFxcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODUtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NjogKiBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0IC0gUmVzdGFydCB0aGUgcGFnZSB0YWJsZSB3YWxrLlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NzogKiBAcHZtdzogUG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05MDQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkwNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTE5OmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MjAtdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyMjpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIzLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjU6ZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjktXFx0XFx0c3RydWN0IHBhZ2UgKm5ldyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQxLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MjpzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ3LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3KVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE2NDpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2NS1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMDEtXFx0KmFjY2Vzc2VkID0gZmFsc2U7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNi1cXHRcXHRpZiAoKmFjY2Vzc2VkKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNzpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODYyPWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2NS0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5tbS9odWdlX21lbW9yeS5jOjQ4NjY6aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5MzktXFxubW0vaHVnZV9tZW1vcnkuYzo0OTQwOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMjU3LSAqL1xcbm1tL2ludGVybmFsLmg6MTI1ODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3NfZW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xcbi0tXFxubW0va3NtLmM9MTI3NT1zdGF0aWMgaW50IHdyaXRlX3Byb3RlY3RfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2tzbS5jLTEyOTYtXFxubW0va3NtLmM6MTI5NzpcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG5tbS9rc20uYy0xMjk4LVxcdFxcdGdvdG8gb3V0X21uO1xcbi0tXFxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxcbm1tL2tzbS5jOjEzNTk6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0va3NtLmMtMTM2MC1vdXRfbW46XFxuLS1cXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjk3LVxcbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbm1tL21pZ3JhdGUuYy0yOTktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzUxLVxcbm1tL21pZ3JhdGUuYzozNTI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL21pZ3JhdGUuYy0zNTMtXFx0XFx0cm1hcF90IHJtYXBfZmxhZ3MgPSBSTUFQX05PTkU7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcXHRcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cXHRcXHRcXHQucHRsID0gcHRsLFxcbi0tXFxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZV9pZGxlLmMtNTgtXFxubW0vcGFnZV9pZGxlLmM6NTk6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3BhZ2VfaWRsZS5jLTYwLVxcdFxcdGFkZHIgPSBwdm13LmFkZHJlc3M7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEwOnN0YXRpYyBpbmxpbmUgYm9vbCBub3RfZm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTExLXtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHB2bXcpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNy1cXHRcXHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04Ny0gKiBtYXBwZWQgYXQgdGhlIEBwdm13LVxcdTAwM2VwdGVcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo4ODogKiBAcHZtdzogcGFnZV92bWFfbWFwcGVkX3dhbGsgc3RydWN0LCBpbmNsdWRlcyBhIHBhaXIgcHRlIGFuZCBwZm4gcmFuZ2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04OS0gKiBmb3IgY2hlY2tpbmdcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTkxLSAqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6OTI6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBmb3VuZCBhIHBsYWNlIHdoZXJlIHBmbiByYW5nZSBpcyAqcG90ZW50aWFsbHkqXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwNi0gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTA4LXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0MC0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0MTpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDIte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQ5LSNlbHNlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTUwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MS17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTUtXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU2OnN0YXRpYyB2b2lkIHN0ZXBfZm9yd2FyZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTcte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTYzLS8qKlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2NDogKiBwYWdlX3ZtYV9tYXBwZWRfd2FsayAtIGNoZWNrIGlmIEBwdm13LVxcdTAwM2VwZm4gaXMgbWFwcGVkIGluIEBwdm13LVxcdTAwM2V2bWEgYXRcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjUtICogQHB2bXctXFx1MDAzZWFkZHJlc3NcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjY6ICogQHB2bXc6IHBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLiBwYWdlLCB2bWEsIGFkZHJlc3MgYW5kIGZsYWdzXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY3LSAqIG11c3QgYmUgc2V0LiBwbWQsIHB0ZSBhbmQgcHRsIG11c3QgYmUgTlVMTC5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3My0gKiBJZiBAcHZtdy1cXHUwMDNlcG1kIGlzIHNldCBidXQgQHB2bXctXFx1MDAzZXB0ZSBpcyBub3QsIHlvdSBoYXZlIGZvdW5kIFBNRC1tYXBwZWQgcGFnZVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3NDogKiAodXN1YWxseSBUSFApLiBGb3IgUFRFLW1hcHBlZCBUSFAsIHlvdSBzaG91bGQgcnVuIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgaW5cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzUtICogYSBsb29wIHRvIGZpbmQgYWxsIFBURXMgdGhhdCBtYXAgdGhlIFRIUC5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4My0gKlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4NDogKiBJZiB5b3UgbmVlZCB0byBzdG9wIHRoZSB3YWxrIGJlZm9yZSBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIHJldHVybmVkIGZhbHNlLFxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4NTogKiB1c2UgcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgpLiBJdCB3aWxsIGRvIHRoZSBob3VzZWtlZXBpbmcuXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTg2LSAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4Nzpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xODgte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MzUzPXVuc2lnbmVkIGxvbmcgcGFnZV9tYXBwZWRfaW5fdm1hKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzU2LVxcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM1NzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNTgtXFx0XFx0LnBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpLFxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzY2LVxcdFxcdGdvdG8gb3V0O1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM2NzpcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjgtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MzY5OlxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3MC1vdXQ6XFxuLS1cXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtOTI0LVxcbm1tL3JtYXAuYzo5MjU6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3JtYXAuYy05MjYtXFx0XFx0YWRkcmVzcyA9IHB2bXcuYWRkcmVzcztcXG4tLVxcbm1tL3JtYXAuYy05NDgtXFx0XFx0XFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xcbm1tL3JtYXAuYzo5NDk6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTk1MC1cXHRcXHRcXHRwcmEtXFx1MDAzZXZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDtcXG4tLVxcbm1tL3JtYXAuYy05NjMtXFx0XFx0XFx0cHJhLVxcdTAwM2VyZWZlcmVuY2VkID0gLTE7XFxubW0vcm1hcC5jOjk2NDpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtOTY1LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3JtYXAuYy0xMDAyLVxcdFxcdGlmIChwdGVzID09IHB2bXcubnJfcGFnZXMpIHtcXG5tbS9ybWFwLmM6MTAwMzpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMTAwNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYz0xMDY0PWludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuLS1cXG5tbS9ybWFwLmMtMTEwMi1cXG5tbS9ybWFwLmM6MTEwMzpzdGF0aWMgaW50IHBhZ2Vfdm1hX21rY2xlYW5fb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9ybWFwLmMtMTEwNC17XFxuLS1cXG5tbS9ybWFwLmMtMTExNy1cXG5tbS9ybWFwLmM6MTExODpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsocHZtdykpIHtcXG5tbS9ybWFwLmMtMTExOS1cXHRcXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm1tL3JtYXAuYz0xMjMxPXN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTEyMzQtXFx0c3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKilhcmc7XFxubW0vcm1hcC5jOjEyMzU6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vcm1hcC5jLTEyMzYtXFx0XFx0LnBmblxcdFxcdD0gc3RhdGUtXFx1MDAzZXBmbixcXG4tLVxcbm1tL3JtYXAuYz0xMzEwPWludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcXG4tLVxcbm1tL3JtYXAuYy0xMzEyLXtcXG5tbS9ybWFwLmM6MTMxMzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9ybWFwLmMtMTMxNC1cXHRcXHQucGZuXFx0XFx0PSBwZm4sXFxuLS1cXG5tbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9ybWFwLmM6MTk0NTpcXHRcXHRcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxubW0vcm1hcC5jLTE5NDYtXFx0XFx0XFx0ZW51bSB0dHVfZmxhZ3MgZmxhZ3MsIHB0ZV90IHB0ZSlcXG4tLVxcbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjAzMS1cXG5tbS9ybWFwLmM6MjAzMjpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vcm1hcC5jLTIwMzMtXFx0XFx0bnJfcGFnZXMgPSAxO1xcbi0tXFxubW0vcm1hcC5jLTIwODktXFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcXG5tbS9ybWFwLmM6MjA5MDpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjA5MS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3JtYXAuYy0yMzYzLXdhbGtfZG9uZTpcXG5tbS9ybWFwLmM6MjM2NDpcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjM2NS1cXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNDYwLVxcbm1tL3JtYXAuYzoyNDYxOlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9ybWFwLmMtMjQ2Mi1cXHRcXHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cXG4tLVxcbm1tL3JtYXAuYy0yNDc2LVxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XFxubW0vcm1hcC5jOjI0Nzc6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI0NzgtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9ybWFwLmMtMjQ5My1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjQ5NDpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjQ5NS1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNTQ5LVxcdFxcdFxcdFxcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XFxubW0vcm1hcC5jOjI1NTA6XFx0XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI1NTEtXFx0XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuLS1cXG5tbS9ybWFwLmMtMjU2My1cXHRcXHRcXHRcXHRcXHQgKi9cXG5tbS9ybWFwLmM6MjU2NDpcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjU2NS1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNjUwLVxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNjUxOlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNjUyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI2NjEtXFx0XFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI2NjI6XFx0XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI2NjMtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjY2OC1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjY2OTpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjY3MC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQxMzQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxODAtICovXFxubW0vdm1zY2FuLmM6NDE4MTpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDE4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjQ5OjQzLjc0ODA5Nzc1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODAwMDI4MzUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBQYWdlIE1hcHBpbmcqKlxuXG5Ib2xkIG9uIGEgbWludXRlLi4uIGlzbid0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gdHJhdmVyc2UgdGhlIG1hcHBpbmdzIG9mIEh1Z2VUTEIgcGFnZXM/IEkgY291bGQgc3dlYXIgSSd2ZSBzZWVuIHRoYXQgaW4gcmVsYXRpb24gdG8gdGhlbS4gQWxyaWdodCwgYmV0dGVyIGNvbmZpcm0gdGhhdCBodW5jaC4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUg4oCTIHNwZWNpZmljYWxseSwgbGV0J3MgcHVsbCB1cCBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGFuZCBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVzZWQgaGVyZS4gVGhpcyBzaG91bGQgcmV2ZWFsIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aG9zZSBsYXJnZSBtZW1vcnkgcmVnaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo1MDowMS43NDgzODQ3ODVaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4NzpcXHRib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4gMTg4OlxcdHtcXG4gMTg5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gcHZtdy1cXHUwMDNldm1hO1xcbiAxOTA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtXFx1MDAzZXZtX21tO1xcbiAxOTE6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQ7XFxuIDE5MjpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuIDE5MzpcXHRcXHRwdGVfdCBwdGV2YWw7XFxuIDE5NDpcXHRcXHRwZ2RfdCAqcGdkO1xcbiAxOTU6XFx0XFx0cDRkX3QgKnA0ZDtcXG4gMTk2OlxcdFxcdHB1ZF90ICpwdWQ7XFxuIDE5NzpcXHRcXHRwbWRfdCBwbWRlO1xcbiAxOTg6XFx0XFxuIDE5OTpcXHRcXHQvKiBUaGUgb25seSBwb3NzaWJsZSBwbWQgbWFwcGluZyBoYXMgYmVlbiBoYW5kbGVkIG9uIGxhc3QgaXRlcmF0aW9uICovXFxuIDIwMDpcXHRcXHRpZiAocHZtdy1cXHUwMDNlcG1kIFxcdTAwMjZcXHUwMDI2ICFwdm13LVxcdTAwM2VwdGUpXFxuIDIwMTpcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRpZiAodW5saWtlbHkoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpKSB7XFxuIDIwNDpcXHRcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGUgPSBoc3RhdGVfdm1hKHZtYSk7XFxuIDIwNTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoc3RhdGUpO1xcbiAyMDY6XFx0XFx0XFx0LyogVGhlIG9ubHkgcG9zc2libGUgbWFwcGluZyB3YXMgaGFuZGxlZCBvbiBsYXN0IGl0ZXJhdGlvbiAqL1xcbiAyMDc6XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZXB0ZSlcXG4gMjA4OlxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDIwOTpcXHRcXHRcXHQvKlxcbiAyMTA6XFx0XFx0XFx0ICogQWxsIGNhbGxlcnMgdGhhdCBnZXQgaGVyZSB3aWxsIGFscmVhZHkgaG9sZCB0aGVcXG4gMjExOlxcdFxcdFxcdCAqIGlfbW1hcF9yd3NlbS4gIFRoZXJlZm9yZSwgbm8gYWRkaXRpb25hbCBsb2NrcyBuZWVkIHRvIGJlXFxuIDIxMjpcXHRcXHRcXHQgKiB0YWtlbiBiZWZvcmUgY2FsbGluZyBodWdldGxiX3dhbGsoKS5cXG4gMjEzOlxcdFxcdFxcdCAqL1xcbiAyMTQ6XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRlID0gaHVnZXRsYl93YWxrKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcywgc2l6ZSk7XFxuIDIxNTpcXHRcXHRcXHRpZiAoIXB2bXctXFx1MDAzZXB0ZSlcXG4gMjE2OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGUsIG1tLCBwdm13LVxcdTAwM2VwdGUpO1xcbiAyMTk6XFx0XFx0XFx0aWYgKCFjaGVja19wdGUocHZtdywgcGFnZXNfcGVyX2h1Z2VfcGFnZShoc3RhdGUpKSlcXG4gMjIwOlxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDIyMTpcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZW5kID0gdm1hX2FkZHJlc3NfZW5kKHB2bXcpO1xcbiAyMjU6XFx0XFx0aWYgKHB2bXctXFx1MDAzZXB0ZSlcXG4gMjI2OlxcdFxcdFxcdGdvdG8gbmV4dF9wdGU7XFxuIDIyNzpcXHRyZXN0YXJ0OlxcbiAyMjg6XFx0XFx0ZG8ge1xcbiAyMjk6XFx0XFx0XFx0cGdkID0gcGdkX29mZnNldChtbSwgcHZtdy1cXHUwMDNlYWRkcmVzcyk7XFxuIDIzMDpcXHRcXHRcXHRpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSB7XFxuIDIzMTpcXHRcXHRcXHRcXHRzdGVwX2ZvcndhcmQocHZtdywgUEdESVJfU0laRSk7XFxuIDIzMjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjMzOlxcdFxcdFxcdH1cXG4gMjM0OlxcdFxcdFxcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBwdm13LVxcdTAwM2VhZGRyZXNzKTtcXG4gMjM1OlxcdFxcdFxcdGlmICghcDRkX3ByZXNlbnQoKnA0ZCkpIHtcXG4gMjM2OlxcdFxcdFxcdFxcdHN0ZXBfZm9yd2FyZChwdm13LCBQNERfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjUwOjAxLjc0ODUxNDgzNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjI2NDU0MzczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIGZvciBodWdldGxiIHBhZ2VzLCBpdCdzIGBodWdldGxiX3dhbGtgIGFuZCBgY2hlY2tfcHRlYCwgbm90IGBjaGVja19wbWRgIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoLlwiIFRoYXQncyBjcnVjaWFsOyBgY2hlY2tfcG1kYCBpcyAqc3BlY2lmaWNhbGx5KiBmb3IgVEhQIOKAkyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBTbywgaWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXNuJ3Qgc2V0LCBgY2hlY2tfcG1kYCBpcyBuZXZlciBldmVuICpjYWxsZWQqLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBibG9jayBhbmQgYSBkdW1teSBgY2hlY2tfcG1kYCB0aGF0IHJldHVybnMgYGZhbHNlYC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhpcyBpcyBqdXN0IGEgYnVpbGQgZml4LCB0byBhdm9pZCBhIGBCVUlMRF9CVUcoKWAgY2F1c2VkIGJ5IGBIUEFHRV9QTURfTlJgIHdoZW4gVEhQIGlzIG9mZi5cblxuQnV0IHdhaXQgYSBtaW51dGUsIGxldCBtZSBwbGF5IGRldmlsJ3MgYWR2b2NhdGUuIFdoYXQgaWYgYENPTkZJR19QR1RBQkxFX0hBU19IVUdFX0xFQVZFU2AgaXMgc2V0IChiZWNhdXNlIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyksIGJ1dCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpc24ndD8gSW4gdGhhdCBjYXNlLCBgSFBBR0VfUE1EX05SYCAqd291bGQqIGJlIGRlZmluZWQgYW55d2F5LCBhbmQgdGhlIG9yaWdpbmFsIGNvZGUgc2hvdWxkIGNvbXBpbGUganVzdCBmaW5lLiAgU28sIHRoZSBwYXRjaCBpcyBhZGRpbmcgdGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBldmVuIHRob3VnaCB0aGUgb3JpZ2luYWwgY29kZSBtaWdodCBoYXZlIHdvcmtlZC4gSXMgdGhlcmUgYW55IGZ1bmN0aW9uYWwgaW1wYWN0IGhlcmUsIG9yIGlzIGl0ICpwdXJlbHkqIGEgYnVpbGQtdGltZSB0aGluZz9cblxuSWYgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgKm5vdCogc2V0LCB0aGUgYGNoZWNrX3BtZGAgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkLiBUaGVyZWZvcmUsIGNoYW5naW5nIGl0cyByZXR1cm4gdmFsdWUgdG8gYGZhbHNlYCBoYXMgbm8gZWZmZWN0IG9uIGV4ZWN1dGlvbiBmbG93LiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgaGF2ZSB0byBkb3VibGUgY2hlY2suIFdoZXJlICpjb3VsZCogYGNoZWNrX3BtZGAgYmUgY2FsbGVkPyBMZXQncyB0cmFjZSBpdCB0aHJvdWdoLiBBaCwgSSBzZWUgaXQhIEl0J3MgaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgd2l0aGluIHRoaXMgY3JpdGljYWwgYmxvY2sgb2YgY29kZTpcblxuYGBgY1xuXHRcdGlmIChwbWRfdHJhbnNfaHVnZShwbWRlKSB8fCBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpKSB7XG5cdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG5cdFx0XHRwbWRlID0gKnB2bXctXHUwMDNlcG1kO1xuXHRcdFx0aWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuXHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5O1xuXG5cdFx0XHRcdGlmICghdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSB8fFxuXHRcdFx0XHQgICAgIShwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTikpXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcblxuXHRcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkgfHxcblx0XHRcdFx0ICAgICFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobGlrZWx5KHBtZF90cmFuc19odWdlKHBtZGUpKSkge1xuXHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0aWYgKCFjaGVja19wbWQocG1kX3BmbihwbWRlKSwgcHZtdykpXG5cdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuXHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuXHRcdH1cbmBgYFxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGlzIHdpdGggYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGlzYWJsZWQ6XG5cbjEuICBgcG1kX3RyYW5zX2h1Z2UocG1kZSlgIGlzIGBmYWxzZWAuIFRoYXQncyBndWFyYW50ZWVkLlxuMi4gIGBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KHBtZGUpYCBjb3VsZCBiZSBgdHJ1ZWAsIHJpZ2h0PyBMZXQncyBjaGVjay5cbjMuICBJZiBgcG1kX2lzX21pZ3JhdGlvbl9lbnRyeShwbWRlKWAgaXMgYHRydWVgLCB0aGVuIGAhcG1kX3ByZXNlbnQocG1kZSlgIHdpbGwgYWxzbyBiZSBgdHJ1ZWAuXG40LiAgVGhlbiwgdGhlIGNvZGUgY2hlY2tzIGAhdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKWAuIElmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzICpub3QqIHNldCwgYHRocF9taWdyYXRpb25fc3VwcG9ydGVkKClgIGlzIGBmYWxzZWAuXG41LiAgVGhlcmVmb3JlLCBgIXRocF9taWdyYXRpb25fc3VwcG9ydGVkKClgIGlzIGB0cnVlYC5cbjYuICBJdCBpbW1lZGlhdGVseSByZXR1cm5zIGBub3RfZm91bmQocHZtdylgLiAgQ3JpdGljYWxseSwgaXQgKm5ldmVyKiByZWFjaGVzIHRoZSBgY2hlY2tfcG1kYCBjYWxsIVxuXG5XaGF0IGlmIGBwbWRfcHJlc2VudChwbWRlKWAgKmlzKiBgdHJ1ZWAgKHNvIHdlIHNraXAgdGhlIGZpcnN0IGBpZlxuXG4iLCJJbnB1dFRva2VucyI6MjMxMzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NTA6MTguMDEzMDYyNDYzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgyNDMxMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBwbWRfdHJhbnNfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaD0yNT1zdGF0aWMgaW5saW5lIHBtZF90IHB0ZV9wbWQocHRlX3QgcHRlKVxcbi0tXFxuYXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaC00Mi1cXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oOjQzOiNkZWZpbmUgcG1kX3RyYW5zX2h1Z2UocG1kKVxcdChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IV19TWilcXG5hcmNoL2FyYy9pbmNsdWRlL2FzbS9odWdlcGFnZS5oLTQ0LVxcbi0tXFxuYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaD0xODM9c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSlcXG4tLVxcbmFyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgtMTk0LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oOjE5NTojZGVmaW5lIHBtZF90cmFuc19odWdlKHBtZClcXHQocG1kX3ZhbChwbWQpIFxcdTAwMjZcXHUwMDI2ICFwbWRfdGFibGUocG1kKSlcXG5hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oLTE5Ni0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NTA6MjEuNzk1NTAwMDM4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTg0NDU5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSByZXZpZXdpbmcgdGhpcyBjb2RlOlxuXG4qKkh1aCwgVGhhdCdzIFVuZXhwZWN0ZWQuKipcblxuV2FpdCBhIHNlY29uZC4uLiBJJ20gbG9va2luZyBhdCBgYXJjaC9hcmMvaW5jbHVkZS9hc20vaHVnZXBhZ2UuaGAgYW5kIEkgc2VlIGBwbWRfdHJhbnNfaHVnZWAgZGVmaW5lZCAqd2l0aG91dCogYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjaGVjayBmb3IgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWA/IFRoYXQncyBub3QgcmlnaHQuIEkgd291bGQgaGF2ZSBleHBlY3RlZCBhIGNoZWNrIHRoZXJlLiBUaGlzIGZlZWxzIGxpa2UgYSBwb3RlbnRpYWwgcG9ydGFiaWxpdHkgaXNzdWUgb3IgYSBtaXNzZWQgY29uZmlndXJhdGlvbiBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHBtZF90cmFuc19odWdlYCBpcyBhY3R1YWxseSBoYW5kbGVkIGluIHRoZSBhYnNlbmNlIG9mIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBiZWluZyBlbmFibGVkLlxuXG5Pa2F5LCBsZXQgbWUgcXVpY2tseSBwaXZvdCBhbmQgY2hlY2sgYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZV9tbS5oYC4gSSdtIGJldHRpbmcgb25lIG9mIHRoZW0gcHJvdmlkZXMgdGhlIGZhbGxiYWNrIGRlZmluaXRpb24gb3IgdGhlIGJhc2UgZGVmaW5pdGlvbiBmb3IgdGhpcywgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgb25lIGlzIHN1cHBvc2VkIHRvIGJ1aWxkIHVwb24gdGhhdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSBnZW5lcmljIGRlZmluaXRpb24sIGFuZCB3aGF0IGl0IGRvZXMuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjbHVlIEkgbmVlZCB0byBrbm93IHdoeSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgZG9pbmcgd2hhdCBpdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjUwOjI5LjQ5Mzk0ODM4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0Mzc2NTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBtZF90cmFuc19odWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ0NT1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2h1Z2UocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDQ3LVxcdGlmIChwbWRfcHJlc2VudChwbWQpKSB7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDQ4OlxcdFxcdHJldHVybiBwbWRfdHJhbnNfaHVnZShwbWQpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ0OS1cXHR9IGVsc2UgaWYgKCFwbWRfbm9uZShwbWQpKSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD00OTY9dm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk3LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5ODpzcGlubG9ja190ICpfX3BtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ5OS1zcGlubG9ja190ICpfX3B1ZF90cmFuc19odWdlX2xvY2socHVkX3QgKnB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAxLS8qIG1tYXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgKi9cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDI6c3RhdGljIGlubGluZSBzcGlubG9ja190ICpwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZF90ICpwbWQsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAzLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA1LVxcdGlmIChwbWRfaXNfaHVnZSgqcG1kKSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MDY6XFx0XFx0cmV0dXJuIF9fcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTA3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzA5PXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfYWRqdXN0X3RyYW5zX2h1Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTQtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjcxNTpzdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKnBtZF90cmFuc19odWdlX2xvY2socG1kX3QgKnBtZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTA9ZW51bSBwYWdlX3dhbGtfbG9jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMjctICpcXHRcXHRcXHR0aGlzIGhhbmRsZXIgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBoYW5kbGVcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6Mjg6ICpcXHRcXHRcXHRwbWRfdHJhbnNfaHVnZSgpIHBtZHMuICBUaGV5IG1heSBzaW1wbHkgY2hvb3NlIHRvXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTI5LSAqXFx0XFx0XFx0c3BsaXRfaHVnZV9wYWdlKCkgaW5zdGVhZCBvZiBoYW5kbGluZyBpdCBleHBsaWNpdGx5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTk5OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpfemVyb19wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIwMDktI2lmbmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMDEwOnN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDExLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDg6NTA6MjkuODA4MzMwNzlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzODA2ODY3NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHBtZF90cmFuc19odWdlYCBEZWZpbml0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgY29kZSdzIHBvaW50aW5nIG1lIGRpcmVjdGx5IHRvIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAsIHNwZWNpZmljYWxseSBsaW5lIDIwMTAuIFJpZ2h0LCBgcG1kX3RyYW5zX2h1Z2VgLiBPa2F5LCBzbyBpdCdzIHNldHRpbmcgdXAgdGhlIHJldHVybiB2YWx1ZS4gQW5kIHdoYXQgYW0gSSBsb29raW5nIGF0PyAqSWYqIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbid0IHNldCBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uLi50aGVuIHRoZSBmdW5jdGlvbiBgcG1kX3RyYW5zX2h1Z2VgIHJldHVybnMgMC4gVGhhdOKAmXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZS4gQSBzdHJhaWdodGZvcndhcmQgYW5kIGV4cGVjdGVkIGNvbmRpdGlvbmFsIGRlZmluaXRpb24uIE5vdGhpbmcgcGFydGljdWxhcmx5IGdyb3VuZGJyZWFraW5nLCBidXQgdml0YWwuIEl0J3MgYSBxdWljaywgY2xlYXIgd2F5IG9mIGRpc2FibGluZyBodWdlIHBhZ2Ugc3VwcG9ydCBhdCB0aGUgcGFnZSB0YWJsZSBsZXZlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo1MDo0MS4xODkwMTk4MjhaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGd0YWJsZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMDUsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMDU6XFx0I2VuZGlmIC8qIF9fSEFWRV9DT0xPUl9aRVJPX1BBR0UgKi9cXG4yMDA2OlxcdFxcbjIwMDc6XFx0I2lmZGVmIENPTkZJR19NTVVcXG4yMDA4OlxcdFxcbjIwMDk6XFx0I2lmbmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4yMDEwOlxcdHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG4yMDExOlxcdHtcXG4yMDEyOlxcdFxcdHJldHVybiAwO1xcbjIwMTM6XFx0fVxcbjIwMTQ6XFx0I2lmbmRlZiBwbWRfd3JpdGVcXG4yMDE1OlxcdHN0YXRpYyBpbmxpbmUgaW50IHBtZF93cml0ZShwbWRfdCBwbWQpXFxuMjAxNjpcXHR7XFxuMjAxNzpcXHRcXHRCVUcoKTtcXG4yMDE4OlxcdFxcdHJldHVybiAwO1xcbjIwMTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwODo1MDo0MS4xODkyMzg3NzhaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgxNjkzNjI1OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCdWlsZCBGaXggZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0J3MgY3J5c3RhbCBjbGVhciB0aGF0IGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzbid0IGVuYWJsZWQsIHRoZW4gYHBtZF90cmFuc19odWdlYCBpcyBhbHdheXMgemVybywgYW5kIGB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZGAgaXMgYWx3YXlzIGZhbHNlLiBUaGVyZWZvcmUsIHRoZSBjb25kaXRpb25hbCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgc3BlY2lmaWNhbGx5IHRoZSBgaWZgIHN0YXRlbWVudCBpbnZvbHZpbmcgYHBtZF90cmFuc19odWdlYCBhbmQgYHBtZF9pc19taWdyYXRpb25fZW50cnlgLCBpcyBhIGRlYWQgZW5kLiBUaGUgYGNoZWNrX3BtZGAgcGF0aCB3aWxsIG5ldmVyIGJlIGV4ZWN1dGVkIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMuIFNvLCB0aGlzIHBhdGNoIGlzIHNpbXBseSBhIGRlZmVuc2l2ZSBtZWFzdXJlLCBhIGJ1aWxkIGZpeCB0byBwcmV2ZW50IGBIUEFHRV9QTURfTlJgIGZyb20gdHJpZ2dlcmluZyBhIGBCVUlMRF9CVUcoKWAgd2hlbiBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYXJlIGRpc2FibGVkLiBJdCdzIHN0cmljdGx5IGEgY29tcGlsZS10aW1lIHNhZmVndWFyZDsgdGhlcmUncyB6ZXJvIGltcGFjdCBvbiBhbnkgcmVhY2hhYmxlIGNvZGUgcGF0aHMuIE15IGZpbmFsIGNvbmNsdXNpb24/IFRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZzogZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTIxLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA4OjUwOjU5LjM1ODYwMzQ3NFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYW4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhcm91bmQgY2hlY2tfcG1kKCkgdG8gZml4IGEgYnVpbGQgZXJyb3Igd2hlbiBUSFAgaXMgZGlzYWJsZWQuIFdoZW4gVEhQIGlzIGRpc2FibGVkLCBjaGVja19wbWQoKSBpcyBuZXZlciByZWFjaGVkIGluIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgYmVjYXVzZSBwbWRfdHJhbnNfaHVnZSgpIGFuZCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIGJvdGggcmV0dXJuIGZhbHNlLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseS4gVGh1cywgdGhpcyBpcyBwdXJlbHkgYSBidWlsZCBmaXggd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYXJvdW5kIGNoZWNrX3BtZCgpIHRvIGZpeCBhIGJ1aWxkIGVycm9yIHdoZW4gVEhQIGlzIGRpc2FibGVkLiBXaGVuIFRIUCBpcyBkaXNhYmxlZCwgY2hlY2tfcG1kKCkgaXMgbmV2ZXIgcmVhY2hlZCBpbiBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGJlY2F1c2UgcG1kX3RyYW5zX2h1Z2UoKSBhbmQgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBib3RoIHJldHVybiBmYWxzZSwgY2F1c2luZyB0aGUgZnVuY3Rpb24gdG8gYmFpbCBvdXQgZWFybHkuIFRodXMsIHRoaXMgaXMgcHVyZWx5IGEgYnVpbGQgZml4IHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowswc89[1] Phase: Running StartedAt: 2026-06-24 08:51:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswc89[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-24 08:51:10 +0000 UTC FinishedAt: 2026-06-24 08:51:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}