Name: series-workflowlg5fg Phase: Failed StartedAt: 2026-06-23 18:30:39 +0000 UTC FinishedAt: 2026-06-23 18:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg5fg[0] Phase: Succeeded StartedAt: 2026-06-23 18:30:39 +0000 UTC FinishedAt: 2026-06-23 18:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg5fg[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 18:30:39 +0000 UTC FinishedAt: 2026-06-23 18:45:26 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcGFudGhvcmAgRFJNIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZXF1aXJlcyByZWFkaW5nIGEgdmFsaWQgR1BVX0lEIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiB0aGUgR0VNIGZhdWx0IGhhbmRsZXIgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODNjZjcxZmU3NzZiYTEyOWZkNDcwNjRkNjcyNTUxNTliNjljNjZlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDE4OjQyOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNTQ1MzViYWUyYjBjZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5AQCAtODAyLDkgJiM0Mzs4MDIsMTMgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHBcbiBcdH0gZWxzZSBpZiAob3JkZXIgPT0gUE1EX09SREVSKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGFkZHIgPSBwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gQUxJR05fRE9XTih2bWYtXHUwMDNlYWRkcmVzcywgUE1EX1NJWkUpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCAmIzQzOyBQTURfU0laRTtcbiYjNDM7XHRcdGJvb2wgaW5fcmFuZ2UgPSB2bWEtXHUwMDNldm1fc3RhcnQgXHUwMDNjPSBzdGFydCBcdTAwMjZcdTAwMjYgZW5kIFx1MDAzYz0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcdFx0Ym9vbCBhbGlnbmVkID0gKHZtZi1cdTAwM2VhZGRyZXNzIFx1MDAyNiB+UE1EX01BU0spID09IChwYWRkciBcdTAwMjYgflBNRF9NQVNLKTtcbiBcbi1cdFx0aWYgKGFsaWduZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoYWxpZ25lZCBcdTAwMjZcdTAwMjYgaW5fcmFuZ2UgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShwYWdlX2ZvbGlvKHBhZ2UpKSkge1xuIFx0XHRcdHBmbiBcdTAwMjY9IFBNRF9NQVNLIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRcdHJldHVybiB2bWZfaW5zZXJ0X3Bmbl9wbWQodm1mLCBwZm4sIHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlcXVpcmVzIHJlYWRpbmcgYSB2YWxpZCBHUFVfSUQgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGluIHRoZSBHRU0gZmF1bHQgaGFuZGxlciBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAxODo0Mjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jCmluZGV4IGExZTJlYjFjYTdiYmU2Li41NDUzNWJhZTJiMGNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jCkBAIC04MDIsOSAmIzQzOzgwMiwxMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3QgcAogCX0gZWxzZSBpZiAob3JkZXIgPT0gUE1EX09SREVSKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiAJCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBwZm4gJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gQUxJR05fRE9XTih2bWYtJmd0O2FkZHJlc3MsIFBNRF9TSVpFKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgJiM0MzsgUE1EX1NJWkU7CiYjNDM7CQlib29sIGluX3JhbmdlID0gdm1hLSZndDt2bV9zdGFydCAmbHQ7PSBzdGFydCAmYW1wOyZhbXA7IGVuZCAmbHQ7PSB2bWEtJmd0O3ZtX2VuZDsKIAkJYm9vbCBhbGlnbmVkID0gKHZtZi0mZ3Q7YWRkcmVzcyAmYW1wOyB+UE1EX01BU0spID09IChwYWRkciAmYW1wOyB+UE1EX01BU0spOwogCi0JCWlmIChhbGlnbmVkICZhbXA7JmFtcDsKJiM0MzsJCWlmIChhbGlnbmVkICZhbXA7JmFtcDsgaW5fcmFuZ2UgJmFtcDsmYW1wOwogCQkgICAgZm9saW9fdGVzdF9wbWRfbWFwcGFibGUocGFnZV9mb2xpbyhwYWdlKSkpIHsKIAkJCXBmbiAmYW1wOz0gUE1EX01BU0sgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJCXJldHVybiB2bWZfaW5zZXJ0X3Bmbl9wbWQodm1mLCBwZm4sIHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZSBjaGFuZ2UuCgoqKlBhbnRob3IgR0VNIEluc2VydCBQYWdlIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgZm9jdXNlZCBvbiBgZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uY2AuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbiBoaXRzIHRoZSBgaW5zZXJ0X3BhZ2VgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgYSBuZXcgY2hlY2ssIGBpbl9yYW5nZWAuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgZW5mb3JjaW5nIGEgbW9yZSBzdHJpbmdlbnQgY29uc3RyYWludC4gVGhpcyBgaW5fcmFuZ2VgIHRlc3QgaXMgdGhlcmUgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlIFBhZ2UgTWFwIERpcmVjdG9yeSAoUE1EKSBlbnRyeSB0aGF0JiMzOTtzIGJlaW5nIGluc2VydGVkIGFsaWducyBwZXJmZWN0bHkgd2l0aGluIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHJhbmdlLgoKU28sIHRoaXMgaXMgYSBwcmV0dHkgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgdGhlIGxvZ2ljIGFyb3VuZCBtZW1vcnkgbWFwcGluZywgcHJvYmFibHkgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgcG90ZW50aWFsIGlzc3VlIOKAkyBtYXliZSBhIGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eSBvciBzb21lIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW0uCgpNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGF0IGNvbmZpZyBvcHRpb24gYWN0aXZhdGVzIHRoZSBgcGFudGhvcmAgZHJpdmVyIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBoYXZlIHRvIGZpbmQgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBlbmFibGVzIHRoZSBiZWhhdmlvciBiZWluZyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmb2xsb3ctdXAgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERSTV9QQU5USE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnLTItXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnOjM6Y29uZmlnIERSTV9QQU5USE9SXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtQYW50aG9yIChEUk0gc3VwcG9ydCBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFJNX1BBTlRIT1IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBEUk1fUEFOVEhPUmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IGludGVyYWN0IHdpdGggdGhpcz8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGZ1bGwgY29udGV4dC4gVG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWcgaW5mbHVlbmNlcyB0aGUga2VybmVsJiMzOTtzIERSTSBpbXBsZW1lbnRhdGlvbiwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgaW50byBgZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24gYGluc2VydF9wYWdlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbnNlcnRfcGFnZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGZsb3cgaW50ZXJhY3RzIHdpdGggdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zZXJ0X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9Nzg2PXN0YXRpYyBlbnVtIGRybV9nZW1fb2JqZWN0X3N0YXR1cyBwYW50aG9yX2dlbV9zdGF0dXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy03OTYtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjc5NzpzdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtNzk4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTgyMj1zdGF0aWMgdm1fZmF1bHRfdCBub25ibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODMzLVx0aWYgKGJvLVx1MDAzZWJhY2tpbmcucGFnZXMpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjgzNDpcdFx0cmV0ID0gaW5zZXJ0X3BhZ2Uodm1mLCBvcmRlciwgYm8tXHUwMDNlYmFja2luZy5wYWdlc1twYWdlX29mZnNldF0pO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04MzUtXHRlbHNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz04NDI9c3RhdGljIHZtX2ZhdWx0X3QgYmxvY2tpbmdfcGFnZV9zZXR1cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODY2LVx0XHRpZiAobW1hcF9sb2NrX2hlbGQpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg2NzpcdFx0XHRyZXQgPSBpbnNlcnRfcGFnZSh2bWYsIG9yZGVyLCBwYWdlKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODY4LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgUm9vdCBvZiBgaW5zZXJ0X3BhZ2VgIENhbGxzKioKCk9rYXksIHNvIGBpbnNlcnRfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGUgdGV4dCB0ZWxscyBtZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBub25ibG9ja2luZ19wYWdlX3NldHVwYCBhbmQgYGJsb2NraW5nX3BhZ2Vfc2V0dXBgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlICpleGFjdCogY2FsbCBzaXRlcyBvZiAqdGhvc2UqIHR3byBmdW5jdGlvbnMsIHRvIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCBgaW5zZXJ0X3BhZ2VgIGlzIGdldHRpbmcgdXRpbGl6ZWQuIEZpbmRpbmcgdGhlIGNhbGwgbG9jYXRpb25zIG9mIGBub25ibG9ja2luZ19wYWdlX3NldHVwYCBhbmQgYGJsb2NraW5nX3BhZ2Vfc2V0dXBgIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb24uIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWxseSBleHBvc2UgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsobm9uYmxvY2tpbmdfcGFnZV9zZXR1cHxibG9ja2luZ19wYWdlX3NldHVwKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz03OTc9c3RhdGljIHZtX2ZhdWx0X3QgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04MjEtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjgyMjpzdGF0aWMgdm1fZmF1bHRfdCBub25ibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04MjMtXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NDEtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg0MjpzdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTg0My1cdFx0XHRcdCAgICAgIHN0cnVjdCBwYW50aG9yX2dlbV9vYmplY3QgKmJvLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9ODc3PXN0YXRpYyB2bV9mYXVsdF90IHBhbnRob3JfZ2VtX2FueV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODkyLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo4OTM6XHRyZXQgPSBub25ibG9ja2luZ19wYWdlX3NldHVwKHZtZiwgb3JkZXIsIHBhZ2Vfb2Zmc2V0KTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODk0LVx0aWYgKHJldCAhPSBWTV9GQVVMVF9SRVRSWSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkxMy1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTE0Olx0XHRyZXQgPSBibG9ja2luZ19wYWdlX3NldHVwKHZtZiwgb3JkZXIsIGJvLCBwYWdlX29mZnNldCwgZmFsc2UpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MTUtXHRcdGRybV9nZW1fb2JqZWN0X3B1dChcdTAwMjZiby1cdTAwM2ViYXNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkxOC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTE5Olx0cmV0dXJuIGJsb2NraW5nX3BhZ2Vfc2V0dXAodm1mLCBvcmRlciwgYm8sIHBhZ2Vfb2Zmc2V0LCB0cnVlKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTIwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTU0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBvZiBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCoqCgpSaWdodCwgYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAganVzdCBnb3QgdHJpZ2dlcmVkLiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGNoZWNrbGlzdC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHNvbWUga2luZCBvZiBmYXVsdCBjb25kaXRpb24gd2l0aGluIGEgUGFudGhvci1iYXNlZCBHZW0gc3lzdGVtLiBUaGUgJiMzNDthbnkmIzM0OyBzdWdnZXN0cyBhIGJyb2FkLCBjYXRjaC1hbGwgdHlwZSBvZiBlcnJvciBkZXRlY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hhdCB0cmlnZ2VyZWQgdGhlIGNhbGwgYW5kIHdoYXQgY29udGV4dCBJIGhhdmUgYXZhaWxhYmxlLiBJcyB0aGlzIGEgc3lzdGVtLWxldmVsIGZhdWx0LCBhIGNvbXBvbmVudC1zcGVjaWZpYyBlcnJvciwgb3Igc29tZXRoaW5nIG1vcmUgdHJhbnNpZW50PwoKVGhlIG5hbWUgaXRzZWxmLCAqYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAqLCBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBnZW5lcmljIGZhdWx0IHdpdGhpbiB0aGUgUGFudGhvciBzdWJzeXN0ZW0uIEl0JiMzOTtzIG5vdCB0YXJnZXRpbmcgYSBzcGVjaWZpYyBnZW0sIGJ1dCBhIGZhdWx0IGFmZmVjdGluZyBhbnkgZ2VtIGluIHRoZSBzeXN0ZW0uIFRoZSBuZXh0IHRoaW5nIEkmIzM5O2Qgd2FudCB0byBrbm93IGlzIHdoaWNoIGdlbSwgb3Igd2hpY2ggbW9kdWxlIHdpdGhpbiBQYW50aG9yLCBpcyB0aGUgc291cmNlLiBUaGUgZGV0YWlscyB3aWxsIGJlIGNydWNpYWwgaW4gcGlucG9pbnRpbmcgdGhlIHJvb3QgY2F1c2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBpbXByb3BlciBjb25maWd1cmF0aW9uLCBpbmNvcnJlY3QgZGF0YSBmcm9tIGV4dGVybmFsIHNvdXJjZXMsIG9yIGV2ZW4gYSBoYXJkd2FyZSBpc3N1ZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN5c3RlbSBsb2dzIGFuZCBhbnkgZXJyb3IgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIHByb3ZpZGVkIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGRldGVybWluZSB3aGVyZSB0aGUgbG9naWMgbWlnaHQgYmUgYnJlYWtpbmcgZG93bi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZXJyb3IgaXMgZHVlIHRvIGFuIGludGVybWl0dGVudCBmYXVsdCwgb3IgYSByZXByb2R1Y2libGUgb25lLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvcl9nZW1fYW55X2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NzYtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg3NzpzdGF0aWMgdm1fZmF1bHRfdCBwYW50aG9yX2dlbV9hbnlfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcilcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODc4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTkyMj1zdGF0aWMgdm1fZmF1bHRfdCBwYW50aG9yX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTIzLXtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTI0Olx0cmV0dXJuIHBhbnRob3JfZ2VtX2FueV9mYXVsdCh2bWYsIDApO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MjUtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9OTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGFudGhvcl9nZW1fdm1fb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTYxLSNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjk2MjpcdC5odWdlX2ZhdWx0ID0gcGFudGhvcl9nZW1fYW55X2ZhdWx0LFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05NjMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFBhbnRob3IgR1BVIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmYXVsdCBoYW5kbGVycywgYHBhbnRob3JfZ2VtX2ZhdWx0YCBhbmQgYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAsIHdoaWNoIHNlZW0gdG8gYmUgc3BlY2lmaWMgdG8gdGhlIEdFTSBvYmplY3Qgd2l0aGluIHRoaXMgYHBhbnRob3JgIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYG1tYXBgIG9mIHRoZSBEUk0gZGV2aWNlLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIEkgZXZlbiByZWFjaCBgcGFudGhvcmAgd2l0aGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPwoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVIGRyaXZlciwgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgZnV6emFibGUuIEZvcnR1bmF0ZWx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciB2aXJ0dWFsIERSTSBkcml2ZXJzLCBtZWFuaW5nIEkgc2hvdWxkIGJlIGFibGUgdG8gZnV6eiBgcGFudGhvcmAgdmlhIERSTSBpb2N0bHMgb3IgYG1tYXBgLiBFdmVuIGlmIHRoaXMgaXMgYSByZWFsIGhhcmR3YXJlIGRyaXZlciwgc3l6a2FsbGVyIGNvdWxkIHBvdGVudGlhbGx5IGhhbmRsZSBpdCB1c2luZyB2Z2VtLCBtb2NrIGRldmljZXMsIG9yIGJ5IGp1c3Qgb3BlbmluZyBgL2Rldi9kcmkvcmVuZGVyRCpgLCBhc3N1bWluZyB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCBvciBpdCBjYW4gaW5pdGlhbGl6ZSB3aXRob3V0IGl0LiBIb3dldmVyLCBpZiBpdCYjMzk7cyBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyLCBpdCBtaWdodCBub3QgcHJvYmUgcHJvcGVybHkgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgaHVyZGxlLgoKVGhpbmtpbmcgZnVydGhlciwgc3l6a2FsbGVyIGhhcyBmdW5jdGlvbnMgZm9yIFVTQiBhbmQgODAyLjExLCBzbyBwZXJoYXBzIGl0IGhhcyBzaW1pbGFyIHRyaWNrcyBmb3IgRFJNLiBUaGUgYHZrbXNgIGRyaXZlciBpcyB2aXJ0dWFsLCBidXQgdGhpcyBgcGFudGhvcmAgZHJpdmVyIGlzIGZvciByZWFsIGhhcmR3YXJlLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiBjYW4gSSByZWFjaCBgcGFudGhvcl9nZW1fZmF1bHRgIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50PwoKR2VuZXJhbGx5LCBJIGtub3cgdGhhdCB0byBgbW1hcGAgYSBHRU0gb2JqZWN0LCBJIHdvdWxkIGZpcnN0IG5lZWQgdG8gY3JlYXRlIGl0LiBBbmQgdG8gY3JlYXRlIGl0LCBJJiMzOTtkIG5lZWQgdG8gb3BlbiB0aGUgRFJNIGRldmljZS4gSWYgdGhlIERSTSBkZXZpY2UgZG9lc24mIzM5O3QgZXhpc3QsIEkmIzM5O20gc3R1Y2suIEhvd2V2ZXIsIHN5emthbGxlciBtaWdodCBoYXZlIHNvbWUgY2xldmVyIHdheSBhcm91bmQgdGhpcywgb3IgbWF5YmUgaXQmIzM5O3MgYmVpbmcgZnV6emVkIG9uIHJlYWwgaGFyZHdhcmUuCgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcm9tcHQgd2hpY2ggc3BlY2lmaWVzIHRoYXQgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0Oy4gSXMgYHBhbnRob3JgIG9uZSBvZiB0aG9zZSBpbXBvc3NpYmxlIGNhc2VzPwoKV2FpdCwgc2luY2UgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIGl0IGxpa2VseSBkZXBlbmRzIG9uIGEgZGV2aWNlIHRyZWUgbm9kZSB0byBwcm9iZSBwcm9wZXJseS4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgcHJvYmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2JlIG1lY2hhbmlzbSB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHZpcnR1YWxpemFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXIuIEhlcmUmIzM5O3MgbXkgdGFrZToKCioqQ2hlY2tpbmcgdGhlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgYXJlIGluIHBsYWNlLiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIHByb3BlciByZWdpc3RyYXRpb24sIGRvZXNuJiMzOTt0IGl0PyBJZiB0aGUgaW5pdGlhbCBzZXR1cCBpc24mIzM5O3Qgc291bmQsIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIGFjdGlvbiBpcyBsaWtlbHkgdG8gYmUgZmxhd2VkLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaG93IHRoaXMgY29tcG9uZW50LCBwcm9jZXNzLCBvciB3aGF0ZXZlciB0aGUgc3ViamVjdCBpcywgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgcHJvcGVybHkgZG9jdW1lbnRlZD8gQXJlIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseSBkZWZpbmVkPyBJcyB0aGVyZSBhIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBJIGNhbiBjaGVjaywgb3IgZG8gSSBuZWVkIHRvIHRyYWNlIGl0IHRocm91Z2ggbXVsdGlwbGUgbW9kdWxlcz8gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgcXVpY2sgYXVkaXQgb2YgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZWR1cmUgaXRzZWxmLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjcml0aWNhbCBzdGVwIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0fHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE5MDY9c3RhdGljIGludCBfX2luaXQgcGFudGhvcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxOTIxOlx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnBhbnRob3JfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTMzLX1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTkzNDptb2R1bGVfaW5pdChwYW50aG9yX2luaXQpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlhYmlsaXR5IG9mIEZ1enppbmcgYSBQbGF0Zm9ybSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGFuZCB0aGUgaW1tZWRpYXRlIHRob3VnaHQgaXM6IHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEluIHRoZSB1c3VhbCBHQ0UvUUVNVSBzZXR1cCwgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgbW9jayBvciBhIHdlbGwtY3JhZnRlZCBkZXZpY2UgdHJlZSBvdmVybGF5LCB0aGVzZSBBUk0gTWFsaSBHUFUgcGxhdGZvcm0gZHJpdmVycyBhcmUganVzdCBub3QgZ29pbmcgdG8gcHJvYmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgb25lIGlzIGFuIGV4Y2VwdGlvbi4KCk5vdywgd2FpdC4uLiBkb2VzIFN5emthbGxlciBoYXZlIHNvbWUgdHJpY2sgdXAgaXRzIHNsZWV2ZSB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcywgbWF5YmUgc29tZXRoaW5nIHdpdGggYHN5el9kZXZmcmVxX2FkZF9kZXZpY2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBObywgSSBkb24mIzM5O3QgdGhpbmsgaXQgZG9lcy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSAqZ2VuZXJpYyogd2F5IHRvIHByb2JlIGFyYml0cmFyeSBwbGF0Zm9ybSBkcml2ZXJzIHVubGVzcyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHN1cHBvcnRlZCwgbGlrZSB3aXRoIGB2a21zYC4KCk9oLCB3YWl0IGEgc2Vjb25kLCBJIHJlbWVtYmVyIGBzeXpfaW5pdF9uZXRfc29ja2V0YCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYWRkIGRldmljZXMhCgpPa2F5LCBzbyB3aGF0IGFib3V0IHRoaXMgc3BlY2lmaWMgZHJpdmVyLCBgcGFudGhvcmAsIGlzIFN5emthbGxlciBhbHJlYWR5IGZ1enppbmcgaXQ/IEkgbmVlZCB0byBjaGVjay4KCk9rYXksIHRoZSBjb21taXQgbWVzc2FnZSBzYXlzOgpgYGAKY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAxODo0Mjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwpgYGAKVGhpcyBsb29rcyBsaWtlIFN5emthbGxlciBpcyB0ZXN0aW5nIGEgcGF0Y2gsIHJpZ2h0PyBTbywgbWF5YmUgdGhhdCBtZWFucyBpdCYjMzk7cyByZWFjaGFibGU/IE9yIGlzIGl0IHNpbXBseSBhIHN1Ym1pdHRlZCBwYXRjaCB0aGF0JiMzOTtzIGJlaW5nIHRlc3RlZCBhbmQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IHZhbHVlIGluIGZ1enppbmcgaXQ/CgpJZiB0aGlzIGlzIGFuIEFSTSBNYWxpIEdQVSBkcml2ZXIsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgaXQmIzM5O3Mgb25seSBnb2luZyB0byBiZSByZWFjaGFibGUgb24gQVJNIGhhcmR3YXJlLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2YgbW9jayBvciBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uLgoKT2theSwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgbW9jayBmb3IgYHBhbnRob3JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYERSTV9QQU5USE9SYCBmbGFnIG1lbnRpb25lZCBpbiByZWxhdGlvbiB0byBzeXprYWxsZXIsIGJ1dCBJIGRvbiYjMzk7dCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhvc2UgZGVzY3JpcHRpb25zLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBCdXQsIHRoZSBwcm9tcHQgaXMga2V5OiBpdCYjMzk7cyBmb2N1c2luZyBvbiBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb25zIG9mIGhhcmR3YXJlLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGVydGFpbiB0byBzb21ldGhpbmcgbGlrZSBgRFJNX1BBTlRIT1JgPwoKSWYgdGhpcyBmbGFnIHJlbGF0ZXMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIsIGVzcGVjaWFsbHkgZm9yIGFuIFNvQyBvciBHUFUsIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0byBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCB4ODYgUUVNVSBvciBHQ0Ugc2V0dXAgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRvciBhdmFpbGFibGUsIHdoaWNoIGlzIHVubGlrZWx5IGZvciBzb21ldGhpbmcgbGlrZSBBUk0gTWFsaSBDU0YgKGFzIHRoZXJlIGlzIG5vIGVtdWxhdG9yIHVwc3RyZWFtKS4gVGh1cywgdGhlIHF1ZXN0aW9uIGlzIG5vdzogQ2FuIGl0IGJlIGFjY2Vzc2VkIHZpYSBhIGdlbmVyaWMgbWVjaGFuaXNtPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYW50aG9yX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4ODI9c3RhdGljIERFRklORV9SVU5USU1FX0RFVl9QTV9PUFMocGFudGhvcl9wbV9vcHMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODg2LVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxODg3OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhbnRob3JfZHJpdmVyID0ge1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODg4LVx0LnByb2JlID0gcGFudGhvcl9wcm9iZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE5MDY9c3RhdGljIGludCBfX2luaXQgcGFudGhvcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxOTIxOlx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnBhbnRob3JfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xOTM2PXN0YXRpYyB2b2lkIF9fZXhpdCBwYW50aG9yX2V4aXQodm9pZClcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkzNy17XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE5Mzg6XHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZwYW50aG9yX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE5MzktXHRkZXN0cm95X3dvcmtxdWV1ZShwYW50aG9yX2NsZWFudXBfd3EpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgcGFudGhvcl9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBwYW50aG9yX3Byb2JlYCB0aGluZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBiZXlvbmQgYSBzdXBlcmZpY2lhbCBzY2FuLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdDogRG9lcyB0aGUgbmFtZSBpdHNlbGYgb2ZmZXIgYW55IGNsdWVzPyBJcyBpdCBpbmRpY2F0aXZlIG9mIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgb3IgbWV0aG9kb2xvZ3k/IEkgbmVlZCB0byB0aGluayBhYm91dCB3aGF0ICYjMzQ7cHJvYmUmIzM0OyBpbXBsaWVzIGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBkaWFnbm9zdGljIHRvb2wsIGEgZGF0YSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgb3Igc29tZXRoaW5nIG1vcmUgbmVmYXJpb3VzPyBLbm93aW5nIHRoZSBlbnZpcm9ubWVudCBpdCYjMzk7cyBvcGVyYXRpbmcgaW4gaXMga2V5IOKAkyB0aGUgcGxhdGZvcm0sIHRoZSB0YXJnZXQgc3lzdGVtLCB0aGUgYXNzb2NpYXRlZCBzZWN1cml0eSBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgaXQgYWN0aW5nIGluIGEgYmVuaWduIHdheSwgb3IgaXMgdGhlcmUgYSBjaGFuY2UgaXQgaGFzIG90aGVyLCBsZXNzIG9idmlvdXMgcHVycG9zZXM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGdldCB0byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvcl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4MDc9TU9EVUxFX1BBUk1fREVTQyh0cmFuc3BhcmVudF9odWdlcGFnZSwgXCYjMzQ7VXNlIGEgZGVkaWNhdGVkIHRtcGZzIG1vdW50IHBvaW50IHdpdGggVHJhbnNwYXJlbnQgSHVnZXBhZ2UgZW5hYmxlZCAodHJ1ZSA9IGRlZmF1bHQpXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MDktXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE4MTA6c3RhdGljIGludCBwYW50aG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MTEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM9MTg4Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYW50aG9yX2RyaXZlciA9IHtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTg4ODpcdC5wcm9iZSA9IHBhbnRob3JfcHJvYmUsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4ODktXHQucmVtb3ZlID0gcGFudGhvcl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBVbmRlcnN0YW5kaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBUaGUgY29tbWFuZCBgcGFudGhvcl9wcm9iZWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZSBhbmQgZnVuY3Rpb24gYmVmb3JlIEkgY2FuIHByb2NlZWQuIE5vIHBvaW50IGp1bXBpbmcgaW4gYmxpbmRseSDigJMgSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoaXMgdG9vbCBpcyBzdXBwb3NlZCB0byBiZSBkb2luZy4gV2hhdCBkb2VzIGl0IG1lYXN1cmU/IFdoYXQgZGF0YSBkb2VzIGl0IG91dHB1dD8gV2hhdCBzeXN0ZW1zIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gVGhpcyBpbml0aWFsIHByb2JlIGlzIGNydWNpYWwgZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MTA6XHRzdGF0aWMgaW50IHBhbnRob3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjE4MTE6XHR7XG4xODEyOlx0XHRzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2O1xuMTgxMzpcdFxuMTgxNDpcdFx0cHRkZXYgPSBkZXZtX2RybV9kZXZfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNnBhbnRob3JfZHJtX2RyaXZlcixcbjE4MTU6XHRcdFx0XHRcdCAgIHN0cnVjdCBwYW50aG9yX2RldmljZSwgYmFzZSk7XG4xODE2Olx0XHRpZiAoSVNfRVJSKHB0ZGV2KSlcbjE4MTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODE4Olx0XG4xODE5Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwdGRldik7XG4xODIwOlx0XG4xODIxOlx0XHRyZXR1cm4gcGFudGhvcl9kZXZpY2VfaW5pdChwdGRldik7XG4xODIyOlx0fVxuMTgyMzpcdFxuMTgyNDpcdHN0YXRpYyB2b2lkIHBhbnRob3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4xODI1Olx0e1xuMTgyNjpcdFx0c3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuMTgyNzpcdFxuMTgyODpcdFx0cGFudGhvcl9kZXZpY2VfdW5wbHVnKHB0ZGV2KTtcbjE4Mjk6XHR9XG4xODMwOlx0XG4xODMxOlx0c3RhdGljIHNzaXplX3QgcHJvZmlsaW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuMTgzMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTgzMzpcdFx0XHRcdCAgICAgIGNoYXIgKmJ1ZilcbjE4MzQ6XHR7XG4xODM1Olx0XHRzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xODM2Olx0XG4xODM3Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBwdGRldi1cdTAwM2Vwcm9maWxlX21hc2spO1xuMTgzODpcdH1cbjE4Mzk6XHRcbjE4NDA6XHRzdGF0aWMgc3NpemVfdCBwcm9maWxpbmdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuMTg0MTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbjE4NDI6XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMTg0MzpcdHtcbjE4NDQ6XHRcdHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbjE4NDU6XHRcdHUzMiB2YWx1ZTtcbjE4NDY6XHRcdGludCBlcnI7XG4xODQ3Olx0XG4xODQ4Olx0XHRlcnIgPSBrc3RydG91MzIoYnVmLCAwLCBcdTAwMjZ2YWx1ZSk7XG4xODQ5Olx0XHRpZiAoZXJyKVxuMTg1MDpcdFx0XHRyZXR1cm4gZXJyO1xuMTg1MTpcdFxuMTg1MjpcdFx0aWYgKCh2YWx1ZSBcdTAwMjYgflBBTlRIT1JfREVWSUNFX1BST0ZJTElOR19BTEwpICE9IDApXG4xODUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg1NDpcdFxuMTg1NTpcdFx0cHRkZXYtXHUwMDNlcHJvZmlsZV9tYXNrID0gdmFsdWU7XG4xODU2Olx0XG4xODU3Olx0XHRyZXR1cm4gbGVuO1xuMTg1ODpcdH1cbjE4NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBhbnRob3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpc3NlY3RpbmcgdGhlIFBhbnRob3IgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIGBwYW50aG9yX2RldmljZV9pbml0YC4uLiBteSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdG8gYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBkZXZpY2UgaXMgdGhpcz8gSXMgaXQgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcj8gQSBzcGVjaWZpYyBkcml2ZXI/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBjcmVhdGluZyBhIGZsb3djaGFydCwgY29uc2lkZXJpbmcgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbiBwaXRmYWxscyBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb246IGVycm9yIGhhbmRsaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgaG93IHRob3NlIGFyZSBhZGRyZXNzZWQuCgpJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbG93LWxldmVsIHN0ZXBzIHJlcXVpcmVkIHRvIGJyaW5nIGEgJiMzNDtQYW50aG9yJiMzNDsgZGV2aWNlIG9ubGluZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBsaWtlbHkgb3BlcmF0aW9uczogcG93ZXItdXAgc2VxdWVuY2luZywgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiwgaW50ZXJydXB0IHNldHVwLCBtYXliZSBzb21lIGhhcmR3YXJlIHRlc3RpbmcsIGFuZCBlcnJvciBjb2RlIGNoZWNrcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBhbmQgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggb3RoZXIgc3lzdGVtIHNlcnZpY2VzIGxpa2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIG9yIHBvd2VyIG1hbmFnZW1lbnQuCgpBIHdlbGwtd3JpdHRlbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBjb25zaWRlciBwb3dlci1zYXZpbmcsIHBvdGVudGlhbGx5IGVuYWJsaW5nIGRldmljZS1zcGVjaWZpYyBjbG9ja3MgYW5kIHBvd2VyIGRvbWFpbnMgb25seSB3aGVuIG5lY2Vzc2FyeS4gSXQgcHJvYmFibHkgaW5jbHVkZXMgYSByb2J1c3QgZXJyb3ItY2hlY2tpbmcgbWVjaGFuaXNtIHdpdGggY2xlYXIgbG9nZ2luZyBmb3IgZGVidWdnaW5nLiBJZiBJIHNlZSBhbnkgY3JpdGljYWwgc2VjdGlvbnMsIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGVtIGZvciBwcm9wZXIgbXV0ZXggdXNhZ2Ugb3IgYW55IG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJJiMzOTtsbCBtZW50YWxseSBldmFsdWF0ZSB0aGUgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ3k6IGRvZXMgaXQgcmV0cnksIGxvZyBlcnJvcnMsIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2Rlcywgb3IgdHJpZ2dlciBhIHN5c3RlbSByZXNldD8gSSYjMzk7ZCBleHBlY3QgY29tcHJlaGVuc2l2ZSBsb2dnaW5nIHRvIGFpZCB3aXRoIGRlYnVnZ2luZywgZXNwZWNpYWxseSBkdXJpbmcgZWFybHkgYnJpbmctdXAgb3IgaWYgSSBlbmNvdW50ZXIgZGV2aWNlLXNwZWNpZmljIGlzc3VlcyBsYXRlci4gVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYXJlZnVsbHkgZGVzaWduZWQgdG8gcHJldmVudCBhbnkgZGVhZGxvY2tzIG9yIHN5c3RlbSBpbnN0YWJpbGl0eSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3JfZGV2aWNlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYz0xNjE9c3RhdGljIHZvaWQgcGFudGhvcl9kZXZpY2VfZnJlZV9wYWdlKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMTY1LVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYzoxNjY6aW50IHBhbnRob3JfZGV2aWNlX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMTY3LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTM0Mj1zdHJ1Y3QgcGFudGhvcl9maWxlIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTM3My1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmg6Mzc0OmludCBwYW50aG9yX2RldmljZV9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC0zNzUtdm9pZCBwYW50aG9yX2RldmljZV91bnBsdWcoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldik7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xODEwPXN0YXRpYyBpbnQgcGFudGhvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTgyMC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTgyMTpcdHJldHVybiBwYW50aG9yX2RldmljZV9pbml0KHB0ZGV2KTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTgyMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkRpdmluZyBpbnRvIGBwYW50aG9yX2RldmljZV9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgcGFudGhvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRldmljZSBpcyBiZWluZyBpbml0aWFsaXplZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJha2VkIGluIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciB0aGUgaGlnaC1sZXZlbCBmbG93IOKAkyB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbjoqKiBXaGF0IG1lbW9yeSwgaW50ZXJydXB0IGxpbmVzLCBvciBvdGhlciBoYXJkd2FyZSByZXNvdXJjZXMgYXJlIGNsYWltZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24/IEFueSB1bnVzdWFsIG9yIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGFsbG9jYXRpb25zIGFyZSBvZiBpbW1lZGlhdGUgY29uY2Vybi4KKiAgICoqSGFyZHdhcmUgY29uZmlndXJhdGlvbjoqKiBBcmUgcmVnaXN0ZXJzIGJlaW5nIHdyaXR0ZW4gdG8/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHZhbHVlcyBiZWluZyBzZXQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtYWdpYyBudW1iZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCBkZWVwZXIgY29udGV4dD8KKiAgICoqRHJpdmVyIHJlZ2lzdHJhdGlvbjoqKiBJcyB0aGlzIGNvZGUgaW50ZWdyYXRpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtb2RlbCBpbiBhbnkgd2F5PyBXaGF0JiMzOTtzIHRoZSBpbnRlcmZhY2UgdXNlZCwgYW5kIGRvZXMgaXQgc2VlbSBzdGFuZGFyZCBvciBjdXN0b20/IFdoYXQgY2FsbGJhY2tzIGdldCByZWdpc3RlcmVkLCBhbmQgd2hhdCBhcmUgdGhlaXIgaGFuZGxlcnM/CiogICAqKkVycm9yIGhhbmRsaW5nOioqIElzIHRoaXMgaW5pdGlhbGl6YXRpb24gcm9idXN0PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBmYWlsdXJlIGF0IGVhY2ggc3RlcD8gQXJlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBoYW5kbGVkIGdyYWNlZnVsbHkgb3IgY2FuIHRoZSBkZXZpY2UgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlPwoqICAgKipEZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZHJpdmVycyBvciBtb2R1bGVzPyBXaGVyZSB3aWxsIEkgbG9vayBuZXh0PwoKSSYjMzk7bGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFyZWFzIHdoZXJlIHRoZSBzeXN0ZW0gY2FuIGJlIGJsb2NrZWQgYnkgSS9PLCBhcyB0aGlzIGlzIGFsd2F5cyBhIHNvdXJjZSBvZiBlcnJvcnMgaW4gZGV2aWNlIGRyaXZlcnMuCgpJJiMzOTtsbCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgdGltaW5nIGNvbnNpZGVyYXRpb25zIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGdvb2QgZXhlcmNpc2UgZm9yIGZpbmRpbmcgaGlkZGVuIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NjpcdGludCBwYW50aG9yX2RldmljZV9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXG4gMTY3Olx0e1xuIDE2ODpcdFx0dTMyICpkdW1teV9wYWdlX3ZpcnQ7XG4gMTY5Olx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbiAxNzA6XHRcdHN0cnVjdCBwYWdlICpwO1xuIDE3MTpcdFx0aW50IHJldDtcbiAxNzI6XHRcbiAxNzM6XHRcdHB0ZGV2LVx1MDAzZXNvY19kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKHB0ZGV2LVx1MDAzZWJhc2UuZGV2KTtcbiAxNzQ6XHRcbiAxNzU6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZwdGRldi1cdTAwM2V1bnBsdWcuZG9uZSk7XG4gMTc2Olx0XHRyZXQgPSBkcm1tX211dGV4X2luaXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgXHUwMDI2cHRkZXYtXHUwMDNldW5wbHVnLmxvY2spO1xuIDE3NzpcdFx0aWYgKHJldClcbiAxNzg6XHRcdFx0cmV0dXJuIHJldDtcbiAxNzk6XHRcbiAxODA6XHRcdHJldCA9IGRybW1fbXV0ZXhfaW5pdChcdTAwMjZwdGRldi1cdTAwM2ViYXNlLCBcdTAwMjZwdGRldi1cdTAwM2VwbS5tbWlvX2xvY2spO1xuIDE4MTpcdFx0aWYgKHJldClcbiAxODI6XHRcdFx0cmV0dXJuIHJldDtcbiAxODM6XHRcbiAxODQ6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG4gMTg1Olx0XHRkcm1tX211dGV4X2luaXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgXHUwMDI2cHRkZXYtXHUwMDNlZ2Vtcy5sb2NrKTtcbiAxODY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnB0ZGV2LVx1MDAzZWdlbXMubm9kZSk7XG4gMTg3Olx0I2VuZGlmXG4gMTg4Olx0XG4gMTg5Olx0XHRhdG9taWNfc2V0KFx1MDAyNnB0ZGV2LVx1MDAzZXBtLnN0YXRlLCBQQU5USE9SX0RFVklDRV9QTV9TVEFURV9TVVNQRU5ERUQpO1xuIDE5MDpcdFx0cCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuIDE5MTpcdFx0aWYgKCFwKVxuIDE5MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxOTM6XHRcbiAxOTQ6XHRcdHB0ZGV2LVx1MDAzZXBtLmR1bW15X2xhdGVzdF9mbHVzaCA9IHA7XG4gMTk1Olx0XHRkdW1teV9wYWdlX3ZpcnQgPSBwYWdlX2FkZHJlc3MocCk7XG4gMTk2Olx0XHRyZXQgPSBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgcGFudGhvcl9kZXZpY2VfZnJlZV9wYWdlLFxuIDE5NzpcdFx0XHRcdFx0ICAgICAgIHB0ZGV2LVx1MDAzZXBtLmR1bW15X2xhdGVzdF9mbHVzaCk7XG4gMTk4Olx0XHRpZiAocmV0KVxuIDE5OTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIwMDpcdFxuIDIwMTpcdFx0LypcbiAyMDI6XHRcdCAqIFNldCB0aGUgZHVtbXkgcGFnZSBob2xkaW5nIHRoZSBsYXRlc3QgZmx1c2ggdG8gMS4gVGhpcyB3aWxsIGNhdXNlIHRoZVxuIDIwMzpcdFx0ICogZmx1c2ggdG8gYXZvaWRlZCBhcyB3ZSBrbm93IGl0IGlzbiYjMzk7dCBuZWNlc3NhcnkgaWYgdGhlIHN1Ym1pc3Npb25cbiAyMDQ6XHRcdCAqIGhhcHBlbnMgd2hpbGUgdGhlIGR1bW15IHBhZ2UgaXMgbWFwcGVkLiBaZXJvIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2VcbiAyMDU6XHRcdCAqIHRoYXQgbWVhbnMgJiMzOTthbHdheXMgZmx1c2gmIzM5Oy5cbiAyMDY6XHRcdCAqL1xuIDIwNzpcdFx0KmR1bW15X3BhZ2VfdmlydCA9IDE7XG4gMjA4Olx0XG4gMjA5Olx0XHRJTklUX1dPUksoXHUwMDI2cHRkZXYtXHUwMDNlcmVzZXQud29yaywgcGFudGhvcl9kZXZpY2VfcmVzZXRfd29yayk7XG4gMjEwOlx0XHRwdGRldi1cdTAwM2VyZXNldC53cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwmIzM0O3BhbnRob3ItcmVzZXQtd3FcJiMzNDssIDApO1xuIDIxMTpcdFx0aWYgKCFwdGRldi1cdTAwM2VyZXNldC53cSlcbiAyMTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjEzOlx0XG4gMjE0Olx0XHRyZXQgPSBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgcGFudGhvcl9kZXZpY2VfcmVzZXRfY2xlYW51cCwgTlVMTCk7XG4gMjE1Olx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgRFJNIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGEgdHlwaWNhbCBEUk0gc2V0dXAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZWZmZWN0aXZlbHkgZnV6eiBgcGFudGhvcmAgdXNpbmcgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGludGVyZXN0aW5nIHN5c2NhbGxzIGZvciBkZXZpY2UgbWFuYWdlbWVudCwgbGlrZSBgc3l6X2RldmZyZXFfYWRkX2RldmljZWAsIGJ1dCB0aGF0JiMzOTtzIHJlYWxseSBmb3IgZGV2ZnJlcS4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfODAyMTFfam9pbl9pYnNzYCBmb3IgdGhpbmdzIGxpa2UgVVNCIGFuZCB3aXJlbGVzcy4uLiBidXQgbm90aGluZyBkaXJlY3RseSBmb3IgRFJNIGJleW9uZCB0aGF0IGB2a21zYCB2aXJ0dWFsIHNldHVwLgoKSGFuZyBvbiwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X29wZW5fZGV2YCwgcmlnaHQ/IFdlIGNhbiB1c2UgdGhhdCB0byBvcGVuIGRldmljZXMgbGlrZSBgL2Rldi9kcmkvcmVuZGVyRDEyOGAsIHdoaWNoIGlzIHByb21pc2luZy4gQnV0IGlmIGBwYW50aG9yYCBpc24mIzM5O3QgbG9hZGVkLCBvcGVuaW5nIGl0IHdvbiYjMzk7dCBkbyBhbnl0aGluZy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzLCBjYW4gc3l6a2FsbGVyIHJ1biBvbiBhIGRldmljZSB0aGF0ICpkb2VzKiBoYXZlIGBwYW50aG9yYCBzdXBwb3J0PyBXZSYjMzk7cmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgYW4gQVJNIGJvYXJkIHdpdGggTWFsaSBDU0YuCgpUaGUgcHJvbXB0LCB0aG91Z2gsIHNheXMgdGhlIGNvZGUgcGF0aHMgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gYXJlIG9mdGVuIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBJcyBgcGFudGhvcmAgb25lIG9mIHRob3NlIHVucmVhY2hhYmxlIHBhdGhzPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBBUk0gTWFsaSBDU0YuIFRoZXJlJiMzOTtzIG5vIGVxdWl2YWxlbnQgc29mdHdhcmUgZW11bGF0b3IgaW4gUUVNVSBvciBldmVuIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZiwgbGlrZSB0aGVyZSBpcyBmb3IgYHZrbXNgLgoKSG9sZCBvbiwgbWF5YmUgdGhlcmUmIzM5O3MgYSBtb2NrIG9yIHZpcnR1YWwgZGV2aWNlIHdpdGhpbiB0aGUgYHBhbnRob3JgIGRpcmVjdG9yeS4gTGV0JiMzOTtzIGNoZWNrIGBkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9gIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVyIHRyaWNrZXJ5IHdlIGNhbiBleHBsb2l0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrfHZpcnR1YWx8dmttcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmM9MTIzPXN0cnVjdCBwYW50aG9yX2Z3X2JpbmFyeV9zZWN0aW9uX2VudHJ5X2hkciB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jLTEyNi1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYzoxMjc6XHQvKiogQHZhOiBNQ1UgdmlydHVhbCByYW5nZSB0byBtYXAgdGhpcyBiaW5hcnkgc2VjdGlvbiB0by4gKi9cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy0xMjgtXHRzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYz01Mzk9c3RhdGljIGludCBwYW50aG9yX2Z3X2xvYWRfc2VjdGlvbl9lbnRyeShzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy01NzMtXHRpZiAoIUlTX0FMSUdORUQoaGRyLnZhLnN0YXJ0LCB2bV9wZ3N6KSB8fCAhSVNfQUxJR05FRChoZHIudmEuZW5kLCB2bV9wZ3N6KSkge1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jOjU3NDpcdFx0ZHJtX2VycihcdTAwMjZwdGRldi1cdTAwM2ViYXNlLCBcJiMzNDtGaXJtd2FyZSBjb3JydXB0ZWQsIHZpcnR1YWwgYWRkcmVzc2VzIG5vdCBwYWdlIGFsaWduZWQ6IDB4JXgtMHgleFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy01NzUtXHRcdFx0aGRyLnZhLnN0YXJ0LCBoZHIudmEuZW5kKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTEyNDc9dm9pZCBwYW50aG9yX2tlcm5lbF9ib19kZXN0cm95KHN0cnVjdCBwYW50aG9yX2tlcm5lbF9ibyAqYm8pXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMjc4LSAqIEBncHVfdmE6IEdQVSBhZGRyZXNzIGFzc2lnbmVkIHdoZW4gbWFwcGluZyB0byB0aGUgVk0uXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjEyNzk6ICogSWYgZ3B1X3ZhID09IFBBTlRIT1JfVk1fS0VSTkVMX0FVVE9fVkEsIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2lsbCBiZVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMjgwLSAqIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGVkLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTU1PXN0cnVjdCBwYW50aG9yX3ZtX29wX2N0eCB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMTctICpcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MjE4OiAqIEEgVk0gaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIEdQVSAob3IgTUNVKSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTIxOS0gKiBJdCBlbWJlZHMgdGhlIE1NVSBwYWdlIHRhYmxlIGZvciB0aGlzIGFkZHJlc3Mgc3BhY2UsIGEgdHJlZSBjb250YWluaW5nXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyMDogKiBhbGwgdGhlIHZpcnR1YWwgbWFwcGluZ3Mgb2YgR0VNIG9iamVjdHMsIGFuZCBvdGhlciB0aGluZ3MgbmVlZGVkIHRvIG1hbmFnZVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMjEtICogdGhlIFZNLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjI2LSAqXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyNzogKiBBIHBvcnRpb24gb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBpcyByZXNlcnZlZCBmb3Iga2VybmVsIG9iamVjdHMsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyODogKiBsaWtlIGhlYXAgY2h1bmtzLCBhbmQgdXNlcnNwYWNlIGdldHMgdG8gZGVjaWRlIGhvdyBtdWNoIG9mIHRoZSB2aXJ0dWFsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyOTogKiBhZGRyZXNzIHNwYWNlIGlzIGxlZnQgdG8gdGhlIGtlcm5lbCAoaGFsZiBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTIzMC0gKiBieSBkZWZhdWx0KS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTQ1Mj1zdGF0aWMgdm9pZCAqYWxsb2NfcHQodm9pZCAqY29va2llLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtNDg1LVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzo0ODY6XHQvKiBQYWdlIHRhYmxlIGVudHJpZXMgZG9uJiMzOTt0IHVzZSB2aXJ0dWFsIGFkZHJlc3Nlcywgd2hpY2ggdHJpcHMgb3V0XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTQ4Ny1cdCAqIGttZW1sZWFrLiBrbWVtbGVha19hbGxvY19waHlzKCkgbWlnaHQgd29yaywgYnV0IHBoeXNpY2FsIGFkZHJlc3Nlc1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTQxND1zdGF0aWMgdm9pZCBwYW50aG9yX3ZtX3ByZXBhcmVfc3luY19vbmx5X29wX2N0eChzdHJ1Y3QgcGFudGhvcl92bV9vcF9jdHggKm9wX2N0eCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjEtLyoqXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjE0MjI6ICogcGFudGhvcl92bV9nZXRfYm9fZm9yX3ZhKCkgLSBHZXQgdGhlIEdFTSBvYmplY3QgbWFwcGVkIGF0IGEgdmlydHVhbCBhZGRyZXNzXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjMtICogQHZtOiBWTSB0byBsb29rIGludG8uXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjQtICogQHZhOiBWaXJ0dWFsIGFkZHJlc3MgdG8gc2VhcmNoIGZvci5cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MTQyNTogKiBAYm9fb2Zmc2V0OiBPZmZzZXQgb2YgdGhlIEdFTSBvYmplY3QgbWFwcGVkIGF0IHRoaXMgdmlydHVhbCBhZGRyZXNzLlxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDI2LSAqIE9ubHkgdmFsaWQgb24gc3VjY2Vzcy5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5oPTc3PWJvb2wgcGFudGhvcl92bV9pc191bnVzYWJsZShzdHJ1Y3QgcGFudGhvcl92bSAqdm0pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmgtODAtICogUEFOVEhPUl9WTV9LRVJORUxfQVVUT19WQTogVXNlIHRoaXMgbWFnaWMgYWRkcmVzcyB3aGVuIHlvdSB3YW50IHRoZSBHRU1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11Lmg6ODE6ICogbG9naWMgdG8gYXV0by1hbGxvY2F0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHRoZSByZXNlcnZlZCBrZXJuZWwgVkEgcmFuZ2UuXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5oLTgyLSAqL1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYz0zNTA9c3RydWN0IHBhbnRob3JfcXVldWUge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy00MDctXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM6NDA4Olx0XHQvKiogQGlmYWNlLmlucHV0X2Z3X3ZhOiBGVyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGludGVyZmFjZSBidWZmZXIuICovXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmMtNDA5LVx0XHR1MzIgaW5wdXRfZndfdmE7XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmMtNDEwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jOjQxMTpcdFx0LyoqIEBpZmFjZS5vdXRwdXRfZndfdmE6IEZXIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGludGVyZmFjZSBidWZmZXIuICovXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmMtNDEyLVx0XHR1MzIgb3V0cHV0X2Z3X3ZhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGEgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhlcmUmIzM5O3Mgbm8gbWVudGlvbiBvZiBhIG1vY2sgaGVyZSwgc28gdGhhdCYjMzk7cyBpcnJlbGV2YW50LiBUaGUgY3JpdGljYWwgcG9pbnQgaXM6IHN5emthbGxlciBpcyB0ZXN0aW5nIGEgcGF0Y2gsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHJ1bm5pbmcgZWl0aGVyIG9uIHJlYWwgQVJNIGhhcmR3YXJlIG9yIFFFTVUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgcHJlc2VuY2Ugb2YgYSAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7IGNvbW1pdCBtZXNzYWdlIGNvbmZpcm1zIHRoYXQgdGhpcyBwYXRjaCB3YXMgc2VudCB0byBzeXpib3QgZm9yIHRlc3RpbmcuIFNpbmNlIHN5emthbGxlciBpcyBzZXQgdXAgdG8gdGVzdCBwYXRjaGVzIG9uIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGUgYnVnIHdhcyBmb3VuZCwgYW5kIGlmIHRoZSBidWcgd2FzIGZvdW5kIG9uIGFuIEFSTSBib2FyZCwgdGhlIHBhdGNoIHdpbGwgYmUgdGVzdGVkIHRoZXJlLgoKVGhlIHByb21wdCBpcyB0aGUga2V5IGhlcmUuIEl0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIuIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCYjMzk7cyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gR0NFL1FFTVUuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGUgY29kZSBwYXRocyBhZGRlZCBieSBgcGFudGhvcmAgYXJlIHJlYWNoYWJsZS4gSXMgYHBhbnRob3JgIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFL1FFTVU/IElmIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBgcGFudGhvcmAgd2l0aGluIFFFTVUsIGl0JiMzOTtzIHVucmVhY2hhYmxlLiBCdXQsIHdhaXQsIHN5emthbGxlciBjb3VsZCBiZSBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmUuIFRoYXQgZG9lc24mIzM5O3QgbWF0dGVyOyB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyBJIHNob3VsZCBsb29rIGF0IHJlYWNoYWJpbGl0eSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG11c3QgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IGlzIG9ubHkgcmVhY2hhYmxlIG9uIHJlYWwgaGFyZHdhcmUuCgpUbyBiZSBleHRyYSBzdXJlLCBJJiMzOTtsbCByZWFkIHRoYXQgYWdhaW46ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFllcywgaXQmIzM5O3MgdmVyeSBjbGVhci4KClNvLCAqaXMqIGBwYW50aG9yYCByZWFjaGFibGU/IEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBDYW4gaXQgYmUgcHJvYmVkIHdpdGggYSBkZXZpY2UgdHJlZSBvdmVybGF5IGluIFFFTVU/IE1heWJlLiBCdXQgZXZlbiBpZiBpdCAqY2FuKiBiZSBwcm9iZWQsIGRvZXMgaXQgcmVxdWlyZSBhY2Nlc3MgdG8gcmVhbCBoYXJkd2FyZSByZWdpc3RlcnMgdG8gbm90IGZhaWwgdGhlIHByb2JlPyBJIG5lZWQgdG8gYW5hbHl6ZSBgcGFudGhvcl9kZXZpY2VfaW5pdGAgYW5kIGBwYW50aG9yX3Byb2JlYCB0byBkZXRlcm1pbmUgaWYgdGhvc2UgZnVuY3Rpb25zIGFjY2VzcyBoYXJkd2FyZSByZWdpc3RlcnMsIGFzIHRoYXQgd291bGQgbWFrZSB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9pb3JlbWFwfHJlYWRsfHdyaXRlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTYzMD1zdGF0aWMgaW5saW5lIHZvaWQgZ3B1X3dyaXRlKHZvaWQgX19pb21lbSAqaW9tZW0sIHUzMiByZWcsIHUzMiBkYXRhKVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC02MzEte1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2MzI6XHR3cml0ZWwoZGF0YSwgaW9tZW0gJiM0MzsgcmVnKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjMzLX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTYzNT1zdGF0aWMgaW5saW5lIHUzMiBncHVfcmVhZCh2b2lkIF9faW9tZW0gKmlvbWVtLCB1MzIgcmVnKVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC02MzYte1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2Mzc6XHRyZXR1cm4gcmVhZGwoaW9tZW0gJiM0MzsgcmVnKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjM4LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTY0MD1zdGF0aWMgaW5saW5lIHUzMiBncHVfcmVhZF9yZWxheGVkKHZvaWQgX19pb21lbSAqaW9tZW0sIHUzMiByZWcpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTY0MS17XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oOjY0MjpcdHJldHVybiByZWFkbF9yZWxheGVkKGlvbWVtICYjNDM7IHJlZyk7XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTY0My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDAyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgcGFudGhvcl9kZXZpY2VfaW5pdGAgYW5kIFJlZ2lzdGVyIEFjY2VzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtEb2VzIGBwYW50aG9yX2RldmljZV9pbml0YCBhY3R1YWxseSB0b3VjaCBhbnkgaGFyZHdhcmUgcmVnaXN0ZXJzPyYjMzQ7LiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBqdXN0IHNldHRpbmcgdXAgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIG9yIGlmIGl0JiMzOTtzIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIGRldmljZSYjMzk7cyBjb250cm9sIG9yIHN0YXR1cyByZWdpc3RlcnMuIFRoZSBiZWhhdmlvciBpcyBjcml0aWNhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG9pbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gd2hlcmUgaXQgY291bGQgYmUgcGVyZm9ybWluZyBJL08uIEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtZW1vcnkgYWRkcmVzc2VzIG9yIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgYmVpbmcgdXNlZD8gQW55IGJpdHdpc2Ugb3BlcmF0aW9ucyB0aGF0IGxvb2sgbGlrZSB0aGV5JiMzOTtyZSBzZXR0aW5nIG9yIGNsZWFyaW5nIGNvbnRyb2wgZmxhZ3M/IEnigJlsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGNhcmVmdWxseS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHN0ZXBwaW5nIHRocm91Z2ggdGhlIGZ1bmN0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBjYXJlZnVsIHJlYWRpbmcgd2l0aCBhbiBleWUgdG8gd2hlcmUgbWVtb3J5IGlzIGJlaW5nIHJlYWQvd3JpdHRlbi4gSXTigJlzIGVpdGhlciBnb2luZyB0byBiZSBhIHF1aWNrIGdsYW5jZSwgb3IgYSBtb3JlIGludm9sdmVkIGludmVzdGlnYXRpb24sIGJ1dCBJIG5lZWQgdG8gZmlndXJlIGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtncHVfcmVhZHxncHVfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIG9uZToKCioqUmV2aXNpdGluZyBgcGFudGhvcl9kZXZpY2VfaW5pdGAqKgoKQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgcGFudGhvcl9kZXZpY2VfaW5pdGAuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgZnVuY3Rpb24uIEkmIzM5O3ZlIGdvdCBhIG5hZ2dpbmcgZmVlbGluZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgc3VidGxlIEkgb3Zlcmxvb2tlZCwgb3IgcGVyaGFwcyBhIGNvbnNlcXVlbmNlIG9mIGEgcmVjZW50IGNoYW5nZSB0aGF0IEkgbmVlZCB0byBjb25maXJtLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgSSBjYW4mIzM5O3QgYWZmb3JkIGFueSBhc3N1bXB0aW9ucyBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBYLCBZLCBhbmQgWiBzcGVjaWZpYyBmZWF0dXJlcyBhZ2FpbiB0byBlbnN1cmUgdGhleSYjMzk7cmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIE5lZWQgdG8gbWFrZSBzdXJlIHRoZSBsb3ctbGV2ZWwgc3R1ZmYgdGhlcmUgaXMgc3RpbGwgYXMgZXhwZWN0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IHBhdGNoZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCByZS1ldmFsdWF0ZSB0aGUgY29yZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTY6XHRcdFx0cmV0dXJuIHJldDtcbiAyMTc6XHRcbiAyMTg6XHRcdHJldCA9IHBhbnRob3JfY2xrX2luaXQocHRkZXYpO1xuIDIxOTpcdFx0aWYgKHJldClcbiAyMjA6XHRcdFx0cmV0dXJuIHJldDtcbiAyMjE6XHRcbiAyMjI6XHRcdHJldCA9IHBhbnRob3JfaW5pdF9wb3dlcihwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjIzOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMjI0Olx0XHRcdGRybV9lcnIoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgXCYjMzQ7aW5pdCBwb3dlciBkb21haW5zIGZhaWxlZCwgcmV0PSVkXCYjMzQ7LCByZXQpO1xuIDIyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIyNjpcdFx0fVxuIDIyNzpcdFxuIDIyODpcdFx0cmV0ID0gcGFudGhvcl9kZXZmcmVxX2luaXQocHRkZXYpO1xuIDIyOTpcdFx0aWYgKHJldClcbiAyMzA6XHRcdFx0cmV0dXJuIHJldDtcbiAyMzE6XHRcbiAyMzI6XHRcdHB0ZGV2LVx1MDAzZWlvbWVtID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UodG9fcGxhdGZvcm1fZGV2aWNlKHB0ZGV2LVx1MDAzZWJhc2UuZGV2KSxcbiAyMzM6XHRcdFx0XHRcdFx0XHRcdCAgICAgIDAsIFx1MDAyNnJlcyk7XG4gMjM0Olx0XHRpZiAoSVNfRVJSKHB0ZGV2LVx1MDAzZWlvbWVtKSlcbiAyMzU6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHRkZXYtXHUwMDNlaW9tZW0pO1xuIDIzNjpcdFxuIDIzNzpcdFx0cHRkZXYtXHUwMDNlcGh5c19hZGRyID0gcmVzLVx1MDAzZXN0YXJ0O1xuIDIzODpcdFxuIDIzOTpcdFx0cmV0ID0gZGV2bV9wbV9ydW50aW1lX2VuYWJsZShwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjQwOlx0XHRpZiAocmV0KVxuIDI0MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDI0MjpcdFxuIDI0MzpcdFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjQ0Olx0XHRpZiAocmV0KVxuIDI0NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDI0NjpcdFxuIDI0NzpcdFx0LyogSWYgUE0gaXMgZGlzYWJsZWQsIHdlIG5lZWQgdG8gY2FsbCBwYW50aG9yX2RldmljZV9yZXN1bWUoKSBtYW51YWxseS4gKi9cbiAyNDg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUE0pKSB7XG4gMjQ5Olx0XHRcdHJldCA9IHBhbnRob3JfZGV2aWNlX3Jlc3VtZShwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjUwOlx0XHRcdGlmIChyZXQpXG4gMjUxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAyNTI6XHRcdH1cbiAyNTM6XHRcbiAyNTQ6XHRcdHJldCA9IHBhbnRob3JfaHdfaW5pdChwdGRldik7XG4gMjU1Olx0XHRpZiAocmV0KVxuIDI1NjpcdFx0XHRnb3RvIGVycl9ycG1fcHV0O1xuIDI1NzpcdFxuIDI1ODpcdFx0cmV0ID0gcGFudGhvcl9wd3JfaW5pdChwdGRldik7XG4gMjU5Olx0XHRpZiAocmV0KVxuIDI2MDpcdFx0XHRnb3RvIGVycl9ycG1fcHV0O1xuIDI2MTpcdFxuIDI2MjpcdFx0cmV0ID0gcGFudGhvcl9ncHVfaW5pdChwdGRldik7XG4gMjYzOlx0XHRpZiAocmV0KVxuIDI2NDpcdFx0XHRnb3RvIGVycl91bnBsdWdfcHdyO1xuIDI2NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpSaWdodCwgaXQmIzM5O3Mga2lja2luZyB0aGluZ3Mgb2ZmIHdpdGggYSBjYWxsIHRvIGBwYW50aG9yX2h3X2luaXRgLiBOYXR1cmFsbHksIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLiBgcGFudGhvcl9od19pbml0YCBpcyB0aGUga2V5IGhlcmU7IGl0JiMzOTtzIHRoZSBnYXRld2F5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBQYW50aG9yIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmRhbWVudGFsIGFzcGVjdHMgb2YgdGhlIGhhcmR3YXJlIGFyZSBiZWluZyBjb25maWd1cmVkIG9yIGVuYWJsZWQgYXQgdGhpcyBzdGFnZS4gSXMgaXQgY2xvY2sgc2V0dXA/IE1lbW9yeSBtYXBwaW5nPyBEZXZpY2UgZHJpdmVyIGxvYWRpbmc/IEtub3dpbmcgd2hhdCBgcGFudGhvcl9od19pbml0YCBpcyB1cCB0byB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGlzc2VjdCB0aGF0IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3JfaHdfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jPTE2Nj1pbnQgcGFudGhvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMjUzLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYzoyNTQ6XHRyZXQgPSBwYW50aG9yX2h3X2luaXQocHRkZXYpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYy0yNTUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYz0yOTY9c3RhdGljIGludCBwYW50aG9yX2h3X2dwdV9pZF9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jLTMwNC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYzozMDU6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jLTMwNi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5oPTMzPXN0cnVjdCBwYW50aG9yX2h3IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmgtMzktXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3Lmg6NDA6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuaC00MS1pbnQgcGFudGhvcl9od19wb3dlcl9zdGF0dXNfcmVnaXN0ZXIodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoYXQgYHBhbnRob3JfaHdfaW5pdGAgZnVuY3Rpb24sIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBwYW50aG9yX2h3X2luaXQgRGVlcCBEaXZlKioKCkFscmlnaHQsIHRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB0aGlzIGlzIHRoZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBoYXJkd2FyZSBhc3NvY2lhdGVkIHdpdGggdGhlIFBhbnRob3Igc3lzdGVtLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhbGwgdGhlIHRoZW9yZXRpY2FsIGRlc2lnbiBhbmQgY29kZSBjb252ZXJnZSB0byBhY3R1YWxseSBtYWtlIHRoZSBoYXJkd2FyZSAqZG8qIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgdGhlIGhhcmR3YXJlIHRoaXMgY292ZXJzLCB3aGF0IHN1YnN5c3RlbXMsIGFuZCBob3cgZGVlcGx5IGl0IGNvbmZpZ3VyZXMgZWFjaCBvbmUuIElzIHRoaXMgYSB0b3AtbGV2ZWwgZnVuY3Rpb24sIGNhbGxpbmcgb3RoZXJzLCBvciBpcyBpdCBkb2luZyBldmVyeXRoaW5nIGluIG9uZSBtYXNzaXZlIGJsb2NrPyBUaGF0IHdpbGwgdGVsbCBhIGxvdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciBjbGVhciBkaXZpc2lvbnMgb3Igc2VjdGlvbnMgd2l0aGluIHRoZSBjb2RlLiBBcmUgdGhlcmUgY29tbWVudHMgZXhwbGFpbmluZyB3aGF0IGVhY2ggcGFydCBpcyByZXNwb25zaWJsZSBmb3I/IEFyZSB0aGVyZSBmdW5jdGlvbnMgY2FsbGVkIHRoYXQgZ2l2ZSBhIGdvb2QgaGludCBhYm91dCB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSwgbWF5YmUgYGluaXRfdWFydCgpYCBvciBgY29uZmlndXJlX2RtYSgpYC4gSeKAmW0gbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBmbGFncywgbGlrZSBnbG9iYWwgdmFyaWFibGUgdXNhZ2UsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGhhcmRjb2RlZCB2YWx1ZXMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBjaGVja2luZy4gSXMgaXQgcm9idXN0PyBEb2VzIGl0IGhhbmRsZSBoYXJkd2FyZSBmYWlsdXJlcyBncmFjZWZ1bGx5LCBvciBkb2VzIGl0IGFzc3VtZSBldmVyeXRoaW5nIHdpbGwgd29yayBwZXJmZWN0bHk/IFRoZSBlcnJvciBoYW5kbGluZyAob3IgbGFjayB0aGVyZW9mKSB3aWxsIHJldmVhbCBhIGxvdCBhYm91dCB0aGUgZGVzaWduIHBoaWxvc29waHkuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZmFpbHMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gRG9lcyBpdCByb2xsIGJhY2sgY2hhbmdlcywgYXR0ZW1wdCB0byByZXRyeSwgb3Igc2ltcGx5IGhhbHQ/CgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGFzc2VzcyB0aGUgcmVsaWFiaWxpdHksIG1vZHVsYXJpdHksIGFuZCBtYWludGFpbmFiaWxpdHkgb2YgdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJcyBpdCB3ZWxsLXN0cnVjdHVyZWQsIGVhc3kgdG8gdW5kZXJzdGFuZCwgYW5kIGVhc3kgdG8gbW9kaWZ5IGluIHRoZSBmdXR1cmU/IFRoaXMgaXMga2V5IGZvciBsb25nLXRlcm0gcHJvamVjdCBoZWFsdGguIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIGFuZCBtYWtlIGltcHJvdmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwNTpcdGludCBwYW50aG9yX2h3X2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbiAzMDY6XHR7XG4gMzA3Olx0XHRpbnQgcmV0ID0gMDtcbiAzMDg6XHRcbiAzMDk6XHRcdHJldCA9IHBhbnRob3JfaHdfZ3B1X2lkX2luaXQocHRkZXYpO1xuIDMxMDpcdFx0aWYgKHJldClcbiAzMTE6XHRcdFx0cmV0dXJuIHJldDtcbiAzMTI6XHRcbiAzMTM6XHRcdHJldCA9IHBhbnRob3JfaHdfYmluZF9kZXZpY2UocHRkZXYpO1xuIDMxNDpcdFx0aWYgKHJldClcbiAzMTU6XHRcdFx0cmV0dXJuIHJldDtcbiAzMTY6XHRcbiAzMTc6XHRcdHJldHVybiBwYW50aG9yX2h3X2luZm9faW5pdChwdGRldik7XG4gMzE4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgcGFudGhvcl9od19ncHVfaWRfaW5pdGAuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgd2UmIzM5O3JlIGVzdGFibGlzaGluZyB0aGUgaGFyZHdhcmUgY29udGV4dCBmb3IgYSBHUFUgd2l0aGluIHRoZSBQYW50aG9yIGFyY2hpdGVjdHVyZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGluaXRpYWxpemF0aW9uIHJlbGF0ZWQgdG8gR1BVIGlkZW50aWZpY2F0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgb24gdGhlIEdQVSDigJMgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRpb24sIGNvbW1hbmQgcXVldWUgc2V0dXAsIGFuZCBrZXJuZWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgR1BVIElELiBEb2VzIGl0IHByb2JlIFBDSSBkZXZpY2VzPyBJcyBpdCBiYXNlZCBvbiBhIGRldmljZSB0cmVlIGxvb2t1cD8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgcGxhdGZvcm0tc3BlY2lmaWMgYW5kIHZlbmRvci1kZWZpbmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZXRob2RvbG9neS4gQW55IHBvdGVudGlhbCBmb3IgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIGJlaW5nIGludm9sdmVkIGhlcmUgaXMgc29tZXRoaW5nIHRvIHdhdGNoIGZvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtsbCBpbnRlcmFjdCB3aXRoIHNvbWUga2luZCBvZiByZWdpc3RlciB0byBjb25maWd1cmUgdGhlIEdQVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZHJpdmVycy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIGFueSBleGlzdGluZyByZXNvdXJjZSBtYW5hZ2VtZW50IHN5c3RlbXMgd2UgbWlnaHQgaGF2ZSBpbiBwbGFjZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgZmFpbHVyZSBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgd2hlbiBtdWx0aXBsZSBHUFVzIGFyZSBwcmVzZW50LiBJcyB0aGVyZSBhbnkgZ3JhY2VmdWwgZGVncmFkYXRpb24gb3IgZXJyb3IgcmVwb3J0aW5nPyBUaGUgd2F5IHRoaXMgaXMgc2V0IHVwIHdpbGwgZGljdGF0ZSB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3Mgcm9idXN0bmVzcy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTY6XHRzdGF0aWMgaW50IHBhbnRob3JfaHdfZ3B1X2lkX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbiAyOTc6XHR7XG4gMjk4Olx0XHRwdGRldi1cdTAwM2VncHVfaW5mby5ncHVfaWQgPSBncHVfcmVhZChwdGRldi1cdTAwM2Vpb21lbSwgR1BVX0lEKTtcbiAyOTk6XHRcdGlmICghcHRkZXYtXHUwMDNlZ3B1X2luZm8uZ3B1X2lkKVxuIDMwMDpcdFx0XHRyZXR1cm4gLUVOWElPO1xuIDMwMTpcdFxuIDMwMjpcdFx0cmV0dXJuIDA7XG4gMzAzOlx0fVxuIDMwNDpcdFxuIDMwNTpcdGludCBwYW50aG9yX2h3X2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgV29ydGhGdXp6aW5nYCBDcml0ZXJpYSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyByZWFkaW5nIGBHUFVfSURgIGZyb20gYGlvbWVtYC4gQSB2YWx1ZSBvZiAwIHJlc3VsdHMgaW4gYC1FTlhJT2AuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCBuZWVkcyAqYWN0dWFsKiBoYXJkd2FyZSBvciBhIG1vY2sgdGhhdCBwcm92aWRlcyBhIHZhbGlkIGBHUFVfSURgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIG1vY2sgZm9yIHRoaXM/IFdhaXQsIHRoZW4gSSByZW1lbWJlciBzeXprYWxsZXIgdXNlcyBgdmttc2Agb3IgYHZnZW1gIHRvIGZ1enogRFJNIGRyaXZlcnMuIEJ1dCwgYHBhbnRob3JgIGlzIGEgc3BlY2lmaWMgZHJpdmVyLiBDb3VsZCBzeXprYWxsZXIgYmUgcnVubmluZyBvbiBhbiBBUk0gYm9hcmQgd2l0aCBNYWxpIENTRj8gT2YgY291cnNlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgQVJNNjQgaW5zdGFuY2VzLgoKVGhhdCBjaGFuZ2VzIHRoaW5ncy4gSWYgc3l6a2FsbGVyIGlzIG9uIGFuIEFSTSBib2FyZCwgdGhlbiBpdCYjMzk7cyAqbm90KiBuZWNlc3NhcmlseSBpbXBvc3NpYmxlIHRvIHJlYWNoISBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWM6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiYjMzQ7IFNvLCBpZiBpdCAqb25seSogd29ya3Mgb24gcmVhbCBoYXJkd2FyZSwgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkxldCBtZSByZS1yZWFkIHRoZSBleGNsdXNpb24gY3JpdGVyaWE6ICpEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBudW1lcmljIGNvbnN0YW50cywgYW5kIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gR0NFIG9yIFFFTVUqLiBTbyBpdCAqcmVhbGx5KiBoaW5nZXMgb24gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHBhcnQuCgpBbHJpZ2h0LCBpZiBgcGFudGhvcmAgKmlzKiBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YsIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgaW4gUUVNVSwgdGhlbiBpdCYjMzk7cyBnZW51aW5lbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGVyZSBhIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBgcGFudGhvcmA/IFRpbWUgdG8gZ28gaHVudGluZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUga2VybmVsIHRyZWUgZm9yIGBwYW50aG9yYCBpbiBgdG9vbHMvdGVzdGluZy9gLCBgZHJpdmVycy9ncHUvZHJtL3ZrbXMvYCwgYW5kIGBkcml2ZXJzL2dwdS9kcm0vdmdlbS9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS92a21zLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgdGhlIHZnZW0gRHJpdmVyJiMzOTtzIFJvbGUqKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGltbWVkaWF0ZWx5IHpvb21zIGluIG9uIGBkcml2ZXJzL2dwdS9kcm0vdmdlbS9gLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCB0aGF0IGFyZWEgaW5zdGFudGx5IGdyYWJzIG15IGF0dGVudGlvbi4gSSYjMzk7bSB3b25kZXJpbmcsIGhvdyBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmUsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnM/IEFtIEkgbG9va2luZyBhdCBwb3RlbnRpYWwgZW5oYW5jZW1lbnRzLCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3QsIG9yIG1heWJlIGV2ZW4gYSBzcGVjaWZpYyBidWcgcmVwb3J0IHRoYXQgSSBhbSB0cmFja2luZz8gVGhlICYjMzQ7dmdlbSYjMzQ7IGRyaXZlciwgYmVpbmcgYSB2aXJ0dWFsIEdFTSBkcml2ZXIsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRob3VnaHRzIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtZW1vcnkgbWFuYWdlbWVudCBwYXJhZGlnbXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGZyYW1ld29yay4gSSBtaWdodCBzdGFydCB0aGlua2luZyBhYm91dCBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBlc3BlY2lhbGx5IGluIHZhcmlvdXMgd29ya2xvYWRzLCBhbmQgaG93IHRob3NlIHBlcmZvcm1hbmNlIG1ldHJpY3MgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZS4gQXJlIHRoZXJlIGFueSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IEkgYW0gdHJ5aW5nIHRvIHJlc29sdmUgb3IgbWl0aWdhdGU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS92Z2VtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTQ3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaWdnaW5nIGludG8gdGhlIGBhcmNoL3VtL2AgUmFiYml0IEhvbGUqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4uLiB0aGF0IGxpdHRsZSB3aGlzcGVyIG9mIGBhcmNoL3VtL2AganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJIHdvbmRlciB3aGF0IHByb21wdGVkIHRoYXQgdGhvdWdodC4gSXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU28sIHdoYXQmIzM5O3MgZ290IG1lIHRoaW5raW5nIGFib3V0IFVzZXItbW9kZSBMaW51eD8gQW0gSSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBlbXVsYXRpb24/IE9yIHBlcmhhcHMgSSYjMzk7bSBjb25zaWRlcmluZyB1c2luZyBpdCBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudD8gTWF5YmUgSSYjMzk7bSBzZWVpbmcgYSBjb2RlIHBhdGggdGhhdCB0b3VjaGVzIG9uIHRoYXQgc3Vic3lzdGVtIGluIHNvbWUgd2F5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gTGV0IG1lIG1lbnRhbGx5IHJldmlldyB3aGF0IEkgd2FzIGp1c3QgbG9va2luZyBhdCwgb3Igd2hhdCBwcm9ibGVtIEkgd2FzIHRyeWluZyB0byBzb2x2ZS4gV2hhdCB3YXMgdGhlICpsZWFkaW5nKiB0aG91Z2h0PyBEaWQgSSByZWNlbnRseSBoYXZlIGEgZGlzY3Vzc2lvbiBhYm91dCBjb250YWluZXJpemF0aW9uIG9yIHN5c3RlbSBlbXVsYXRpb24/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsZXZhbmNlIG9mIGBhcmNoL3VtL2AgdG8gdGhlIGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodC4gVGhpcyBjb3VsZCBiZSBhIHByb2R1Y3RpdmUgdGhyZWFkIHRvIGZvbGxvdywgb3IganVzdCBhIG1lbnRhbCBkZXRvdXIuIFRpbWUgdG8gYXNzZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3VtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDE4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgUmVhY2hpbmcgYHBhbnRob3JfZ2VtX2ZhdWx0YCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpbywgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBjYW4gSSBldmVuICpyZWFjaCogYGluc2VydF9wYWdlYCB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmU/IEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJZiBgcGFudGhvcl9wcm9iZWAgZmFpbHMgZWFybHkgb24sIGxpa2UgYXQgYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgIGJlY2F1c2UgYEdQVV9JRGAgaXMgMCwgb3IgYmVjYXVzZSB0aGUgYGlvbWVtYCBtYXBwaW5nIGlzIGludmFsaWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHByb3BlciBkZXZpY2UgdHJlZSBub2RlLCB0aGVuIHRoZSBkcml2ZXImIzM5O3Mgbm90IGdvaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4KCkFoYSEgSWYgUUVNVSYjMzk7cyBgdmlydGAgbWFjaGluZSBmb3IgQVJNNjQgZG9lc24mIzM5O3QgaGF2ZSBhIE1hbGkgQ1NGIEdQVSBkZWZpbmVkIGluIGl0cyBkZXZpY2UgdHJlZSwgdGhlbiBgcGFudGhvcl9wcm9iZWAgd29uJiMzOTt0IGV2ZW4gYmUgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCBtZWFucyBgcGFudGhvcmAgaXMgaW5hY2Nlc3NpYmxlIHdpdGhpbiBRRU1VIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIHN5emthbGxlciBiZSB1c2luZyBhIGRldmljZSB0cmVlIG92ZXJsYXkgdG8gYnJpbmcgdGhlIGRldmljZSBvbmxpbmU/IEV2ZW4gaWYgaXQgZG9lcywgYGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlYCBpcyBzdGlsbCBnb2luZyB0byBtYXAgKnNvbWUqIG1lbW9yeS4gUmVhZGluZyBgR1BVX0lEYCB3aWxsIHRoZW4ganVzdCByZXR1cm4gMCwgb3Igd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5zIHRvIGJlIGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBJZiBpdCYjMzk7cyB6ZXJvLCB0aGVuIGBwYW50aG9yX2h3X2dwdV9pZF9pbml0YCB3aWxsIHJldHVybiBgLUVOWElPYCwgYW5kIGBwYW50aG9yX3Byb2JlYCB3aWxsIGFnYWluIGZhaWwuCgpJbiBlaXRoZXIgc2NlbmFyaW8sIHRoZSBkZXZpY2Ugd29uJiMzOTt0IGluaXRpYWxpemUuIFRoYXQgbWVhbnMgYC9kZXYvZHJpL3JlbmRlckQqYCB3b24mIzM5O3QgYmUgY3JlYXRlZCBmb3IgYHBhbnRob3JgLCBhbmQgdGhlcmVmb3JlLCBgcGFudGhvcl9nZW1fZmF1bHRgIHdvbiYjMzk7dCBldmVyIGJlIHJlYWNoYWJsZS4KClJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUmIzM5O3MgKmFueSogd2F5IHRvIGJ5cGFzcyB0aGUgcHJvYmUuIElzIHRoZXJlIGEgd2F5IHRvIHNvbWVob3cgbW9jayBvciBieXBhc3MgYHBhbnRob3JfcHJvYmVgLCBwZXJoYXBzIHNvbWUga2luZCBvZiBrZXJuZWwtbGV2ZWwgbW9jayBJJiMzOTttIG92ZXJsb29raW5nPyBJIHNob3VsZCB2ZXJpZnkgaWYgYW55IHN1Y2ggYHBhbnRob3JgIG1vY2sgYWN0dWFsbHkgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21pc2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZSBhbmQgZm9ybWF0dGVkIHdpdGggYSBib2xkZWQgaGVhZGVyOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIENoYXJhY3RlciBEcml2ZXJzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgcHJvYmxlbSwgd2hhdGV2ZXIgaXQgaXMuIEFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZnVuZGFtZW50YWwgYXJlYTogYGRyaXZlcnMvY2hhci9gLiBJdCYjMzk7cyBhbG1vc3QgcmVmbGV4aXZlLiBXaGVuZXZlciBJJiMzOTttIHdyZXN0bGluZyB3aXRoIHNvbWV0aGluZyBhdCB0aGUga2VybmVsIGxldmVsLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb24gb3IgZGV2aWNlIG1hbmFnZW1lbnQsIG15IHRob3VnaHRzIGludmFyaWFibHkgZHJpZnQgdG93YXJkcyB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLiBJIG1lYW4sIGl0JiMzOTtzIHRoZSBicmVhZCBhbmQgYnV0dGVyLCBpc24mIzM5O3QgaXQ/IFRoYXQgZGlyZWN0b3J5IGlzIHdoZXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgcmVzaWRlIOKAkyB0aGUgY2hhcmFjdGVyIGRldmljZXMuIEl0JiMzOTtzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbnMgYXJlIGJ1aWx0LCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgYXJlIGRlZmluZWQuIFNvLCBsZXQmIzM5O3Mgc2F5IEkmIzM5O20gdHJvdWJsZXNob290aW5nIGEgd2VpcmQgSS9PIGlzc3VlLCBtYXliZSBhIGN1c3RvbSBkZXZpY2UgaXNuJiMzOTt0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBJJiMzOTtkIGluc3RpbmN0aXZlbHkgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRob3NlIGRyaXZlcnMuIExvb2tpbmcgYXQgaG93IHJlYWRzIGFuZCB3cml0ZXMgYXJlIGhhbmRsZWQsIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkLCBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0LCB0aGlzIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBpc24mIzM5O3QganVzdCBhIGxvY2F0aW9uIHRvIHN0b3JlIGZpbGVzOyBpdCYjMzk7cyBhIGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGZvciB1bmRlcnN0YW5kaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IHdoeSBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBhbmQgd2hhdCwgZXhhY3RseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYW50aG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTcwCgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDUxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBwYW50aG9yIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBgcGFudGhvcmAgZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUgcnVsZXMgc3RhdGUgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgcGFudGhvcmAgaXMgYSByZWFsIG9yIHZpcnR1YWwgZHJpdmVyLiBIbW0sIGxldCBtZSBzZWUuICYjMzQ7UGFudGhvciAoRFJNIHN1cHBvcnQgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzKS4mIzM0OyBSaWdodCwgaXQmIzM5O3MgYSBkcml2ZXIgZm9yICpyZWFsKiBoYXJkd2FyZSDigJMgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFRoYXQgbWVhbnMgaXTigJlzIG5vdCBzb2Z0d2FyZSBlbXVsYXRlZC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgb3IgR0NFIG9mZmVyIE1hbGkgQ1NGIGVtdWxhdGlvbi4gTm9wZSwgUUVNVSB1c2VzIHRoaW5ncyBsaWtlIHZpcnRpby1ncHUsIHJhbWZiLCBldGMuLCBidXQgbm90aGluZyBmb3IgTWFsaS4gU28sIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGVpdGhlciBlbnZpcm9ubWVudC4KCk9rYXksIHRpbWUgdG8ganVzdGlmeSB0aGlzIGRlY2lzaW9uLiBJJiMzOTtsbCB3cml0ZSBzb21ldGhpbmcgbGlrZSB0aGlzOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHBhbnRob3JgIERSTSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7CgpMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCYjMzk7cyBzZWUgaG93IGBpbnNlcnRfcGFnZWAgaXMgY2FsbGVkLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZS4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBPa2F5LCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGBub25ibG9ja2luZ19wYWdlX3NldHVwYCBhbmQgYGJsb2NraW5nX3BhZ2Vfc2V0dXBgLCB3aGljaCBpbiB0dXJuLCBhcmUgb25seSBjYWxsZWQgZnJvbSBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCwgd2hpY2ggaXMgdGhlIGZhdWx0IGhhbmRsZXIgZm9yIGBwYW50aG9yYCBHRU0gb2JqZWN0cy4gVG8gZ2V0IHRvIHRoaXMgZmF1bHQgaGFuZGxlciwgSSBuZWVkIGEgR0VNIG9iamVjdC4gVG8gY3JlYXRlIGEgR0VNIG9iamVjdCwgSSYjMzk7ZCBuZWVkIHRvIG9wZW4gdGhlIGBwYW50aG9yYCBEUk0gZGV2aWNlIGFuZCBjYWxsIGBEUk1fSU9DVExfUEFOVEhPUl9CT19DUkVBVEVgLiBUbyBvcGVuIHRoZSBkZXZpY2UsIEkgbmVlZCBpdCB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFByb2JpbmcgcmVxdWlyZXMgYSB2YWxpZCBgR1BVX0lEYCBmcm9tIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFNpbmNlIEkgZG9uJiMzOTt0IGhhdmUgTWFsaSBDU0YgaGFyZHdhcmUgaW4gUUVNVSwgdGhpcyBpcyBpbXBvc3NpYmxlLiBZZXAsIGFsbCBnb29kLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHBhbnRob3JgIERSTSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVxdWlyZXMgcmVhZGluZyBhIHZhbGlkIEdQVV9JRCBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycykuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gdGhlIEdFTSBmYXVsdCBoYW5kbGVyIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlcXVpcmVzIHJlYWRpbmcgYSB2YWxpZCBHUFVfSUQgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGluIHRoZSBHRU0gZmF1bHQgaGFuZGxlciBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mjo1OC41ODA1MTk1NjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1Mzc2NDM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcGFudGhvcmAgRFJNIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZXF1aXJlcyByZWFkaW5nIGEgdmFsaWQgR1BVX0lEIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiB0aGUgR0VNIGZhdWx0IGhhbmRsZXIgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mjo1OC41ODA1MjcyMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDM2NTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTg6NDI6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNTQ1MzViYWUyYjBjZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcXG5AQCAtODAyLDkgKzgwMiwxMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3QgcFxcbiBcXHR9IGVsc2UgaWYgKG9yZGVyID09IFBNRF9PUkRFUikge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBhZGRyID0gcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBBTElHTl9ET1dOKHZtZi1cXHUwMDNlYWRkcmVzcywgUE1EX1NJWkUpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUE1EX1NJWkU7XFxuK1xcdFxcdGJvb2wgaW5fcmFuZ2UgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2M9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGVuZCBcXHUwMDNjPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4gXFx0XFx0Ym9vbCBhbGlnbmVkID0gKHZtZi1cXHUwMDNlYWRkcmVzcyBcXHUwMDI2IH5QTURfTUFTSykgPT0gKHBhZGRyIFxcdTAwMjYgflBNRF9NQVNLKTtcXG4gXFxuLVxcdFxcdGlmIChhbGlnbmVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGlmIChhbGlnbmVkIFxcdTAwMjZcXHUwMDI2IGluX3JhbmdlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShwYWdlX2ZvbGlvKHBhZ2UpKSkge1xcbiBcXHRcXHRcXHRwZm4gXFx1MDAyNj0gUE1EX01BU0sgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0XFx0cmV0dXJuIHZtZl9pbnNlcnRfcGZuX3BtZCh2bWYsIHBmbiwgdm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mjo1OS4xNTIwMTkwMjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDk2NjEzMzU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlcXVpcmVzIHJlYWRpbmcgYSB2YWxpZCBHUFVfSUQgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGluIHRoZSBHRU0gZmF1bHQgaGFuZGxlciBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODNjZjcxZmU3NzZiYTEyOWZkNDcwNjRkNjcyNTUxNTliNjljNjZlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDE4OjQyOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcbmluZGV4IGExZTJlYjFjYTdiYmU2Li41NDUzNWJhZTJiMGNmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcbkBAIC04MDIsOSArODAyLDEzIEBAIHN0YXRpYyB2bV9mYXVsdF90IGluc2VydF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCBwXG4gXHR9IGVsc2UgaWYgKG9yZGVyID09IFBNRF9PUkRFUikge1xuIFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuIFx0XHR1bnNpZ25lZCBsb25nIHBhZGRyID0gcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4rXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBBTElHTl9ET1dOKHZtZi1cdTAwM2VhZGRyZXNzLCBQTURfU0laRSk7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQTURfU0laRTtcbitcdFx0Ym9vbCBpbl9yYW5nZSA9IHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBlbmQgXHUwMDNjPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0XHRib29sIGFsaWduZWQgPSAodm1mLVx1MDAzZWFkZHJlc3MgXHUwMDI2IH5QTURfTUFTSykgPT0gKHBhZGRyIFx1MDAyNiB+UE1EX01BU0spO1xuIFxuLVx0XHRpZiAoYWxpZ25lZCBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKGFsaWduZWQgXHUwMDI2XHUwMDI2IGluX3JhbmdlIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZm9saW9fdGVzdF9wbWRfbWFwcGFibGUocGFnZV9mb2xpbyhwYWdlKSkpIHtcbiBcdFx0XHRwZm4gXHUwMDI2PSBQTURfTUFTSyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdFx0XHRyZXR1cm4gdm1mX2luc2VydF9wZm5fcG1kKHZtZiwgcGZuLCB2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDI6NTkuMTUyMDIxODk5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwNzQ4MjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZS5cblxuKipQYW50aG9yIEdFTSBJbnNlcnQgUGFnZSBQYXRjaCBBbmFseXNpcyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZvY3VzZWQgb24gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBtb2RpZmljYXRpb24gaGl0cyB0aGUgYGluc2VydF9wYWdlYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIGEgbmV3IGNoZWNrLCBgaW5fcmFuZ2VgLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIGVuZm9yY2luZyBhIG1vcmUgc3RyaW5nZW50IGNvbnN0cmFpbnQuIFRoaXMgYGluX3JhbmdlYCB0ZXN0IGlzIHRoZXJlIHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBQYWdlIE1hcCBEaXJlY3RvcnkgKFBNRCkgZW50cnkgdGhhdCdzIGJlaW5nIGluc2VydGVkIGFsaWducyBwZXJmZWN0bHkgd2l0aGluIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHJhbmdlLlxuXG5TbywgdGhpcyBpcyBhIHByZXR0eSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0aWdodGVuaW5nIHVwIHRoZSBsb2dpYyBhcm91bmQgbWVtb3J5IG1hcHBpbmcsIHByb2JhYmx5IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHBvdGVudGlhbCBpc3N1ZSDigJMgbWF5YmUgYSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHkgb3Igc29tZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGF0IGNvbmZpZyBvcHRpb24gYWN0aXZhdGVzIHRoZSBgcGFudGhvcmAgZHJpdmVyIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBoYXZlIHRvIGZpbmQgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBlbmFibGVzIHRoZSBiZWhhdmlvciBiZWluZyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmb2xsb3ctdXAgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjAzLjY1OTUwNjgzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ1Mzc0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERSTV9QQU5USE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvS2NvbmZpZy0yLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL0tjb25maWc6Mzpjb25maWcgRFJNX1BBTlRIT1JcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlBhbnRob3IgKERSTSBzdXBwb3J0IGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjAzLjg1NDA1MTc4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzU4MTExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUk1fUEFOVEhPUiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBEUk1fUEFOVEhPUmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IGludGVyYWN0IHdpdGggdGhpcz9cIiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGZ1bGwgY29udGV4dC4gVG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWcgaW5mbHVlbmNlcyB0aGUga2VybmVsJ3MgRFJNIGltcGxlbWVudGF0aW9uLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEknbSBnb2luZyB0byBkaXZlIGludG8gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24gYGluc2VydF9wYWdlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbnNlcnRfcGFnZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGZsb3cgaW50ZXJhY3RzIHdpdGggdGhpcyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzowNy40ODk4NjYwNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDU0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc2VydF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz03ODY9c3RhdGljIGVudW0gZHJtX2dlbV9vYmplY3Rfc3RhdHVzIHBhbnRob3JfZ2VtX3N0YXR1cyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iailcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtNzk2LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6Nzk3OnN0YXRpYyB2bV9mYXVsdF90IGluc2VydF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtNzk4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9ODIyPXN0YXRpYyB2bV9mYXVsdF90IG5vbmJsb2NraW5nX3BhZ2Vfc2V0dXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTgzMy1cXHRpZiAoYm8tXFx1MDAzZWJhY2tpbmcucGFnZXMpXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo4MzQ6XFx0XFx0cmV0ID0gaW5zZXJ0X3BhZ2Uodm1mLCBvcmRlciwgYm8tXFx1MDAzZWJhY2tpbmcucGFnZXNbcGFnZV9vZmZzZXRdKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTgzNS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTg2Ni1cXHRcXHRpZiAobW1hcF9sb2NrX2hlbGQpXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo4Njc6XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X3BhZ2Uodm1mLCBvcmRlciwgcGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NjgtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzowNy42MDQ5MjcyODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYyOTY5NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFJvb3Qgb2YgYGluc2VydF9wYWdlYCBDYWxscyoqXG5cbk9rYXksIHNvIGBpbnNlcnRfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuIFRoZSB0ZXh0IHRlbGxzIG1lIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbm9uYmxvY2tpbmdfcGFnZV9zZXR1cGAgYW5kIGBibG9ja2luZ19wYWdlX3NldHVwYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50IHRoZSAqZXhhY3QqIGNhbGwgc2l0ZXMgb2YgKnRob3NlKiB0d28gZnVuY3Rpb25zLCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGluc2VydF9wYWdlYCBpcyBnZXR0aW5nIHV0aWxpemVkLiBGaW5kaW5nIHRoZSBjYWxsIGxvY2F0aW9ucyBvZiBgbm9uYmxvY2tpbmdfcGFnZV9zZXR1cGAgYW5kIGBibG9ja2luZ19wYWdlX3NldHVwYCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgcG90ZW50aWFsbHkgZXhwb3NlIGFyZWFzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzEsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzoxMC43Njc4OTk2MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1Njg0MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihub25ibG9ja2luZ19wYWdlX3NldHVwfGJsb2NraW5nX3BhZ2Vfc2V0dXApXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz03OTc9c3RhdGljIHZtX2ZhdWx0X3QgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTgyMS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjgyMjpzdGF0aWMgdm1fZmF1bHRfdCBub25ibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODIzLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTg0MS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg0MjpzdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NDMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhbnRob3JfZ2VtX29iamVjdCAqYm8sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTg3Nz1zdGF0aWMgdm1fZmF1bHRfdCBwYW50aG9yX2dlbV9hbnlfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODkyLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6ODkzOlxcdHJldCA9IG5vbmJsb2NraW5nX3BhZ2Vfc2V0dXAodm1mLCBvcmRlciwgcGFnZV9vZmZzZXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODk0LVxcdGlmIChyZXQgIT0gVk1fRkFVTFRfUkVUUlkpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkxMy1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjkxNDpcXHRcXHRyZXQgPSBibG9ja2luZ19wYWdlX3NldHVwKHZtZiwgb3JkZXIsIGJvLCBwYWdlX29mZnNldCwgZmFsc2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTE1LVxcdFxcdGRybV9nZW1fb2JqZWN0X3B1dChcXHUwMDI2Ym8tXFx1MDAzZWJhc2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MTgtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo5MTk6XFx0cmV0dXJuIGJsb2NraW5nX3BhZ2Vfc2V0dXAodm1mLCBvcmRlciwgYm8sIHBhZ2Vfb2Zmc2V0LCB0cnVlKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjEwLjg4MzU5MDgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxNTQyMjk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBvZiBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCoqXG5cblJpZ2h0LCBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCBqdXN0IGdvdCB0cmlnZ2VyZWQuIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBtZW50YWwgY2hlY2tsaXN0LiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIGZhdWx0IGNvbmRpdGlvbiB3aXRoaW4gYSBQYW50aG9yLWJhc2VkIEdlbSBzeXN0ZW0uIFRoZSBcImFueVwiIHN1Z2dlc3RzIGEgYnJvYWQsIGNhdGNoLWFsbCB0eXBlIG9mIGVycm9yIGRldGVjdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB3aGF0IHRyaWdnZXJlZCB0aGUgY2FsbCBhbmQgd2hhdCBjb250ZXh0IEkgaGF2ZSBhdmFpbGFibGUuIElzIHRoaXMgYSBzeXN0ZW0tbGV2ZWwgZmF1bHQsIGEgY29tcG9uZW50LXNwZWNpZmljIGVycm9yLCBvciBzb21ldGhpbmcgbW9yZSB0cmFuc2llbnQ/XG5cblRoZSBuYW1lIGl0c2VsZiwgKmBwYW50aG9yX2dlbV9hbnlfZmF1bHRgKiwgaW1wbGllcyB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBnZW5lcmljIGZhdWx0IHdpdGhpbiB0aGUgUGFudGhvciBzdWJzeXN0ZW0uIEl0J3Mgbm90IHRhcmdldGluZyBhIHNwZWNpZmljIGdlbSwgYnV0IGEgZmF1bHQgYWZmZWN0aW5nIGFueSBnZW0gaW4gdGhlIHN5c3RlbS4gVGhlIG5leHQgdGhpbmcgSSdkIHdhbnQgdG8ga25vdyBpcyB3aGljaCBnZW0sIG9yIHdoaWNoIG1vZHVsZSB3aXRoaW4gUGFudGhvciwgaXMgdGhlIHNvdXJjZS4gVGhlIGRldGFpbHMgd2lsbCBiZSBjcnVjaWFsIGluIHBpbnBvaW50aW5nIHRoZSByb290IGNhdXNlLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBtZW1vcnkgY29ycnVwdGlvbiwgaW1wcm9wZXIgY29uZmlndXJhdGlvbiwgaW5jb3JyZWN0IGRhdGEgZnJvbSBleHRlcm5hbCBzb3VyY2VzLCBvciBldmVuIGEgaGFyZHdhcmUgaXNzdWUuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN5c3RlbSBsb2dzIGFuZCBhbnkgZXJyb3IgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIHByb3ZpZGVkIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGRldGVybWluZSB3aGVyZSB0aGUgbG9naWMgbWlnaHQgYmUgYnJlYWtpbmcgZG93bi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZXJyb3IgaXMgZHVlIHRvIGFuIGludGVybWl0dGVudCBmYXVsdCwgb3IgYSByZXByb2R1Y2libGUgb25lLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjE0LjM5OTAxNjY1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5OTE0Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JfZ2VtX2FueV9mYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9ODQyPXN0YXRpYyB2bV9mYXVsdF90IGJsb2NraW5nX3BhZ2Vfc2V0dXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODc2LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6ODc3OnN0YXRpYyB2bV9mYXVsdF90IHBhbnRob3JfZ2VtX2FueV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODc4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9OTIyPXN0YXRpYyB2bV9mYXVsdF90IHBhbnRob3JfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTIzLXtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjkyNDpcXHRyZXR1cm4gcGFudGhvcl9nZW1fYW55X2ZhdWx0KHZtZiwgMCk7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MjUtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz05NTk9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwYW50aG9yX2dlbV92bV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTk2MS0jaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTYyOlxcdC5odWdlX2ZhdWx0ID0gcGFudGhvcl9nZW1fYW55X2ZhdWx0LFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTYzLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzoxNC41NTg5NTU0MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyNDI2NDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgUGFudGhvciBHUFUgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmYXVsdCBoYW5kbGVycywgYHBhbnRob3JfZ2VtX2ZhdWx0YCBhbmQgYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAsIHdoaWNoIHNlZW0gdG8gYmUgc3BlY2lmaWMgdG8gdGhlIEdFTSBvYmplY3Qgd2l0aGluIHRoaXMgYHBhbnRob3JgIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYG1tYXBgIG9mIHRoZSBEUk0gZGV2aWNlLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIEkgZXZlbiByZWFjaCBgcGFudGhvcmAgd2l0aGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VP1xuXG5HaXZlbiB0aGF0IGl0J3MgYW4gQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVSBkcml2ZXIsIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjb25zaWRlciB3aGV0aGVyIGl0J3MgZnV6emFibGUuIEZvcnR1bmF0ZWx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciB2aXJ0dWFsIERSTSBkcml2ZXJzLCBtZWFuaW5nIEkgc2hvdWxkIGJlIGFibGUgdG8gZnV6eiBgcGFudGhvcmAgdmlhIERSTSBpb2N0bHMgb3IgYG1tYXBgLiBFdmVuIGlmIHRoaXMgaXMgYSByZWFsIGhhcmR3YXJlIGRyaXZlciwgc3l6a2FsbGVyIGNvdWxkIHBvdGVudGlhbGx5IGhhbmRsZSBpdCB1c2luZyB2Z2VtLCBtb2NrIGRldmljZXMsIG9yIGJ5IGp1c3Qgb3BlbmluZyBgL2Rldi9kcmkvcmVuZGVyRCpgLCBhc3N1bWluZyB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCBvciBpdCBjYW4gaW5pdGlhbGl6ZSB3aXRob3V0IGl0LiBIb3dldmVyLCBpZiBpdCdzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIGl0IG1pZ2h0IG5vdCBwcm9iZSBwcm9wZXJseSB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBodXJkbGUuXG5cblRoaW5raW5nIGZ1cnRoZXIsIHN5emthbGxlciBoYXMgZnVuY3Rpb25zIGZvciBVU0IgYW5kIDgwMi4xMSwgc28gcGVyaGFwcyBpdCBoYXMgc2ltaWxhciB0cmlja3MgZm9yIERSTS4gVGhlIGB2a21zYCBkcml2ZXIgaXMgdmlydHVhbCwgYnV0IHRoaXMgYHBhbnRob3JgIGRyaXZlciBpcyBmb3IgcmVhbCBoYXJkd2FyZS4gTXkgbmV4dCBxdWVzdGlvbiBpczogY2FuIEkgcmVhY2ggYHBhbnRob3JfZ2VtX2ZhdWx0YCB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudD9cblxuR2VuZXJhbGx5LCBJIGtub3cgdGhhdCB0byBgbW1hcGAgYSBHRU0gb2JqZWN0LCBJIHdvdWxkIGZpcnN0IG5lZWQgdG8gY3JlYXRlIGl0LiBBbmQgdG8gY3JlYXRlIGl0LCBJJ2QgbmVlZCB0byBvcGVuIHRoZSBEUk0gZGV2aWNlLiBJZiB0aGUgRFJNIGRldmljZSBkb2Vzbid0IGV4aXN0LCBJJ20gc3R1Y2suIEhvd2V2ZXIsIHN5emthbGxlciBtaWdodCBoYXZlIHNvbWUgY2xldmVyIHdheSBhcm91bmQgdGhpcywgb3IgbWF5YmUgaXQncyBiZWluZyBmdXp6ZWQgb24gcmVhbCBoYXJkd2FyZS5cblxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJvbXB0IHdoaWNoIHNwZWNpZmllcyB0aGF0IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VXCIuIElzIGBwYW50aG9yYCBvbmUgb2YgdGhvc2UgaW1wb3NzaWJsZSBjYXNlcz9cblxuV2FpdCwgc2luY2UgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgaXQgbGlrZWx5IGRlcGVuZHMgb24gYSBkZXZpY2UgdHJlZSBub2RlIHRvIHByb2JlIHByb3Blcmx5LiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuY2AgdG8gc2VlIGhvdyBpdCdzIHByb2JlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9iZSBtZWNoYW5pc20gdG8gZmlndXJlIG91dCBpZiBpdCdzIHZpcnR1YWxpemFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MjIuODgzMjI0MDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3NTcwNDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzoyMy4wMjMwMDA2ODFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NTIwOTczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSB0aGUgcHJvdmlkZWQgdGV4dCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlci4gSGVyZSdzIG15IHRha2U6XG5cbioqQ2hlY2tpbmcgdGhlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBhcmUgaW4gcGxhY2UuIFRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gcHJvcGVyIHJlZ2lzdHJhdGlvbiwgZG9lc24ndCBpdD8gSWYgdGhlIGluaXRpYWwgc2V0dXAgaXNuJ3Qgc291bmQsIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIGFjdGlvbiBpcyBsaWtlbHkgdG8gYmUgZmxhd2VkLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaG93IHRoaXMgY29tcG9uZW50LCBwcm9jZXNzLCBvciB3aGF0ZXZlciB0aGUgc3ViamVjdCBpcywgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgcHJvcGVybHkgZG9jdW1lbnRlZD8gQXJlIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseSBkZWZpbmVkPyBJcyB0aGVyZSBhIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBJIGNhbiBjaGVjaywgb3IgZG8gSSBuZWVkIHRvIHRyYWNlIGl0IHRocm91Z2ggbXVsdGlwbGUgbW9kdWxlcz8gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBhdWRpdCBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2NlZHVyZSBpdHNlbGYuIFRoYXQncyB0aGUgZmlyc3QgY3JpdGljYWwgc3RlcCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MjYuMjk4MjEzNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY3MDYxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdHxwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM9MTkwNj1zdGF0aWMgaW50IF9faW5pdCBwYW50aG9yX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE5MjE6XFx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZwYW50aG9yX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE5MzMtfVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTkzNDptb2R1bGVfaW5pdChwYW50aG9yX2luaXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MjYuNDA5ODkwOTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MTM0NzgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaWFiaWxpdHkgb2YgRnV6emluZyBhIFBsYXRmb3JtIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGFuZCB0aGUgaW1tZWRpYXRlIHRob3VnaHQgaXM6IHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEluIHRoZSB1c3VhbCBHQ0UvUUVNVSBzZXR1cCwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBtb2NrIG9yIGEgd2VsbC1jcmFmdGVkIGRldmljZSB0cmVlIG92ZXJsYXksIHRoZXNlIEFSTSBNYWxpIEdQVSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSBqdXN0IG5vdCBnb2luZyB0byBwcm9iZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBvbmUgaXMgYW4gZXhjZXB0aW9uLlxuXG5Ob3csIHdhaXQuLi4gZG9lcyBTeXprYWxsZXIgaGF2ZSBzb21lIHRyaWNrIHVwIGl0cyBzbGVldmUgdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHNvbWV0aGluZyB3aXRoIGBzeXpfZGV2ZnJlcV9hZGRfZGV2aWNlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIEkgZG9uJ3QgdGhpbmsgaXQgZG9lcy4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhICpnZW5lcmljKiB3YXkgdG8gcHJvYmUgYXJiaXRyYXJ5IHBsYXRmb3JtIGRyaXZlcnMgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBzdXBwb3J0ZWQsIGxpa2Ugd2l0aCBgdmttc2AuXG5cbk9oLCB3YWl0IGEgc2Vjb25kLCBJIHJlbWVtYmVyIGBzeXpfaW5pdF9uZXRfc29ja2V0YCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYWRkIGRldmljZXMhXG5cbk9rYXksIHNvIHdoYXQgYWJvdXQgdGhpcyBzcGVjaWZpYyBkcml2ZXIsIGBwYW50aG9yYCwgaXMgU3l6a2FsbGVyIGFscmVhZHkgZnV6emluZyBpdD8gSSBuZWVkIHRvIGNoZWNrLlxuXG5Pa2F5LCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5czpcbmBgYFxuY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxODo0Mjo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcbmBgYFxuVGhpcyBsb29rcyBsaWtlIFN5emthbGxlciBpcyB0ZXN0aW5nIGEgcGF0Y2gsIHJpZ2h0PyBTbywgbWF5YmUgdGhhdCBtZWFucyBpdCdzIHJlYWNoYWJsZT8gT3IgaXMgaXQgc2ltcGx5IGEgc3VibWl0dGVkIHBhdGNoIHRoYXQncyBiZWluZyB0ZXN0ZWQgYW5kIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IHZhbHVlIGluIGZ1enppbmcgaXQ/XG5cbklmIHRoaXMgaXMgYW4gQVJNIE1hbGkgR1BVIGRyaXZlciwgaXQncyBoaWdobHkgbGlrZWx5IGl0J3Mgb25seSBnb2luZyB0byBiZSByZWFjaGFibGUgb24gQVJNIGhhcmR3YXJlLCBvciBpZiB0aGVyZSdzIHNvbWUgc29ydCBvZiBtb2NrIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24uXG5cbk9rYXksIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIG1vY2sgZm9yIGBwYW50aG9yYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzozMy44MjMzNzI1NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzA0ODI5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFudGhvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MzQuMjEwNDI4OTM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDg1OTQ0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGlzIGBEUk1fUEFOVEhPUmAgZmxhZyBtZW50aW9uZWQgaW4gcmVsYXRpb24gdG8gc3l6a2FsbGVyLCBidXQgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhvc2UgZGVzY3JpcHRpb25zLiBUaGF0J3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEJ1dCwgdGhlIHByb21wdCBpcyBrZXk6IGl0J3MgZm9jdXNpbmcgb24gY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9ucyBvZiBoYXJkd2FyZSwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBlcnRhaW4gdG8gc29tZXRoaW5nIGxpa2UgYERSTV9QQU5USE9SYD9cblxuSWYgdGhpcyBmbGFnIHJlbGF0ZXMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIsIGVzcGVjaWFsbHkgZm9yIGFuIFNvQyBvciBHUFUsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIHRyaWdnZXJlZCBpbiBhIHN0YW5kYXJkIHg4NiBRRU1VIG9yIEdDRSBzZXR1cCB1bmxlc3MgdGhlcmUncyBzb21lIGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0b3IgYXZhaWxhYmxlLCB3aGljaCBpcyB1bmxpa2VseSBmb3Igc29tZXRoaW5nIGxpa2UgQVJNIE1hbGkgQ1NGIChhcyB0aGVyZSBpcyBubyBlbXVsYXRvciB1cHN0cmVhbSkuIFRodXMsIHRoZSBxdWVzdGlvbiBpcyBub3c6IENhbiBpdCBiZSBhY2Nlc3NlZCB2aWEgYSBnZW5lcmljIG1lY2hhbmlzbT9cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzozOC42MTkwMjU3MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzMxNzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xODgyPXN0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHBhbnRob3JfcG1fb3BzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODg2LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTg4NzpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYW50aG9yX2RyaXZlciA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4ODgtXFx0LnByb2JlID0gcGFudGhvcl9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM9MTkwNj1zdGF0aWMgaW50IF9faW5pdCBwYW50aG9yX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE5MjE6XFx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZwYW50aG9yX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE5MzY9c3RhdGljIHZvaWQgX19leGl0IHBhbnRob3JfZXhpdCh2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkzNy17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxOTM4OlxcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZwYW50aG9yX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTM5LVxcdGRlc3Ryb3lfd29ya3F1ZXVlKHBhbnRob3JfY2xlYW51cF93cSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjM4LjczNjM1MDg2NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY2NTgwMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBwYW50aG9yX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBwYW50aG9yX3Byb2JlYCB0aGluZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBiZXlvbmQgYSBzdXBlcmZpY2lhbCBzY2FuLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0OiBEb2VzIHRoZSBuYW1lIGl0c2VsZiBvZmZlciBhbnkgY2x1ZXM/IElzIGl0IGluZGljYXRpdmUgb2YgYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBvciBtZXRob2RvbG9neT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgXCJwcm9iZVwiIGltcGxpZXMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIGRpYWdub3N0aWMgdG9vbCwgYSBkYXRhIGNvbGxlY3Rpb24gbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgbW9yZSBuZWZhcmlvdXM/IEtub3dpbmcgdGhlIGVudmlyb25tZW50IGl0J3Mgb3BlcmF0aW5nIGluIGlzIGtleSDigJMgdGhlIHBsYXRmb3JtLCB0aGUgdGFyZ2V0IHN5c3RlbSwgdGhlIGFzc29jaWF0ZWQgc2VjdXJpdHkgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGZpZ3VyaW5nIG91dCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGFjdGluZyBpbiBhIGJlbmlnbiB3YXksIG9yIGlzIHRoZXJlIGEgY2hhbmNlIGl0IGhhcyBvdGhlciwgbGVzcyBvYnZpb3VzIHB1cnBvc2VzPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byBnZXQgdG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mzo0MS44MDI5MzQ0NzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzIzMTA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4MDc9TU9EVUxFX1BBUk1fREVTQyh0cmFuc3BhcmVudF9odWdlcGFnZSwgXFxcIlVzZSBhIGRlZGljYXRlZCB0bXBmcyBtb3VudCBwb2ludCB3aXRoIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGVuYWJsZWQgKHRydWUgPSBkZWZhdWx0KVxcXCIpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODA5LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTgxMDpzdGF0aWMgaW50IHBhbnRob3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MTEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xODg3PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhbnRob3JfZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTg4ODpcXHQucHJvYmUgPSBwYW50aG9yX3Byb2JlLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTg4OS1cXHQucmVtb3ZlID0gcGFudGhvcl9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjQxLjkzMDE3NDk5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2ODE2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVW5kZXJzdGFuZGluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBjb21tYW5kIGBwYW50aG9yX3Byb2JlYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBmdW5jdGlvbiBiZWZvcmUgSSBjYW4gcHJvY2VlZC4gTm8gcG9pbnQganVtcGluZyBpbiBibGluZGx5IOKAkyBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhpcyB0b29sIGlzIHN1cHBvc2VkIHRvIGJlIGRvaW5nLiBXaGF0IGRvZXMgaXQgbWVhc3VyZT8gV2hhdCBkYXRhIGRvZXMgaXQgb3V0cHV0PyBXaGF0IHN5c3RlbXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGlzIGluaXRpYWwgcHJvYmUgaXMgY3J1Y2lhbCBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mzo0NS4wNzY5OTQ1MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxMDpcXHRzdGF0aWMgaW50IHBhbnRob3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xODExOlxcdHtcXG4xODEyOlxcdFxcdHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXY7XFxuMTgxMzpcXHRcXG4xODE0OlxcdFxcdHB0ZGV2ID0gZGV2bV9kcm1fZGV2X2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZwYW50aG9yX2RybV9kcml2ZXIsXFxuMTgxNTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFudGhvcl9kZXZpY2UsIGJhc2UpO1xcbjE4MTY6XFx0XFx0aWYgKElTX0VSUihwdGRldikpXFxuMTgxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODE4OlxcdFxcbjE4MTk6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHRkZXYpO1xcbjE4MjA6XFx0XFxuMTgyMTpcXHRcXHRyZXR1cm4gcGFudGhvcl9kZXZpY2VfaW5pdChwdGRldik7XFxuMTgyMjpcXHR9XFxuMTgyMzpcXHRcXG4xODI0OlxcdHN0YXRpYyB2b2lkIHBhbnRob3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuMTgyNTpcXHR7XFxuMTgyNjpcXHRcXHRzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuMTgyNzpcXHRcXG4xODI4OlxcdFxcdHBhbnRob3JfZGV2aWNlX3VucGx1ZyhwdGRldik7XFxuMTgyOTpcXHR9XFxuMTgzMDpcXHRcXG4xODMxOlxcdHN0YXRpYyBzc2l6ZV90IHByb2ZpbGluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4xODMyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjE4MzM6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbjE4MzQ6XFx0e1xcbjE4MzU6XFx0XFx0c3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjE4MzY6XFx0XFxuMTgzNzpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgcHRkZXYtXFx1MDAzZXByb2ZpbGVfbWFzayk7XFxuMTgzODpcXHR9XFxuMTgzOTpcXHRcXG4xODQwOlxcdHN0YXRpYyBzc2l6ZV90IHByb2ZpbGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuMTg0MTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuMTg0MjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjE4NDM6XFx0e1xcbjE4NDQ6XFx0XFx0c3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjE4NDU6XFx0XFx0dTMyIHZhbHVlO1xcbjE4NDY6XFx0XFx0aW50IGVycjtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0ZXJyID0ga3N0cnRvdTMyKGJ1ZiwgMCwgXFx1MDAyNnZhbHVlKTtcXG4xODQ5OlxcdFxcdGlmIChlcnIpXFxuMTg1MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRpZiAoKHZhbHVlIFxcdTAwMjYgflBBTlRIT1JfREVWSUNFX1BST0ZJTElOR19BTEwpICE9IDApXFxuMTg1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODU0OlxcdFxcbjE4NTU6XFx0XFx0cHRkZXYtXFx1MDAzZXByb2ZpbGVfbWFzayA9IHZhbHVlO1xcbjE4NTY6XFx0XFxuMTg1NzpcXHRcXHRyZXR1cm4gbGVuO1xcbjE4NTg6XFx0fVxcbjE4NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjQ1LjA3NzI3NDcwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQzNzUzMDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGFudGhvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXNzZWN0aW5nIHRoZSBQYW50aG9yIERldmljZSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIGBwYW50aG9yX2RldmljZV9pbml0YC4uLiBteSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdG8gYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBkZXZpY2UgaXMgdGhpcz8gSXMgaXQgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcj8gQSBzcGVjaWZpYyBkcml2ZXI/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IEknbSBhbHJlYWR5IG1lbnRhbGx5IGNyZWF0aW5nIGEgZmxvd2NoYXJ0LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3IgaGFyZHdhcmUgY29tcG9uZW50cy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb21tb24gcGl0ZmFsbHMgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uOiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyB0aG9zZSBhcmUgYWRkcmVzc2VkLlxuXG5JJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgc3RlcHMgcmVxdWlyZWQgdG8gYnJpbmcgYSBcIlBhbnRob3JcIiBkZXZpY2Ugb25saW5lLiBJJ20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgbGlrZWx5IG9wZXJhdGlvbnM6IHBvd2VyLXVwIHNlcXVlbmNpbmcsIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24sIGludGVycnVwdCBzZXR1cCwgbWF5YmUgc29tZSBoYXJkd2FyZSB0ZXN0aW5nLCBhbmQgZXJyb3IgY29kZSBjaGVja3MuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBhbmQgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggb3RoZXIgc3lzdGVtIHNlcnZpY2VzIGxpa2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIG9yIHBvd2VyIG1hbmFnZW1lbnQuXG5cbkEgd2VsbC13cml0dGVuIGltcGxlbWVudGF0aW9uIHdvdWxkIGNvbnNpZGVyIHBvd2VyLXNhdmluZywgcG90ZW50aWFsbHkgZW5hYmxpbmcgZGV2aWNlLXNwZWNpZmljIGNsb2NrcyBhbmQgcG93ZXIgZG9tYWlucyBvbmx5IHdoZW4gbmVjZXNzYXJ5LiBJdCBwcm9iYWJseSBpbmNsdWRlcyBhIHJvYnVzdCBlcnJvci1jaGVja2luZyBtZWNoYW5pc20gd2l0aCBjbGVhciBsb2dnaW5nIGZvciBkZWJ1Z2dpbmcuIElmIEkgc2VlIGFueSBjcml0aWNhbCBzZWN0aW9ucywgSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlbSBmb3IgcHJvcGVyIG11dGV4IHVzYWdlIG9yIGFueSBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSdsbCBtZW50YWxseSBldmFsdWF0ZSB0aGUgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ3k6IGRvZXMgaXQgcmV0cnksIGxvZyBlcnJvcnMsIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2Rlcywgb3IgdHJpZ2dlciBhIHN5c3RlbSByZXNldD8gSSdkIGV4cGVjdCBjb21wcmVoZW5zaXZlIGxvZ2dpbmcgdG8gYWlkIHdpdGggZGVidWdnaW5nLCBlc3BlY2lhbGx5IGR1cmluZyBlYXJseSBicmluZy11cCBvciBpZiBJIGVuY291bnRlciBkZXZpY2Utc3BlY2lmaWMgaXNzdWVzIGxhdGVyLiBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhcmVmdWxseSBkZXNpZ25lZCB0byBwcmV2ZW50IGFueSBkZWFkbG9ja3Mgb3Igc3lzdGVtIGluc3RhYmlsaXR5IGR1cmluZyBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NDkuMDIxMDMxMjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzA2NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yX2RldmljZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jPTE2MT1zdGF0aWMgdm9pZCBwYW50aG9yX2RldmljZV9mcmVlX3BhZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jLTE2NS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jOjE2NjppbnQgcGFudGhvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMTY3LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmg9MzQyPXN0cnVjdCBwYW50aG9yX2ZpbGUge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC0zNzMtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDozNzQ6aW50IHBhbnRob3JfZGV2aWNlX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC0zNzUtdm9pZCBwYW50aG9yX2RldmljZV91bnBsdWcoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4MTA9c3RhdGljIGludCBwYW50aG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MjAtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxODIxOlxcdHJldHVybiBwYW50aG9yX2RldmljZV9pbml0KHB0ZGV2KTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MjItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mzo0OS4xMzQxMDMyMThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNzI0MjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEaXZpbmcgaW50byBgcGFudGhvcl9kZXZpY2VfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzIGBwYW50aG9yX2RldmljZV9pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZGV2aWNlIGlzIGJlaW5nIGluaXRpYWxpemVkLCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmFrZWQgaW4gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHRoZSBoaWdoLWxldmVsIGZsb3cg4oCTIHdoYXQncyB0aGUgdHlwaWNhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uOioqIFdoYXQgbWVtb3J5LCBpbnRlcnJ1cHQgbGluZXMsIG9yIG90aGVyIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgY2xhaW1lZCBkdXJpbmcgdGhpcyBpbml0aWFsaXphdGlvbj8gQW55IHVudXN1YWwgb3IgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcgYWxsb2NhdGlvbnMgYXJlIG9mIGltbWVkaWF0ZSBjb25jZXJuLlxuKiAgICoqSGFyZHdhcmUgY29uZmlndXJhdGlvbjoqKiBBcmUgcmVnaXN0ZXJzIGJlaW5nIHdyaXR0ZW4gdG8/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHZhbHVlcyBiZWluZyBzZXQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtYWdpYyBudW1iZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCBkZWVwZXIgY29udGV4dD9cbiogICAqKkRyaXZlciByZWdpc3RyYXRpb246KiogSXMgdGhpcyBjb2RlIGludGVncmF0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGRldmljZSBtb2RlbCBpbiBhbnkgd2F5PyBXaGF0J3MgdGhlIGludGVyZmFjZSB1c2VkLCBhbmQgZG9lcyBpdCBzZWVtIHN0YW5kYXJkIG9yIGN1c3RvbT8gV2hhdCBjYWxsYmFja3MgZ2V0IHJlZ2lzdGVyZWQsIGFuZCB3aGF0IGFyZSB0aGVpciBoYW5kbGVycz9cbiogICAqKkVycm9yIGhhbmRsaW5nOioqIElzIHRoaXMgaW5pdGlhbGl6YXRpb24gcm9idXN0PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBmYWlsdXJlIGF0IGVhY2ggc3RlcD8gQXJlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBoYW5kbGVkIGdyYWNlZnVsbHkgb3IgY2FuIHRoZSBkZXZpY2UgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3IgbW9kdWxlcz8gV2hlcmUgd2lsbCBJIGxvb2sgbmV4dD9cblxuSSdsbCBiZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYXJlYXMgd2hlcmUgdGhlIHN5c3RlbSBjYW4gYmUgYmxvY2tlZCBieSBJL08sIGFzIHRoaXMgaXMgYWx3YXlzIGEgc291cmNlIG9mIGVycm9ycyBpbiBkZXZpY2UgZHJpdmVycy5cblxuSSdsbCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgdGltaW5nIGNvbnNpZGVyYXRpb25zIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGdvb2QgZXhlcmNpc2UgZm9yIGZpbmRpbmcgaGlkZGVuIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTIxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NTMuMDQxMzQ5NjMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NjpcXHRpbnQgcGFudGhvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcbiAxNjc6XFx0e1xcbiAxNjg6XFx0XFx0dTMyICpkdW1teV9wYWdlX3ZpcnQ7XFxuIDE2OTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4gMTcwOlxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbiAxNzE6XFx0XFx0aW50IHJldDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0cHRkZXYtXFx1MDAzZXNvY19kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKHB0ZGV2LVxcdTAwM2ViYXNlLmRldik7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cHRkZXYtXFx1MDAzZXVucGx1Zy5kb25lKTtcXG4gMTc2OlxcdFxcdHJldCA9IGRybW1fbXV0ZXhfaW5pdChcXHUwMDI2cHRkZXYtXFx1MDAzZWJhc2UsIFxcdTAwMjZwdGRldi1cXHUwMDNldW5wbHVnLmxvY2spO1xcbiAxNzc6XFx0XFx0aWYgKHJldClcXG4gMTc4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdHJldCA9IGRybW1fbXV0ZXhfaW5pdChcXHUwMDI2cHRkZXYtXFx1MDAzZWJhc2UsIFxcdTAwMjZwdGRldi1cXHUwMDNlcG0ubW1pb19sb2NrKTtcXG4gMTgxOlxcdFxcdGlmIChyZXQpXFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODM6XFx0XFxuIDE4NDpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxuIDE4NTpcXHRcXHRkcm1tX211dGV4X2luaXQoXFx1MDAyNnB0ZGV2LVxcdTAwM2ViYXNlLCBcXHUwMDI2cHRkZXYtXFx1MDAzZWdlbXMubG9jayk7XFxuIDE4NjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHRkZXYtXFx1MDAzZWdlbXMubm9kZSk7XFxuIDE4NzpcXHQjZW5kaWZcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHRkZXYtXFx1MDAzZXBtLnN0YXRlLCBQQU5USE9SX0RFVklDRV9QTV9TVEFURV9TVVNQRU5ERUQpO1xcbiAxOTA6XFx0XFx0cCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiAxOTE6XFx0XFx0aWYgKCFwKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdHB0ZGV2LVxcdTAwM2VwbS5kdW1teV9sYXRlc3RfZmx1c2ggPSBwO1xcbiAxOTU6XFx0XFx0ZHVtbXlfcGFnZV92aXJ0ID0gcGFnZV9hZGRyZXNzKHApO1xcbiAxOTY6XFx0XFx0cmV0ID0gZHJtbV9hZGRfYWN0aW9uX29yX3Jlc2V0KFxcdTAwMjZwdGRldi1cXHUwMDNlYmFzZSwgcGFudGhvcl9kZXZpY2VfZnJlZV9wYWdlLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHB0ZGV2LVxcdTAwM2VwbS5kdW1teV9sYXRlc3RfZmx1c2gpO1xcbiAxOTg6XFx0XFx0aWYgKHJldClcXG4gMTk5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdC8qXFxuIDIwMjpcXHRcXHQgKiBTZXQgdGhlIGR1bW15IHBhZ2UgaG9sZGluZyB0aGUgbGF0ZXN0IGZsdXNoIHRvIDEuIFRoaXMgd2lsbCBjYXVzZSB0aGVcXG4gMjAzOlxcdFxcdCAqIGZsdXNoIHRvIGF2b2lkZWQgYXMgd2Uga25vdyBpdCBpc24ndCBuZWNlc3NhcnkgaWYgdGhlIHN1Ym1pc3Npb25cXG4gMjA0OlxcdFxcdCAqIGhhcHBlbnMgd2hpbGUgdGhlIGR1bW15IHBhZ2UgaXMgbWFwcGVkLiBaZXJvIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2VcXG4gMjA1OlxcdFxcdCAqIHRoYXQgbWVhbnMgJ2Fsd2F5cyBmbHVzaCcuXFxuIDIwNjpcXHRcXHQgKi9cXG4gMjA3OlxcdFxcdCpkdW1teV9wYWdlX3ZpcnQgPSAxO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnB0ZGV2LVxcdTAwM2VyZXNldC53b3JrLCBwYW50aG9yX2RldmljZV9yZXNldF93b3JrKTtcXG4gMjEwOlxcdFxcdHB0ZGV2LVxcdTAwM2VyZXNldC53cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJwYW50aG9yLXJlc2V0LXdxXFxcIiwgMCk7XFxuIDIxMTpcXHRcXHRpZiAoIXB0ZGV2LVxcdTAwM2VyZXNldC53cSlcXG4gMjEyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMTM6XFx0XFxuIDIxNDpcXHRcXHRyZXQgPSBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnB0ZGV2LVxcdTAwM2ViYXNlLCBwYW50aG9yX2RldmljZV9yZXNldF9jbGVhbnVwLCBOVUxMKTtcXG4gMjE1OlxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjUzLjA0MTU1MzM0MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA2NzE0MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBEUk0gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGEgdHlwaWNhbCBEUk0gc2V0dXAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZWZmZWN0aXZlbHkgZnV6eiBgcGFudGhvcmAgdXNpbmcgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGludGVyZXN0aW5nIHN5c2NhbGxzIGZvciBkZXZpY2UgbWFuYWdlbWVudCwgbGlrZSBgc3l6X2RldmZyZXFfYWRkX2RldmljZWAsIGJ1dCB0aGF0J3MgcmVhbGx5IGZvciBkZXZmcmVxLiBUaGVuIHRoZXJlJ3MgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIGFuZCBgc3l6XzgwMjExX2pvaW5faWJzc2AgZm9yIHRoaW5ncyBsaWtlIFVTQiBhbmQgd2lyZWxlc3MuLi4gYnV0IG5vdGhpbmcgZGlyZWN0bHkgZm9yIERSTSBiZXlvbmQgdGhhdCBgdmttc2AgdmlydHVhbCBzZXR1cC5cblxuSGFuZyBvbiwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X29wZW5fZGV2YCwgcmlnaHQ/IFdlIGNhbiB1c2UgdGhhdCB0byBvcGVuIGRldmljZXMgbGlrZSBgL2Rldi9kcmkvcmVuZGVyRDEyOGAsIHdoaWNoIGlzIHByb21pc2luZy4gQnV0IGlmIGBwYW50aG9yYCBpc24ndCBsb2FkZWQsIG9wZW5pbmcgaXQgd29uJ3QgZG8gYW55dGhpbmcuIFRoZSBjcml0aWNhbCBwb2ludCBpcywgY2FuIHN5emthbGxlciBydW4gb24gYSBkZXZpY2UgdGhhdCAqZG9lcyogaGF2ZSBgcGFudGhvcmAgc3VwcG9ydD8gV2UncmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgYW4gQVJNIGJvYXJkIHdpdGggTWFsaSBDU0YuXG5cblRoZSBwcm9tcHQsIHRob3VnaCwgc2F5cyB0aGUgY29kZSBwYXRocyB3ZSdyZSBpbnRlcmVzdGVkIGluIGFyZSBvZnRlbiB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gSXMgYHBhbnRob3JgIG9uZSBvZiB0aG9zZSB1bnJlYWNoYWJsZSBwYXRocz8gQWJzb2x1dGVseS4gSXTigJlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgQVJNIE1hbGkgQ1NGLiBUaGVyZSdzIG5vIGVxdWl2YWxlbnQgc29mdHdhcmUgZW11bGF0b3IgaW4gUUVNVSBvciBldmVuIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZiwgbGlrZSB0aGVyZSBpcyBmb3IgYHZrbXNgLlxuXG5Ib2xkIG9uLCBtYXliZSB0aGVyZSdzIGEgbW9jayBvciB2aXJ0dWFsIGRldmljZSB3aXRoaW4gdGhlIGBwYW50aG9yYCBkaXJlY3RvcnkuIExldCdzIGNoZWNrIGBkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9gIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgdHJpY2tlcnkgd2UgY2FuIGV4cGxvaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NTkuMjQ4MjcwODA4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEyNzQyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja3x2aXJ0dWFsfHZrbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYz0xMjM9c3RydWN0IHBhbnRob3JfZndfYmluYXJ5X3NlY3Rpb25fZW50cnlfaGRyIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy0xMjYtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jOjEyNzpcXHQvKiogQHZhOiBNQ1UgdmlydHVhbCByYW5nZSB0byBtYXAgdGhpcyBiaW5hcnkgc2VjdGlvbiB0by4gKi9cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmMtMTI4LVxcdHN0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmM9NTM5PXN0YXRpYyBpbnQgcGFudGhvcl9md19sb2FkX3NlY3Rpb25fZW50cnkoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy01NzMtXFx0aWYgKCFJU19BTElHTkVEKGhkci52YS5zdGFydCwgdm1fcGdzeikgfHwgIUlTX0FMSUdORUQoaGRyLnZhLmVuZCwgdm1fcGdzeikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmM6NTc0OlxcdFxcdGRybV9lcnIoXFx1MDAyNnB0ZGV2LVxcdTAwM2ViYXNlLCBcXFwiRmlybXdhcmUgY29ycnVwdGVkLCB2aXJ0dWFsIGFkZHJlc3NlcyBub3QgcGFnZSBhbGlnbmVkOiAweCV4LTB4JXhcXFxcblxcXCIsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jLTU3NS1cXHRcXHRcXHRoZHIudmEuc3RhcnQsIGhkci52YS5lbmQpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz0xMjQ3PXZvaWQgcGFudGhvcl9rZXJuZWxfYm9fZGVzdHJveShzdHJ1Y3QgcGFudGhvcl9rZXJuZWxfYm8gKmJvKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMjc4LSAqIEBncHVfdmE6IEdQVSBhZGRyZXNzIGFzc2lnbmVkIHdoZW4gbWFwcGluZyB0byB0aGUgVk0uXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzoxMjc5OiAqIElmIGdwdV92YSA9PSBQQU5USE9SX1ZNX0tFUk5FTF9BVVRPX1ZBLCB0aGUgdmlydHVhbCBhZGRyZXNzIHdpbGwgYmVcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTEyODAtICogYXV0b21hdGljYWxseSBhbGxvY2F0ZWQuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTE1NT1zdHJ1Y3QgcGFudGhvcl92bV9vcF9jdHgge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMTctICpcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIxODogKiBBIFZNIGlzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBHUFUgKG9yIE1DVSkgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjE5LSAqIEl0IGVtYmVkcyB0aGUgTU1VIHBhZ2UgdGFibGUgZm9yIHRoaXMgYWRkcmVzcyBzcGFjZSwgYSB0cmVlIGNvbnRhaW5pbmdcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyMDogKiBhbGwgdGhlIHZpcnR1YWwgbWFwcGluZ3Mgb2YgR0VNIG9iamVjdHMsIGFuZCBvdGhlciB0aGluZ3MgbmVlZGVkIHRvIG1hbmFnZVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjIxLSAqIHRoZSBWTS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjI2LSAqXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzoyMjc6ICogQSBwb3J0aW9uIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIGtlcm5lbCBvYmplY3RzLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MjI4OiAqIGxpa2UgaGVhcCBjaHVua3MsIGFuZCB1c2Vyc3BhY2UgZ2V0cyB0byBkZWNpZGUgaG93IG11Y2ggb2YgdGhlIHZpcnR1YWxcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyOTogKiBhZGRyZXNzIHNwYWNlIGlzIGxlZnQgdG8gdGhlIGtlcm5lbCAoaGFsZiBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMzAtICogYnkgZGVmYXVsdCkuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTQ1Mj1zdGF0aWMgdm9pZCAqYWxsb2NfcHQodm9pZCAqY29va2llLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy00ODUtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzo0ODY6XFx0LyogUGFnZSB0YWJsZSBlbnRyaWVzIGRvbid0IHVzZSB2aXJ0dWFsIGFkZHJlc3Nlcywgd2hpY2ggdHJpcHMgb3V0XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy00ODctXFx0ICoga21lbWxlYWsuIGttZW1sZWFrX2FsbG9jX3BoeXMoKSBtaWdodCB3b3JrLCBidXQgcGh5c2ljYWwgYWRkcmVzc2VzXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTE0MTQ9c3RhdGljIHZvaWQgcGFudGhvcl92bV9wcmVwYXJlX3N5bmNfb25seV9vcF9jdHgoc3RydWN0IHBhbnRob3Jfdm1fb3BfY3R4ICpvcF9jdHgsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjEtLyoqXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzoxNDIyOiAqIHBhbnRob3Jfdm1fZ2V0X2JvX2Zvcl92YSgpIC0gR2V0IHRoZSBHRU0gb2JqZWN0IG1hcHBlZCBhdCBhIHZpcnR1YWwgYWRkcmVzc1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTQyMy0gKiBAdm06IFZNIHRvIGxvb2sgaW50by5cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjQtICogQHZhOiBWaXJ0dWFsIGFkZHJlc3MgdG8gc2VhcmNoIGZvci5cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjE0MjU6ICogQGJvX29mZnNldDogT2Zmc2V0IG9mIHRoZSBHRU0gb2JqZWN0IG1hcHBlZCBhdCB0aGlzIHZpcnR1YWwgYWRkcmVzcy5cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjYtICogT25seSB2YWxpZCBvbiBzdWNjZXNzLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuaD03Nz1ib29sIHBhbnRob3Jfdm1faXNfdW51c2FibGUoc3RydWN0IHBhbnRob3Jfdm0gKnZtKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmgtODAtICogUEFOVEhPUl9WTV9LRVJORUxfQVVUT19WQTogVXNlIHRoaXMgbWFnaWMgYWRkcmVzcyB3aGVuIHlvdSB3YW50IHRoZSBHRU1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5oOjgxOiAqIGxvZ2ljIHRvIGF1dG8tYWxsb2NhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgcmVzZXJ2ZWQga2VybmVsIFZBIHJhbmdlLlxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmgtODItICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM9MzUwPXN0cnVjdCBwYW50aG9yX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy00MDctXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jOjQwODpcXHRcXHQvKiogQGlmYWNlLmlucHV0X2Z3X3ZhOiBGVyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGludGVyZmFjZSBidWZmZXIuICovXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTQwOS1cXHRcXHR1MzIgaW5wdXRfZndfdmE7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTQxMC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM6NDExOlxcdFxcdC8qKiBAaWZhY2Uub3V0cHV0X2Z3X3ZhOiBGVyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIG91dHB1dCBpbnRlcmZhY2UgYnVmZmVyLiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy00MTItXFx0XFx0dTMyIG91dHB1dF9md192YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NTkuODQ5NTUyODUzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0Nzg0MzA3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBhIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhlcmUncyBubyBtZW50aW9uIG9mIGEgbW9jayBoZXJlLCBzbyB0aGF0J3MgaXJyZWxldmFudC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzOiBzeXprYWxsZXIgaXMgdGVzdGluZyBhIHBhdGNoLCB3aGljaCBtZWFucyBpdCdzIHJ1bm5pbmcgZWl0aGVyIG9uIHJlYWwgQVJNIGhhcmR3YXJlIG9yIFFFTVUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgcHJlc2VuY2Ugb2YgYSBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiIGNvbW1pdCBtZXNzYWdlIGNvbmZpcm1zIHRoYXQgdGhpcyBwYXRjaCB3YXMgc2VudCB0byBzeXpib3QgZm9yIHRlc3RpbmcuIFNpbmNlIHN5emthbGxlciBpcyBzZXQgdXAgdG8gdGVzdCBwYXRjaGVzIG9uIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGUgYnVnIHdhcyBmb3VuZCwgYW5kIGlmIHRoZSBidWcgd2FzIGZvdW5kIG9uIGFuIEFSTSBib2FyZCwgdGhlIHBhdGNoIHdpbGwgYmUgdGVzdGVkIHRoZXJlLlxuXG5UaGUgcHJvbXB0IGlzIHRoZSBrZXkgaGVyZS4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEl0IHNlZW1zIHByZXR0eSBjbGVhci4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIHBhdGNoJ3MgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGluIEdDRS9RRU1VLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGUgY29kZSBwYXRocyBhZGRlZCBieSBgcGFudGhvcmAgYXJlIHJlYWNoYWJsZS4gSXMgYHBhbnRob3JgIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFL1FFTVU/IElmIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIGBwYW50aG9yYCB3aXRoaW4gUUVNVSwgaXQncyB1bnJlYWNoYWJsZS4gQnV0LCB3YWl0LCBzeXprYWxsZXIgY291bGQgYmUgcnVubmluZyBvbiByZWFsIGhhcmR3YXJlLiBUaGF0IGRvZXNuJ3QgbWF0dGVyOyB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyBJIHNob3VsZCBsb29rIGF0IHJlYWNoYWJpbGl0eSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG11c3QgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IGlzIG9ubHkgcmVhY2hhYmxlIG9uIHJlYWwgaGFyZHdhcmUuXG5cblRvIGJlIGV4dHJhIHN1cmUsIEknbGwgcmVhZCB0aGF0IGFnYWluOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBZZXMsIGl0J3MgdmVyeSBjbGVhci5cblxuU28sICppcyogYHBhbnRob3JgIHJlYWNoYWJsZT8gSXQncyBhIHBsYXRmb3JtIGRyaXZlci4gQ2FuIGl0IGJlIHByb2JlZCB3aXRoIGEgZGV2aWNlIHRyZWUgb3ZlcmxheSBpbiBRRU1VPyBNYXliZS4gQnV0IGV2ZW4gaWYgaXQgKmNhbiogYmUgcHJvYmVkLCBkb2VzIGl0IHJlcXVpcmUgYWNjZXNzIHRvIHJlYWwgaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIG5vdCBmYWlsIHRoZSBwcm9iZT8gSSBuZWVkIHRvIGFuYWx5emUgYHBhbnRob3JfZGV2aWNlX2luaXRgIGFuZCBgcGFudGhvcl9wcm9iZWAgdG8gZGV0ZXJtaW5lIGlmIHRob3NlIGZ1bmN0aW9ucyBhY2Nlc3MgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhcyB0aGF0IHdvdWxkIG1ha2UgdGhpcyBjb2RlIHBhdGggdW5yZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjA5LjMyNzk4Njk2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY5NjA1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9pb3JlbWFwfHJlYWRsfHdyaXRlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaD02MzA9c3RhdGljIGlubGluZSB2b2lkIGdwdV93cml0ZSh2b2lkIF9faW9tZW0gKmlvbWVtLCB1MzIgcmVnLCB1MzIgZGF0YSlcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTYzMS17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2MzI6XFx0d3JpdGVsKGRhdGEsIGlvbWVtICsgcmVnKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTYzMy19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTYzNT1zdGF0aWMgaW5saW5lIHUzMiBncHVfcmVhZCh2b2lkIF9faW9tZW0gKmlvbWVtLCB1MzIgcmVnKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjM2LXtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oOjYzNzpcXHRyZXR1cm4gcmVhZGwoaW9tZW0gKyByZWcpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjM4LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmg9NjQwPXN0YXRpYyBpbmxpbmUgdTMyIGdwdV9yZWFkX3JlbGF4ZWQodm9pZCBfX2lvbWVtICppb21lbSwgdTMyIHJlZylcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTY0MS17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2NDI6XFx0cmV0dXJuIHJlYWRsX3JlbGF4ZWQoaW9tZW0gKyByZWcpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjQzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MDkuNTM0OTU3Nzc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTg5MzUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWUgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYHBhbnRob3JfZGV2aWNlX2luaXRgIGFuZCBSZWdpc3RlciBBY2Nlc3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkRvZXMgYHBhbnRob3JfZGV2aWNlX2luaXRgIGFjdHVhbGx5IHRvdWNoIGFueSBoYXJkd2FyZSByZWdpc3RlcnM/XCIuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgaXMganVzdCBzZXR0aW5nIHVwIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpZiBpdCdzIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIGRldmljZSdzIGNvbnRyb2wgb3Igc3RhdHVzIHJlZ2lzdGVycy4gVGhlIGJlaGF2aW9yIGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgd2l0aGluIHRoZSBmdW5jdGlvbiB3aGVyZSBpdCBjb3VsZCBiZSBwZXJmb3JtaW5nIEkvTy4gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBhZGRyZXNzZXMgb3IgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyBiZWluZyB1c2VkPyBBbnkgYml0d2lzZSBvcGVyYXRpb25zIHRoYXQgbG9vayBsaWtlIHRoZXkncmUgc2V0dGluZyBvciBjbGVhcmluZyBjb250cm9sIGZsYWdzPyBJ4oCZbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBjYXJlZnVsbHkuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSBzdGVwcGluZyB0aHJvdWdoIHRoZSBmdW5jdGlvbiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgY2FyZWZ1bCByZWFkaW5nIHdpdGggYW4gZXllIHRvIHdoZXJlIG1lbW9yeSBpcyBiZWluZyByZWFkL3dyaXR0ZW4uIEl04oCZcyBlaXRoZXIgZ29pbmcgdG8gYmUgYSBxdWljayBnbGFuY2UsIG9yIGEgbW9yZSBpbnZvbHZlZCBpbnZlc3RpZ2F0aW9uLCBidXQgSSBuZWVkIHRvIGZpZ3VyZSBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDAyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MTYuMTUzOTExMzEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5ODcwMDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdwdV9yZWFkfGdwdV93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDoxNi4zMTc5MDg0NzdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MDkzMjE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBvbmU6XG5cbioqUmV2aXNpdGluZyBgcGFudGhvcl9kZXZpY2VfaW5pdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBwYW50aG9yX2RldmljZV9pbml0YC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmdW5jdGlvbi4gSSd2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIHN1YnRsZSBJIG92ZXJsb29rZWQsIG9yIHBlcmhhcHMgYSBjb25zZXF1ZW5jZSBvZiBhIHJlY2VudCBjaGFuZ2UgdGhhdCBJIG5lZWQgdG8gY29uZmlybS4gSXQncyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgSSBjYW4ndCBhZmZvcmQgYW55IGFzc3VtcHRpb25zIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIFgsIFksIGFuZCBaIHNwZWNpZmljIGZlYXR1cmVzIGFnYWluIHRvIGVuc3VyZSB0aGV5J3JlIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbG93LWxldmVsIHN0dWZmIHRoZXJlIGlzIHN0aWxsIGFzIGV4cGVjdGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBwYXRjaGVzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHJlLWV2YWx1YXRlIHRoZSBjb3JlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMwNSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjE5LjE3ODg0Mzk0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0cmV0ID0gcGFudGhvcl9jbGtfaW5pdChwdGRldik7XFxuIDIxOTpcXHRcXHRpZiAocmV0KVxcbiAyMjA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjIxOlxcdFxcbiAyMjI6XFx0XFx0cmV0ID0gcGFudGhvcl9pbml0X3Bvd2VyKHB0ZGV2LVxcdTAwM2ViYXNlLmRldik7XFxuIDIyMzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAyMjQ6XFx0XFx0XFx0ZHJtX2VycihcXHUwMDI2cHRkZXYtXFx1MDAzZWJhc2UsIFxcXCJpbml0IHBvd2VyIGRvbWFpbnMgZmFpbGVkLCByZXQ9JWRcXFwiLCByZXQpO1xcbiAyMjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjI2OlxcdFxcdH1cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0cmV0ID0gcGFudGhvcl9kZXZmcmVxX2luaXQocHRkZXYpO1xcbiAyMjk6XFx0XFx0aWYgKHJldClcXG4gMjMwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdHB0ZGV2LVxcdTAwM2Vpb21lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShwdGRldi1cXHUwMDNlYmFzZS5kZXYpLFxcbiAyMzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgMCwgXFx1MDAyNnJlcyk7XFxuIDIzNDpcXHRcXHRpZiAoSVNfRVJSKHB0ZGV2LVxcdTAwM2Vpb21lbSkpXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwdGRldi1cXHUwMDNlaW9tZW0pO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRwdGRldi1cXHUwMDNlcGh5c19hZGRyID0gcmVzLVxcdTAwM2VzdGFydDtcXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0cmV0ID0gZGV2bV9wbV9ydW50aW1lX2VuYWJsZShwdGRldi1cXHUwMDNlYmFzZS5kZXYpO1xcbiAyNDA6XFx0XFx0aWYgKHJldClcXG4gMjQxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI0MjpcXHRcXG4gMjQzOlxcdFxcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQocHRkZXYtXFx1MDAzZWJhc2UuZGV2KTtcXG4gMjQ0OlxcdFxcdGlmIChyZXQpXFxuIDI0NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNDY6XFx0XFxuIDI0NzpcXHRcXHQvKiBJZiBQTSBpcyBkaXNhYmxlZCwgd2UgbmVlZCB0byBjYWxsIHBhbnRob3JfZGV2aWNlX3Jlc3VtZSgpIG1hbnVhbGx5LiAqL1xcbiAyNDg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QTSkpIHtcXG4gMjQ5OlxcdFxcdFxcdHJldCA9IHBhbnRob3JfZGV2aWNlX3Jlc3VtZShwdGRldi1cXHUwMDNlYmFzZS5kZXYpO1xcbiAyNTA6XFx0XFx0XFx0aWYgKHJldClcXG4gMjUxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI1MjpcXHRcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHJldCA9IHBhbnRob3JfaHdfaW5pdChwdGRldik7XFxuIDI1NTpcXHRcXHRpZiAocmV0KVxcbiAyNTY6XFx0XFx0XFx0Z290byBlcnJfcnBtX3B1dDtcXG4gMjU3OlxcdFxcbiAyNTg6XFx0XFx0cmV0ID0gcGFudGhvcl9wd3JfaW5pdChwdGRldik7XFxuIDI1OTpcXHRcXHRpZiAocmV0KVxcbiAyNjA6XFx0XFx0XFx0Z290byBlcnJfcnBtX3B1dDtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0cmV0ID0gcGFudGhvcl9ncHVfaW5pdChwdGRldik7XFxuIDI2MzpcXHRcXHRpZiAocmV0KVxcbiAyNjQ6XFx0XFx0XFx0Z290byBlcnJfdW5wbHVnX3B3cjtcXG4gMjY1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDoxOS4xNzkwOTg1NDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5MzQ4MDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5SaWdodCwgaXQncyBraWNraW5nIHRoaW5ncyBvZmYgd2l0aCBhIGNhbGwgdG8gYHBhbnRob3JfaHdfaW5pdGAuIE5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24uIGBwYW50aG9yX2h3X2luaXRgIGlzIHRoZSBrZXkgaGVyZTsgaXQncyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgUGFudGhvciBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIHRoZSBoYXJkd2FyZSBhcmUgYmVpbmcgY29uZmlndXJlZCBvciBlbmFibGVkIGF0IHRoaXMgc3RhZ2UuIElzIGl0IGNsb2NrIHNldHVwPyBNZW1vcnkgbWFwcGluZz8gRGV2aWNlIGRyaXZlciBsb2FkaW5nPyBLbm93aW5nIHdoYXQgYHBhbnRob3JfaHdfaW5pdGAgaXMgdXAgdG8gd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIHRoZSBleGVjdXRpb24gZmxvdy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpc3NlY3QgdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI0NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MjQuNjcyNTg0MDMyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI0MjIwMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JfaHdfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYz0xNjY9aW50IHBhbnRob3JfZGV2aWNlX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMjUzLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmM6MjU0OlxcdHJldCA9IHBhbnRob3JfaHdfaW5pdChwdGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYy0yNTUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYz0yOTY9c3RhdGljIGludCBwYW50aG9yX2h3X2dwdV9pZF9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmMtMzA0LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYzozMDU6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYy0zMDYte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5oPTMzPXN0cnVjdCBwYW50aG9yX2h3IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuaC0zOS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3Lmg6NDA6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmgtNDEtaW50IHBhbnRob3JfaHdfcG93ZXJfc3RhdHVzX3JlZ2lzdGVyKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDoyNi41OTY4MTE5NDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3MzgxOTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRoYXQgYHBhbnRob3JfaHdfaW5pdGAgZnVuY3Rpb24sIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IHBhbnRob3JfaHdfaW5pdCBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGUgaGFyZHdhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBQYW50aG9yIHN5c3RlbS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJdCdzIHRoZSBwb2ludCB3aGVyZSBhbGwgdGhlIHRoZW9yZXRpY2FsIGRlc2lnbiBhbmQgY29kZSBjb252ZXJnZSB0byBhY3R1YWxseSBtYWtlIHRoZSBoYXJkd2FyZSAqZG8qIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgdGhlIGhhcmR3YXJlIHRoaXMgY292ZXJzLCB3aGF0IHN1YnN5c3RlbXMsIGFuZCBob3cgZGVlcGx5IGl0IGNvbmZpZ3VyZXMgZWFjaCBvbmUuIElzIHRoaXMgYSB0b3AtbGV2ZWwgZnVuY3Rpb24sIGNhbGxpbmcgb3RoZXJzLCBvciBpcyBpdCBkb2luZyBldmVyeXRoaW5nIGluIG9uZSBtYXNzaXZlIGJsb2NrPyBUaGF0IHdpbGwgdGVsbCBhIGxvdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIGNsZWFyIGRpdmlzaW9ucyBvciBzZWN0aW9ucyB3aXRoaW4gdGhlIGNvZGUuIEFyZSB0aGVyZSBjb21tZW50cyBleHBsYWluaW5nIHdoYXQgZWFjaCBwYXJ0IGlzIHJlc3BvbnNpYmxlIGZvcj8gQXJlIHRoZXJlIGZ1bmN0aW9ucyBjYWxsZWQgdGhhdCBnaXZlIGEgZ29vZCBoaW50IGFib3V0IHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LCBtYXliZSBgaW5pdF91YXJ0KClgIG9yIGBjb25maWd1cmVfZG1hKClgLiBJ4oCZbSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzLCBsaWtlIGdsb2JhbCB2YXJpYWJsZSB1c2FnZSwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgaGFyZGNvZGVkIHZhbHVlcy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBjaGVja2luZy4gSXMgaXQgcm9idXN0PyBEb2VzIGl0IGhhbmRsZSBoYXJkd2FyZSBmYWlsdXJlcyBncmFjZWZ1bGx5LCBvciBkb2VzIGl0IGFzc3VtZSBldmVyeXRoaW5nIHdpbGwgd29yayBwZXJmZWN0bHk/IFRoZSBlcnJvciBoYW5kbGluZyAob3IgbGFjayB0aGVyZW9mKSB3aWxsIHJldmVhbCBhIGxvdCBhYm91dCB0aGUgZGVzaWduIHBoaWxvc29waHkuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZmFpbHMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gRG9lcyBpdCByb2xsIGJhY2sgY2hhbmdlcywgYXR0ZW1wdCB0byByZXRyeSwgb3Igc2ltcGx5IGhhbHQ/XG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gYXNzZXNzIHRoZSByZWxpYWJpbGl0eSwgbW9kdWxhcml0eSwgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuIElzIGl0IHdlbGwtc3RydWN0dXJlZCwgZWFzeSB0byB1bmRlcnN0YW5kLCBhbmQgZWFzeSB0byBtb2RpZnkgaW4gdGhlIGZ1dHVyZT8gVGhpcyBpcyBrZXkgZm9yIGxvbmctdGVybSBwcm9qZWN0IGhlYWx0aC4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSBhbmQgbWFrZSBpbXByb3ZlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MzEuMTcwNjM0NzUxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRpbnQgcGFudGhvcl9od19pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXFxuIDMwNjpcXHR7XFxuIDMwNzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0cmV0ID0gcGFudGhvcl9od19ncHVfaWRfaW5pdChwdGRldik7XFxuIDMxMDpcXHRcXHRpZiAocmV0KVxcbiAzMTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0cmV0ID0gcGFudGhvcl9od19iaW5kX2RldmljZShwdGRldik7XFxuIDMxNDpcXHRcXHRpZiAocmV0KVxcbiAzMTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0cmV0dXJuIHBhbnRob3JfaHdfaW5mb19pbml0KHB0ZGV2KTtcXG4gMzE4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MzEuMTcyODA0ODIyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjg4NjE2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgd2UncmUgZXN0YWJsaXNoaW5nIHRoZSBoYXJkd2FyZSBjb250ZXh0IGZvciBhIEdQVSB3aXRoaW4gdGhlIFBhbnRob3IgYXJjaGl0ZWN0dXJlLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaW5pdGlhbGl6YXRpb24gcmVsYXRlZCB0byBHUFUgaWRlbnRpZmljYXRpb24uIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbnkgc3Vic2VxdWVudCBvcGVyYXRpb25zIG9uIHRoZSBHUFUg4oCTIHRoaW5ncyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uLCBjb21tYW5kIHF1ZXVlIHNldHVwLCBhbmQga2VybmVsIGV4ZWN1dGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgR1BVIElELiBEb2VzIGl0IHByb2JlIFBDSSBkZXZpY2VzPyBJcyBpdCBiYXNlZCBvbiBhIGRldmljZSB0cmVlIGxvb2t1cD8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgcGxhdGZvcm0tc3BlY2lmaWMgYW5kIHZlbmRvci1kZWZpbmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZXRob2RvbG9neS4gQW55IHBvdGVudGlhbCBmb3IgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIGJlaW5nIGludm9sdmVkIGhlcmUgaXMgc29tZXRoaW5nIHRvIHdhdGNoIGZvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J2xsIGludGVyYWN0IHdpdGggc29tZSBraW5kIG9mIHJlZ2lzdGVyIHRvIGNvbmZpZ3VyZSB0aGUgR1BVLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBkcml2ZXJzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCBhbnkgZXhpc3RpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBzeXN0ZW1zIHdlIG1pZ2h0IGhhdmUgaW4gcGxhY2UuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYW55IGZhaWx1cmUgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHdoZW4gbXVsdGlwbGUgR1BVcyBhcmUgcHJlc2VudC4gSXMgdGhlcmUgYW55IGdyYWNlZnVsIGRlZ3JhZGF0aW9uIG9yIGVycm9yIHJlcG9ydGluZz8gVGhlIHdheSB0aGlzIGlzIHNldCB1cCB3aWxsIGRpY3RhdGUgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgcm9idXN0bmVzcy4gTGV0J3Mgc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MzUuNDAxNjcwMjc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5NjpcXHRzdGF0aWMgaW50IHBhbnRob3JfaHdfZ3B1X2lkX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcXG4gMjk3OlxcdHtcXG4gMjk4OlxcdFxcdHB0ZGV2LVxcdTAwM2VncHVfaW5mby5ncHVfaWQgPSBncHVfcmVhZChwdGRldi1cXHUwMDNlaW9tZW0sIEdQVV9JRCk7XFxuIDI5OTpcXHRcXHRpZiAoIXB0ZGV2LVxcdTAwM2VncHVfaW5mby5ncHVfaWQpXFxuIDMwMDpcXHRcXHRcXHRyZXR1cm4gLUVOWElPO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRyZXR1cm4gMDtcXG4gMzAzOlxcdH1cXG4gMzA0OlxcdFxcbiAzMDU6XFx0aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDozNS40MDM4Mzk2NjdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIwNjcyMzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBXb3J0aEZ1enppbmdgIENyaXRlcmlhKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIHJlYWRpbmcgYEdQVV9JRGAgZnJvbSBgaW9tZW1gLiBBIHZhbHVlIG9mIDAgcmVzdWx0cyBpbiBgLUVOWElPYC4gSG1tLCB0aGF0IHN1Z2dlc3RzIGl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlIG9yIGEgbW9jayB0aGF0IHByb3ZpZGVzIGEgdmFsaWQgYEdQVV9JRGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBoYXZlIGEgbW9jayBmb3IgdGhpcz8gV2FpdCwgdGhlbiBJIHJlbWVtYmVyIHN5emthbGxlciB1c2VzIGB2a21zYCBvciBgdmdlbWAgdG8gZnV6eiBEUk0gZHJpdmVycy4gQnV0LCBgcGFudGhvcmAgaXMgYSBzcGVjaWZpYyBkcml2ZXIuIENvdWxkIHN5emthbGxlciBiZSBydW5uaW5nIG9uIGFuIEFSTSBib2FyZCB3aXRoIE1hbGkgQ1NGPyBPZiBjb3Vyc2UsIHN5emthbGxlciAqZG9lcyogaGF2ZSBBUk02NCBpbnN0YW5jZXMuXG5cblRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIHN5emthbGxlciBpcyBvbiBhbiBBUk0gYm9hcmQsIHRoZW4gaXQncyAqbm90KiBuZWNlc3NhcmlseSBpbXBvc3NpYmxlIHRvIHJlYWNoISBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiIFNvLCBpZiBpdCAqb25seSogd29ya3Mgb24gcmVhbCBoYXJkd2FyZSwgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIHJlLXJlYWQgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYTogKkRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG51bWVyaWMgY29uc3RhbnRzLCBhbmQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBHQ0Ugb3IgUUVNVSouIFNvIGl0ICpyZWFsbHkqIGhpbmdlcyBvbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgcGFydC5cblxuQWxyaWdodCwgaWYgYHBhbnRob3JgICppcyogYSByZWFsIGhhcmR3YXJlIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLCBhbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgaW4gUUVNVSwgdGhlbiBpdCdzIGdlbnVpbmVseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIEdDRSBvciBRRU1VLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGlzIHRoZXJlIGEgc29mdHdhcmUgZW11bGF0b3IgZm9yIGBwYW50aG9yYD8gVGltZSB0byBnbyBodW50aW5nLiBMZXQncyBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGtlcm5lbCB0cmVlIGZvciBgcGFudGhvcmAgaW4gYHRvb2xzL3Rlc3RpbmcvYCwgYGRyaXZlcnMvZ3B1L2RybS92a21zL2AsIGFuZCBgZHJpdmVycy9ncHUvZHJtL3ZnZW0vYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjQyLjYxMDU2OTU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEzODc4NTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3ZrbXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDo0My4yMTE5NzIyMzVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODYxMjcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgdGhlIHZnZW0gRHJpdmVyJ3MgUm9sZSoqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpbW1lZGlhdGVseSB6b29tcyBpbiBvbiBgZHJpdmVycy9ncHUvZHJtL3ZnZW0vYC4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgdGhhdCBhcmVhIGluc3RhbnRseSBncmFicyBteSBhdHRlbnRpb24uIEknbSB3b25kZXJpbmcsIGhvdyBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmUsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnM/IEFtIEkgbG9va2luZyBhdCBwb3RlbnRpYWwgZW5oYW5jZW1lbnRzLCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3QsIG9yIG1heWJlIGV2ZW4gYSBzcGVjaWZpYyBidWcgcmVwb3J0IHRoYXQgSSBhbSB0cmFja2luZz8gVGhlIFwidmdlbVwiIGRyaXZlciwgYmVpbmcgYSB2aXJ0dWFsIEdFTSBkcml2ZXIsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRob3VnaHRzIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtZW1vcnkgbWFuYWdlbWVudCBwYXJhZGlnbXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGZyYW1ld29yay4gSSBtaWdodCBzdGFydCB0aGlua2luZyBhYm91dCBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBlc3BlY2lhbGx5IGluIHZhcmlvdXMgd29ya2xvYWRzLCBhbmQgaG93IHRob3NlIHBlcmZvcm1hbmNlIG1ldHJpY3MgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZS4gQXJlIHRoZXJlIGFueSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IEkgYW0gdHJ5aW5nIHRvIHJlc29sdmUgb3IgbWl0aWdhdGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6NDYuOTIwNTg4NDIzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg0NjcyNzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3ZnZW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDo0Ny4wODkwNjc1MzlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NDgzMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSByZWxldmFudCBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBhcmNoL3VtL2AgUmFiYml0IEhvbGUqKlxuXG5BbHJpZ2h0LCB0aGF0J3MgaW50ZXJlc3RpbmcuLi4gdGhhdCBsaXR0bGUgd2hpc3BlciBvZiBgYXJjaC91bS9gIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSSB3b25kZXIgd2hhdCBwcm9tcHRlZCB0aGF0IHRob3VnaHQuIEl0IHN1Z2dlc3RzIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNvLCB3aGF0J3MgZ290IG1lIHRoaW5raW5nIGFib3V0IFVzZXItbW9kZSBMaW51eD8gQW0gSSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBlbXVsYXRpb24/IE9yIHBlcmhhcHMgSSdtIGNvbnNpZGVyaW5nIHVzaW5nIGl0IGZvciB0ZXN0aW5nIG9yIGRldmVsb3BtZW50PyBNYXliZSBJJ20gc2VlaW5nIGEgY29kZSBwYXRoIHRoYXQgdG91Y2hlcyBvbiB0aGF0IHN1YnN5c3RlbSBpbiBzb21lIHdheS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIExldCBtZSBtZW50YWxseSByZXZpZXcgd2hhdCBJIHdhcyBqdXN0IGxvb2tpbmcgYXQsIG9yIHdoYXQgcHJvYmxlbSBJIHdhcyB0cnlpbmcgdG8gc29sdmUuIFdoYXQgd2FzIHRoZSAqbGVhZGluZyogdGhvdWdodD8gRGlkIEkgcmVjZW50bHkgaGF2ZSBhIGRpc2N1c3Npb24gYWJvdXQgY29udGFpbmVyaXphdGlvbiBvciBzeXN0ZW0gZW11bGF0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW5jZSBvZiBgYXJjaC91bS9gIHRvIHRoZSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQuIFRoaXMgY291bGQgYmUgYSBwcm9kdWN0aXZlIHRocmVhZCB0byBmb2xsb3csIG9yIGp1c3QgYSBtZW50YWwgZGV0b3VyLiBUaW1lIHRvIGFzc2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNDcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjUwLjc1MzkwMjE1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NDUwMTk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvdW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDo1MS4zNjkzNjU1NTRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxOTAxNTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIFJlYWNoaW5nIGBwYW50aG9yX2dlbV9mYXVsdGAqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgaG93IGNhbiBJIGV2ZW4gKnJlYWNoKiBgaW5zZXJ0X3BhZ2VgIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZT8gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJZiBgcGFudGhvcl9wcm9iZWAgZmFpbHMgZWFybHkgb24sIGxpa2UgYXQgYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgIGJlY2F1c2UgYEdQVV9JRGAgaXMgMCwgb3IgYmVjYXVzZSB0aGUgYGlvbWVtYCBtYXBwaW5nIGlzIGludmFsaWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHByb3BlciBkZXZpY2UgdHJlZSBub2RlLCB0aGVuIHRoZSBkcml2ZXIncyBub3QgZ29pbmcgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LlxuXG5BaGEhIElmIFFFTVUncyBgdmlydGAgbWFjaGluZSBmb3IgQVJNNjQgZG9lc24ndCBoYXZlIGEgTWFsaSBDU0YgR1BVIGRlZmluZWQgaW4gaXRzIGRldmljZSB0cmVlLCB0aGVuIGBwYW50aG9yX3Byb2JlYCB3b24ndCBldmVuIGJlIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgbWVhbnMgYHBhbnRob3JgIGlzIGluYWNjZXNzaWJsZSB3aXRoaW4gUUVNVSB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIHN5emthbGxlciBiZSB1c2luZyBhIGRldmljZSB0cmVlIG92ZXJsYXkgdG8gYnJpbmcgdGhlIGRldmljZSBvbmxpbmU/IEV2ZW4gaWYgaXQgZG9lcywgYGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlYCBpcyBzdGlsbCBnb2luZyB0byBtYXAgKnNvbWUqIG1lbW9yeS4gUmVhZGluZyBgR1BVX0lEYCB3aWxsIHRoZW4ganVzdCByZXR1cm4gMCwgb3Igd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5zIHRvIGJlIGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBJZiBpdCdzIHplcm8sIHRoZW4gYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgIHdpbGwgcmV0dXJuIGAtRU5YSU9gLCBhbmQgYHBhbnRob3JfcHJvYmVgIHdpbGwgYWdhaW4gZmFpbC5cblxuSW4gZWl0aGVyIHNjZW5hcmlvLCB0aGUgZGV2aWNlIHdvbid0IGluaXRpYWxpemUuIFRoYXQgbWVhbnMgYC9kZXYvZHJpL3JlbmRlckQqYCB3b24ndCBiZSBjcmVhdGVkIGZvciBgcGFudGhvcmAsIGFuZCB0aGVyZWZvcmUsIGBwYW50aG9yX2dlbV9mYXVsdGAgd29uJ3QgZXZlciBiZSByZWFjaGFibGUuXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyAqYW55KiB3YXkgdG8gYnlwYXNzIHRoZSBwcm9iZS4gSXMgdGhlcmUgYSB3YXkgdG8gc29tZWhvdyBtb2NrIG9yIGJ5cGFzcyBgcGFudGhvcl9wcm9iZWAsIHBlcmhhcHMgc29tZSBraW5kIG9mIGtlcm5lbC1sZXZlbCBtb2NrIEknbSBvdmVybG9va2luZz8gSSBzaG91bGQgdmVyaWZ5IGlmIGFueSBzdWNoIGBwYW50aG9yYCBtb2NrIGFjdHVhbGx5IGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6NTkuNzg4Mzg0MTY2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU3MzI4NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9taXNjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6NTkuOTk0MTI1MzgxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTUwMjEyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZSBhbmQgZm9ybWF0dGVkIHdpdGggYSBib2xkZWQgaGVhZGVyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBDaGFyYWN0ZXIgRHJpdmVycyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBwcm9ibGVtLCB3aGF0ZXZlciBpdCBpcy4gQW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBmdW5kYW1lbnRhbCBhcmVhOiBgZHJpdmVycy9jaGFyL2AuIEl0J3MgYWxtb3N0IHJlZmxleGl2ZS4gV2hlbmV2ZXIgSSdtIHdyZXN0bGluZyB3aXRoIHNvbWV0aGluZyBhdCB0aGUga2VybmVsIGxldmVsLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb24gb3IgZGV2aWNlIG1hbmFnZW1lbnQsIG15IHRob3VnaHRzIGludmFyaWFibHkgZHJpZnQgdG93YXJkcyB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLiBJIG1lYW4sIGl0J3MgdGhlIGJyZWFkIGFuZCBidXR0ZXIsIGlzbid0IGl0PyBUaGF0IGRpcmVjdG9yeSBpcyB3aGVyZSB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIHJlc2lkZSDigJMgdGhlIGNoYXJhY3RlciBkZXZpY2VzLiBJdCdzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbnMgYXJlIGJ1aWx0LCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgYXJlIGRlZmluZWQuIFNvLCBsZXQncyBzYXkgSSdtIHRyb3VibGVzaG9vdGluZyBhIHdlaXJkIEkvTyBpc3N1ZSwgbWF5YmUgYSBjdXN0b20gZGV2aWNlIGlzbid0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBJJ2QgaW5zdGluY3RpdmVseSBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhvc2UgZHJpdmVycy4gTG9va2luZyBhdCBob3cgcmVhZHMgYW5kIHdyaXRlcyBhcmUgaGFuZGxlZCwgaG93IGludGVycnVwdHMgYXJlIG1hbmFnZWQsIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLiBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhbiBleHBlcnQsIHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGlzbid0IGp1c3QgYSBsb2NhdGlvbiB0byBzdG9yZSBmaWxlczsgaXQncyBhIGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGZvciB1bmRlcnN0YW5kaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IHdoeSBJJ20gdGhpbmtpbmcgYWJvdXQgaXQsIGFuZCB3aGF0LCBleGFjdGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NTowMy40ODkxNDk4OTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjM4MDEzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFudGhvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NoYXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NTowNC4wOTE1Mzg3MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAyNjU3MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBwYW50aG9yIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBgcGFudGhvcmAgZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBydWxlcyBzdGF0ZSBJIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGluIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHBhbnRob3JgIGlzIGEgcmVhbCBvciB2aXJ0dWFsIGRyaXZlci4gSG1tLCBsZXQgbWUgc2VlLiBcIlBhbnRob3IgKERSTSBzdXBwb3J0IGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcykuXCIgUmlnaHQsIGl0J3MgYSBkcml2ZXIgZm9yICpyZWFsKiBoYXJkd2FyZSDigJMgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFRoYXQgbWVhbnMgaXTigJlzIG5vdCBzb2Z0d2FyZSBlbXVsYXRlZC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgb3IgR0NFIG9mZmVyIE1hbGkgQ1NGIGVtdWxhdGlvbi4gTm9wZSwgUUVNVSB1c2VzIHRoaW5ncyBsaWtlIHZpcnRpby1ncHUsIHJhbWZiLCBldGMuLCBidXQgbm90aGluZyBmb3IgTWFsaS4gU28sIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGVpdGhlciBlbnZpcm9ubWVudC5cblxuT2theSwgdGltZSB0byBqdXN0aWZ5IHRoaXMgZGVjaXNpb24uIEknbGwgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpczogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIlxuXG5MZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCdzIHNlZSBob3cgYGluc2VydF9wYWdlYCBpcyBjYWxsZWQsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBPa2F5LCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYG5vbmJsb2NraW5nX3BhZ2Vfc2V0dXBgIGFuZCBgYmxvY2tpbmdfcGFnZV9zZXR1cGAsIHdoaWNoIGluIHR1cm4sIGFyZSBvbmx5IGNhbGxlZCBmcm9tIGBwYW50aG9yX2dlbV9hbnlfZmF1bHRgLCB3aGljaCBpcyB0aGUgZmF1bHQgaGFuZGxlciBmb3IgYHBhbnRob3JgIEdFTSBvYmplY3RzLiBUbyBnZXQgdG8gdGhpcyBmYXVsdCBoYW5kbGVyLCBJIG5lZWQgYSBHRU0gb2JqZWN0LiBUbyBjcmVhdGUgYSBHRU0gb2JqZWN0LCBJJ2QgbmVlZCB0byBvcGVuIHRoZSBgcGFudGhvcmAgRFJNIGRldmljZSBhbmQgY2FsbCBgRFJNX0lPQ1RMX1BBTlRIT1JfQk9fQ1JFQVRFYC4gVG8gb3BlbiB0aGUgZGV2aWNlLCBJIG5lZWQgaXQgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBQcm9iaW5nIHJlcXVpcmVzIGEgdmFsaWQgYEdQVV9JRGAgZnJvbSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBTaW5jZSBJIGRvbid0IGhhdmUgTWFsaSBDU0YgaGFyZHdhcmUgaW4gUUVNVSwgdGhpcyBpcyBpbXBvc3NpYmxlLiBZZXAsIGFsbCBnb29kLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NzAsIk91dHB1dFRva2VucyI6MTE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ1OjE0LjExODExMzEwM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcGFudGhvcmAgRFJNIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZXF1aXJlcyByZWFkaW5nIGEgdmFsaWQgR1BVX0lEIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiB0aGUgR0VNIGZhdWx0IGhhbmRsZXIgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHBhbnRob3JgIERSTSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVxdWlyZXMgcmVhZGluZyBhIHZhbGlkIEdQVV9JRCBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycykuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gdGhlIEdFTSBmYXVsdCBoYW5kbGVyIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowlg5fg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 18:30:39 +0000 UTC FinishedAt: 2026-06-23 18:45:16 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcGFudGhvcmAgRFJNIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZXF1aXJlcyByZWFkaW5nIGEgdmFsaWQgR1BVX0lEIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiB0aGUgR0VNIGZhdWx0IGhhbmRsZXIgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODNjZjcxZmU3NzZiYTEyOWZkNDcwNjRkNjcyNTUxNTliNjljNjZlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDE4OjQyOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNTQ1MzViYWUyYjBjZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXG5AQCAtODAyLDkgJiM0Mzs4MDIsMTMgQEAgc3RhdGljIHZtX2ZhdWx0X3QgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHBcbiBcdH0gZWxzZSBpZiAob3JkZXIgPT0gUE1EX09SREVSKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4gXHRcdHVuc2lnbmVkIGxvbmcgcGFkZHIgPSBwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gQUxJR05fRE9XTih2bWYtXHUwMDNlYWRkcmVzcywgUE1EX1NJWkUpO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCAmIzQzOyBQTURfU0laRTtcbiYjNDM7XHRcdGJvb2wgaW5fcmFuZ2UgPSB2bWEtXHUwMDNldm1fc3RhcnQgXHUwMDNjPSBzdGFydCBcdTAwMjZcdTAwMjYgZW5kIFx1MDAzYz0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcdFx0Ym9vbCBhbGlnbmVkID0gKHZtZi1cdTAwM2VhZGRyZXNzIFx1MDAyNiB+UE1EX01BU0spID09IChwYWRkciBcdTAwMjYgflBNRF9NQVNLKTtcbiBcbi1cdFx0aWYgKGFsaWduZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRpZiAoYWxpZ25lZCBcdTAwMjZcdTAwMjYgaW5fcmFuZ2UgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShwYWdlX2ZvbGlvKHBhZ2UpKSkge1xuIFx0XHRcdHBmbiBcdTAwMjY9IFBNRF9NQVNLIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRcdHJldHVybiB2bWZfaW5zZXJ0X3Bmbl9wbWQodm1mLCBwZm4sIHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19XUklURSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlcXVpcmVzIHJlYWRpbmcgYSB2YWxpZCBHUFVfSUQgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGluIHRoZSBHRU0gZmF1bHQgaGFuZGxlciBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAxODo0Mjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jCmluZGV4IGExZTJlYjFjYTdiYmU2Li41NDUzNWJhZTJiMGNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jCkBAIC04MDIsOSAmIzQzOzgwMiwxMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3QgcAogCX0gZWxzZSBpZiAob3JkZXIgPT0gUE1EX09SREVSKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiAJCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBwZm4gJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gQUxJR05fRE9XTih2bWYtJmd0O2FkZHJlc3MsIFBNRF9TSVpFKTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgJiM0MzsgUE1EX1NJWkU7CiYjNDM7CQlib29sIGluX3JhbmdlID0gdm1hLSZndDt2bV9zdGFydCAmbHQ7PSBzdGFydCAmYW1wOyZhbXA7IGVuZCAmbHQ7PSB2bWEtJmd0O3ZtX2VuZDsKIAkJYm9vbCBhbGlnbmVkID0gKHZtZi0mZ3Q7YWRkcmVzcyAmYW1wOyB+UE1EX01BU0spID09IChwYWRkciAmYW1wOyB+UE1EX01BU0spOwogCi0JCWlmIChhbGlnbmVkICZhbXA7JmFtcDsKJiM0MzsJCWlmIChhbGlnbmVkICZhbXA7JmFtcDsgaW5fcmFuZ2UgJmFtcDsmYW1wOwogCQkgICAgZm9saW9fdGVzdF9wbWRfbWFwcGFibGUocGFnZV9mb2xpbyhwYWdlKSkpIHsKIAkJCXBmbiAmYW1wOz0gUE1EX01BU0sgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJCXJldHVybiB2bWZfaW5zZXJ0X3Bmbl9wbWQodm1mLCBwZm4sIHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19XUklURSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZSBjaGFuZ2UuCgoqKlBhbnRob3IgR0VNIEluc2VydCBQYWdlIFBhdGNoIEFuYWx5c2lzKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgZm9jdXNlZCBvbiBgZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uY2AuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbiBoaXRzIHRoZSBgaW5zZXJ0X3BhZ2VgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgYSBuZXcgY2hlY2ssIGBpbl9yYW5nZWAuIFRoZSBjb3JlIGlkZWEgc2VlbXMgdG8gYmUgZW5mb3JjaW5nIGEgbW9yZSBzdHJpbmdlbnQgY29uc3RyYWludC4gVGhpcyBgaW5fcmFuZ2VgIHRlc3QgaXMgdGhlcmUgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlIFBhZ2UgTWFwIERpcmVjdG9yeSAoUE1EKSBlbnRyeSB0aGF0JiMzOTtzIGJlaW5nIGluc2VydGVkIGFsaWducyBwZXJmZWN0bHkgd2l0aGluIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHJhbmdlLgoKU28sIHRoaXMgaXMgYSBwcmV0dHkgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdXAgdGhlIGxvZ2ljIGFyb3VuZCBtZW1vcnkgbWFwcGluZywgcHJvYmFibHkgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgcG90ZW50aWFsIGlzc3VlIOKAkyBtYXliZSBhIGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0eSBvciBzb21lIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHByb2JsZW0uCgpNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGF0IGNvbmZpZyBvcHRpb24gYWN0aXZhdGVzIHRoZSBgcGFudGhvcmAgZHJpdmVyIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBoYXZlIHRvIGZpbmQgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBlbmFibGVzIHRoZSBiZWhhdmlvciBiZWluZyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmb2xsb3ctdXAgcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERSTV9QQU5USE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnLTItXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnOjM6Y29uZmlnIERSTV9QQU5USE9SXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtQYW50aG9yIChEUk0gc3VwcG9ydCBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFJNX1BBTlRIT1IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIGBEUk1fUEFOVEhPUmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IGludGVyYWN0IHdpdGggdGhpcz8mIzM0OyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGZ1bGwgY29udGV4dC4gVG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWcgaW5mbHVlbmNlcyB0aGUga2VybmVsJiMzOTtzIERSTSBpbXBsZW1lbnRhdGlvbiwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTttIGdvaW5nIHRvIGRpdmUgaW50byBgZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24gYGluc2VydF9wYWdlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbnNlcnRfcGFnZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGZsb3cgaW50ZXJhY3RzIHdpdGggdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zZXJ0X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9Nzg2PXN0YXRpYyBlbnVtIGRybV9nZW1fb2JqZWN0X3N0YXR1cyBwYW50aG9yX2dlbV9zdGF0dXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy03OTYtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjc5NzpzdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtNzk4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTgyMj1zdGF0aWMgdm1fZmF1bHRfdCBub25ibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODMzLVx0aWYgKGJvLVx1MDAzZWJhY2tpbmcucGFnZXMpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjgzNDpcdFx0cmV0ID0gaW5zZXJ0X3BhZ2Uodm1mLCBvcmRlciwgYm8tXHUwMDNlYmFja2luZy5wYWdlc1twYWdlX29mZnNldF0pO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04MzUtXHRlbHNlXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz04NDI9c3RhdGljIHZtX2ZhdWx0X3QgYmxvY2tpbmdfcGFnZV9zZXR1cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODY2LVx0XHRpZiAobW1hcF9sb2NrX2hlbGQpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg2NzpcdFx0XHRyZXQgPSBpbnNlcnRfcGFnZSh2bWYsIG9yZGVyLCBwYWdlKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODY4LVx0XHRlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgUm9vdCBvZiBgaW5zZXJ0X3BhZ2VgIENhbGxzKioKCk9rYXksIHNvIGBpbnNlcnRfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGUgdGV4dCB0ZWxscyBtZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBub25ibG9ja2luZ19wYWdlX3NldHVwYCBhbmQgYGJsb2NraW5nX3BhZ2Vfc2V0dXBgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgdGhlICpleGFjdCogY2FsbCBzaXRlcyBvZiAqdGhvc2UqIHR3byBmdW5jdGlvbnMsIHRvIHNlZSB0aGUgY29udGV4dCBpbiB3aGljaCBgaW5zZXJ0X3BhZ2VgIGlzIGdldHRpbmcgdXRpbGl6ZWQuIEZpbmRpbmcgdGhlIGNhbGwgbG9jYXRpb25zIG9mIGBub25ibG9ja2luZ19wYWdlX3NldHVwYCBhbmQgYGJsb2NraW5nX3BhZ2Vfc2V0dXBgIGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb24uIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBwb3RlbnRpYWxseSBleHBvc2UgYXJlYXMgb2YgY29uY2Vybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsobm9uYmxvY2tpbmdfcGFnZV9zZXR1cHxibG9ja2luZ19wYWdlX3NldHVwKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz03OTc9c3RhdGljIHZtX2ZhdWx0X3QgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04MjEtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjgyMjpzdGF0aWMgdm1fZmF1bHRfdCBub25ibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04MjMtXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NDEtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg0MjpzdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTg0My1cdFx0XHRcdCAgICAgIHN0cnVjdCBwYW50aG9yX2dlbV9vYmplY3QgKmJvLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9ODc3PXN0YXRpYyB2bV9mYXVsdF90IHBhbnRob3JfZ2VtX2FueV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODkyLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo4OTM6XHRyZXQgPSBub25ibG9ja2luZ19wYWdlX3NldHVwKHZtZiwgb3JkZXIsIHBhZ2Vfb2Zmc2V0KTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODk0LVx0aWYgKHJldCAhPSBWTV9GQVVMVF9SRVRSWSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkxMy1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTE0Olx0XHRyZXQgPSBibG9ja2luZ19wYWdlX3NldHVwKHZtZiwgb3JkZXIsIGJvLCBwYWdlX29mZnNldCwgZmFsc2UpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MTUtXHRcdGRybV9nZW1fb2JqZWN0X3B1dChcdTAwMjZiby1cdTAwM2ViYXNlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkxOC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTE5Olx0cmV0dXJuIGJsb2NraW5nX3BhZ2Vfc2V0dXAodm1mLCBvcmRlciwgYm8sIHBhZ2Vfb2Zmc2V0LCB0cnVlKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTIwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTU0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBvZiBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCoqCgpSaWdodCwgYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAganVzdCBnb3QgdHJpZ2dlcmVkLiBUaGF0IGltbWVkaWF0ZWx5IHNldHMgb2ZmIGEgbWVudGFsIGNoZWNrbGlzdC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIHNvbWUga2luZCBvZiBmYXVsdCBjb25kaXRpb24gd2l0aGluIGEgUGFudGhvci1iYXNlZCBHZW0gc3lzdGVtLiBUaGUgJiMzNDthbnkmIzM0OyBzdWdnZXN0cyBhIGJyb2FkLCBjYXRjaC1hbGwgdHlwZSBvZiBlcnJvciBkZXRlY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hhdCB0cmlnZ2VyZWQgdGhlIGNhbGwgYW5kIHdoYXQgY29udGV4dCBJIGhhdmUgYXZhaWxhYmxlLiBJcyB0aGlzIGEgc3lzdGVtLWxldmVsIGZhdWx0LCBhIGNvbXBvbmVudC1zcGVjaWZpYyBlcnJvciwgb3Igc29tZXRoaW5nIG1vcmUgdHJhbnNpZW50PwoKVGhlIG5hbWUgaXRzZWxmLCAqYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAqLCBpbXBsaWVzIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBnZW5lcmljIGZhdWx0IHdpdGhpbiB0aGUgUGFudGhvciBzdWJzeXN0ZW0uIEl0JiMzOTtzIG5vdCB0YXJnZXRpbmcgYSBzcGVjaWZpYyBnZW0sIGJ1dCBhIGZhdWx0IGFmZmVjdGluZyBhbnkgZ2VtIGluIHRoZSBzeXN0ZW0uIFRoZSBuZXh0IHRoaW5nIEkmIzM5O2Qgd2FudCB0byBrbm93IGlzIHdoaWNoIGdlbSwgb3Igd2hpY2ggbW9kdWxlIHdpdGhpbiBQYW50aG9yLCBpcyB0aGUgc291cmNlLiBUaGUgZGV0YWlscyB3aWxsIGJlIGNydWNpYWwgaW4gcGlucG9pbnRpbmcgdGhlIHJvb3QgY2F1c2UuIFRoaXMgY291bGQgYmUgZHVlIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBpbXByb3BlciBjb25maWd1cmF0aW9uLCBpbmNvcnJlY3QgZGF0YSBmcm9tIGV4dGVybmFsIHNvdXJjZXMsIG9yIGV2ZW4gYSBoYXJkd2FyZSBpc3N1ZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN5c3RlbSBsb2dzIGFuZCBhbnkgZXJyb3IgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIHByb3ZpZGVkIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGRldGVybWluZSB3aGVyZSB0aGUgbG9naWMgbWlnaHQgYmUgYnJlYWtpbmcgZG93bi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZXJyb3IgaXMgZHVlIHRvIGFuIGludGVybWl0dGVudCBmYXVsdCwgb3IgYSByZXByb2R1Y2libGUgb25lLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvcl9nZW1fYW55X2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NzYtXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg3NzpzdGF0aWMgdm1fZmF1bHRfdCBwYW50aG9yX2dlbV9hbnlfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcilcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODc4LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTkyMj1zdGF0aWMgdm1fZmF1bHRfdCBwYW50aG9yX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTIzLXtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTI0Olx0cmV0dXJuIHBhbnRob3JfZ2VtX2FueV9mYXVsdCh2bWYsIDApO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MjUtfVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9OTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGFudGhvcl9nZW1fdm1fb3BzID0ge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTYxLSNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjk2MjpcdC5odWdlX2ZhdWx0ID0gcGFudGhvcl9nZW1fYW55X2ZhdWx0LFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05NjMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFBhbnRob3IgR1BVIERyaXZlciBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmYXVsdCBoYW5kbGVycywgYHBhbnRob3JfZ2VtX2ZhdWx0YCBhbmQgYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAsIHdoaWNoIHNlZW0gdG8gYmUgc3BlY2lmaWMgdG8gdGhlIEdFTSBvYmplY3Qgd2l0aGluIHRoaXMgYHBhbnRob3JgIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYG1tYXBgIG9mIHRoZSBEUk0gZGV2aWNlLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIEkgZXZlbiByZWFjaCBgcGFudGhvcmAgd2l0aGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPwoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhbiBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVIGRyaXZlciwgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIHdoZXRoZXIgaXQmIzM5O3MgZnV6emFibGUuIEZvcnR1bmF0ZWx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciB2aXJ0dWFsIERSTSBkcml2ZXJzLCBtZWFuaW5nIEkgc2hvdWxkIGJlIGFibGUgdG8gZnV6eiBgcGFudGhvcmAgdmlhIERSTSBpb2N0bHMgb3IgYG1tYXBgLiBFdmVuIGlmIHRoaXMgaXMgYSByZWFsIGhhcmR3YXJlIGRyaXZlciwgc3l6a2FsbGVyIGNvdWxkIHBvdGVudGlhbGx5IGhhbmRsZSBpdCB1c2luZyB2Z2VtLCBtb2NrIGRldmljZXMsIG9yIGJ5IGp1c3Qgb3BlbmluZyBgL2Rldi9kcmkvcmVuZGVyRCpgLCBhc3N1bWluZyB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCBvciBpdCBjYW4gaW5pdGlhbGl6ZSB3aXRob3V0IGl0LiBIb3dldmVyLCBpZiBpdCYjMzk7cyBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyLCBpdCBtaWdodCBub3QgcHJvYmUgcHJvcGVybHkgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgaHVyZGxlLgoKVGhpbmtpbmcgZnVydGhlciwgc3l6a2FsbGVyIGhhcyBmdW5jdGlvbnMgZm9yIFVTQiBhbmQgODAyLjExLCBzbyBwZXJoYXBzIGl0IGhhcyBzaW1pbGFyIHRyaWNrcyBmb3IgRFJNLiBUaGUgYHZrbXNgIGRyaXZlciBpcyB2aXJ0dWFsLCBidXQgdGhpcyBgcGFudGhvcmAgZHJpdmVyIGlzIGZvciByZWFsIGhhcmR3YXJlLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiBjYW4gSSByZWFjaCBgcGFudGhvcl9nZW1fZmF1bHRgIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50PwoKR2VuZXJhbGx5LCBJIGtub3cgdGhhdCB0byBgbW1hcGAgYSBHRU0gb2JqZWN0LCBJIHdvdWxkIGZpcnN0IG5lZWQgdG8gY3JlYXRlIGl0LiBBbmQgdG8gY3JlYXRlIGl0LCBJJiMzOTtkIG5lZWQgdG8gb3BlbiB0aGUgRFJNIGRldmljZS4gSWYgdGhlIERSTSBkZXZpY2UgZG9lc24mIzM5O3QgZXhpc3QsIEkmIzM5O20gc3R1Y2suIEhvd2V2ZXIsIHN5emthbGxlciBtaWdodCBoYXZlIHNvbWUgY2xldmVyIHdheSBhcm91bmQgdGhpcywgb3IgbWF5YmUgaXQmIzM5O3MgYmVpbmcgZnV6emVkIG9uIHJlYWwgaGFyZHdhcmUuCgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwcm9tcHQgd2hpY2ggc3BlY2lmaWVzIHRoYXQgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUmIzM0Oy4gSXMgYHBhbnRob3JgIG9uZSBvZiB0aG9zZSBpbXBvc3NpYmxlIGNhc2VzPwoKV2FpdCwgc2luY2UgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIGl0IGxpa2VseSBkZXBlbmRzIG9uIGEgZGV2aWNlIHRyZWUgbm9kZSB0byBwcm9iZSBwcm9wZXJseS4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgcHJvYmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2JlIG1lY2hhbmlzbSB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHZpcnR1YWxpemFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXIuIEhlcmUmIzM5O3MgbXkgdGFrZToKCioqQ2hlY2tpbmcgdGhlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudHMgYXJlIGluIHBsYWNlLiBUaGUgd2hvbGUgdGhpbmcgaGluZ2VzIG9uIHByb3BlciByZWdpc3RyYXRpb24sIGRvZXNuJiMzOTt0IGl0PyBJZiB0aGUgaW5pdGlhbCBzZXR1cCBpc24mIzM5O3Qgc291bmQsIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIGFjdGlvbiBpcyBsaWtlbHkgdG8gYmUgZmxhd2VkLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaG93IHRoaXMgY29tcG9uZW50LCBwcm9jZXNzLCBvciB3aGF0ZXZlciB0aGUgc3ViamVjdCBpcywgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgcHJvcGVybHkgZG9jdW1lbnRlZD8gQXJlIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseSBkZWZpbmVkPyBJcyB0aGVyZSBhIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBJIGNhbiBjaGVjaywgb3IgZG8gSSBuZWVkIHRvIHRyYWNlIGl0IHRocm91Z2ggbXVsdGlwbGUgbW9kdWxlcz8gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgcXVpY2sgYXVkaXQgb2YgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZWR1cmUgaXRzZWxmLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjcml0aWNhbCBzdGVwIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0fHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE5MDY9c3RhdGljIGludCBfX2luaXQgcGFudGhvcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxOTIxOlx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnBhbnRob3JfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTMzLX1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTkzNDptb2R1bGVfaW5pdChwYW50aG9yX2luaXQpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmlhYmlsaXR5IG9mIEZ1enppbmcgYSBQbGF0Zm9ybSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGFuZCB0aGUgaW1tZWRpYXRlIHRob3VnaHQgaXM6IHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEluIHRoZSB1c3VhbCBHQ0UvUUVNVSBzZXR1cCwgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgbW9jayBvciBhIHdlbGwtY3JhZnRlZCBkZXZpY2UgdHJlZSBvdmVybGF5LCB0aGVzZSBBUk0gTWFsaSBHUFUgcGxhdGZvcm0gZHJpdmVycyBhcmUganVzdCBub3QgZ29pbmcgdG8gcHJvYmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgb25lIGlzIGFuIGV4Y2VwdGlvbi4KCk5vdywgd2FpdC4uLiBkb2VzIFN5emthbGxlciBoYXZlIHNvbWUgdHJpY2sgdXAgaXRzIHNsZWV2ZSB0byBpbmplY3QgcGxhdGZvcm0gZGV2aWNlcywgbWF5YmUgc29tZXRoaW5nIHdpdGggYHN5el9kZXZmcmVxX2FkZF9kZXZpY2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBObywgSSBkb24mIzM5O3QgdGhpbmsgaXQgZG9lcy4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSAqZ2VuZXJpYyogd2F5IHRvIHByb2JlIGFyYml0cmFyeSBwbGF0Zm9ybSBkcml2ZXJzIHVubGVzcyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IHN1cHBvcnRlZCwgbGlrZSB3aXRoIGB2a21zYC4KCk9oLCB3YWl0IGEgc2Vjb25kLCBJIHJlbWVtYmVyIGBzeXpfaW5pdF9uZXRfc29ja2V0YCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYWRkIGRldmljZXMhCgpPa2F5LCBzbyB3aGF0IGFib3V0IHRoaXMgc3BlY2lmaWMgZHJpdmVyLCBgcGFudGhvcmAsIGlzIFN5emthbGxlciBhbHJlYWR5IGZ1enppbmcgaXQ/IEkgbmVlZCB0byBjaGVjay4KCk9rYXksIHRoZSBjb21taXQgbWVzc2FnZSBzYXlzOgpgYGAKY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAxODo0Mjo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwpgYGAKVGhpcyBsb29rcyBsaWtlIFN5emthbGxlciBpcyB0ZXN0aW5nIGEgcGF0Y2gsIHJpZ2h0PyBTbywgbWF5YmUgdGhhdCBtZWFucyBpdCYjMzk7cyByZWFjaGFibGU/IE9yIGlzIGl0IHNpbXBseSBhIHN1Ym1pdHRlZCBwYXRjaCB0aGF0JiMzOTtzIGJlaW5nIHRlc3RlZCBhbmQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlcmUmIzM5O3MgYW55IHZhbHVlIGluIGZ1enppbmcgaXQ/CgpJZiB0aGlzIGlzIGFuIEFSTSBNYWxpIEdQVSBkcml2ZXIsIGl0JiMzOTtzIGhpZ2hseSBsaWtlbHkgaXQmIzM5O3Mgb25seSBnb2luZyB0byBiZSByZWFjaGFibGUgb24gQVJNIGhhcmR3YXJlLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIHNvcnQgb2YgbW9jayBvciBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uLgoKT2theSwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgbW9jayBmb3IgYHBhbnRob3JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYERSTV9QQU5USE9SYCBmbGFnIG1lbnRpb25lZCBpbiByZWxhdGlvbiB0byBzeXprYWxsZXIsIGJ1dCBJIGRvbiYjMzk7dCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhvc2UgZGVzY3JpcHRpb25zLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcm9hZGJsb2NrLiBCdXQsIHRoZSBwcm9tcHQgaXMga2V5OiBpdCYjMzk7cyBmb2N1c2luZyBvbiBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRpb25zIG9mIGhhcmR3YXJlLCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGVydGFpbiB0byBzb21ldGhpbmcgbGlrZSBgRFJNX1BBTlRIT1JgPwoKSWYgdGhpcyBmbGFnIHJlbGF0ZXMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIsIGVzcGVjaWFsbHkgZm9yIGFuIFNvQyBvciBHUFUsIGl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSB0byBiZSB0cmlnZ2VyZWQgaW4gYSBzdGFuZGFyZCB4ODYgUUVNVSBvciBHQ0Ugc2V0dXAgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRvciBhdmFpbGFibGUsIHdoaWNoIGlzIHVubGlrZWx5IGZvciBzb21ldGhpbmcgbGlrZSBBUk0gTWFsaSBDU0YgKGFzIHRoZXJlIGlzIG5vIGVtdWxhdG9yIHVwc3RyZWFtKS4gVGh1cywgdGhlIHF1ZXN0aW9uIGlzIG5vdzogQ2FuIGl0IGJlIGFjY2Vzc2VkIHZpYSBhIGdlbmVyaWMgbWVjaGFuaXNtPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYW50aG9yX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4ODI9c3RhdGljIERFRklORV9SVU5USU1FX0RFVl9QTV9PUFMocGFudGhvcl9wbV9vcHMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODg2LVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxODg3OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhbnRob3JfZHJpdmVyID0ge1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODg4LVx0LnByb2JlID0gcGFudGhvcl9wcm9iZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE5MDY9c3RhdGljIGludCBfX2luaXQgcGFudGhvcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxOTIxOlx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNnBhbnRob3JfZHJpdmVyKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xOTM2PXN0YXRpYyB2b2lkIF9fZXhpdCBwYW50aG9yX2V4aXQodm9pZClcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkzNy17XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE5Mzg6XHRwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZwYW50aG9yX2RyaXZlcik7XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE5MzktXHRkZXN0cm95X3dvcmtxdWV1ZShwYW50aG9yX2NsZWFudXBfd3EpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzQzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgcGFudGhvcl9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBwYW50aG9yX3Byb2JlYCB0aGluZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBiZXlvbmQgYSBzdXBlcmZpY2lhbCBzY2FuLiBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdDogRG9lcyB0aGUgbmFtZSBpdHNlbGYgb2ZmZXIgYW55IGNsdWVzPyBJcyBpdCBpbmRpY2F0aXZlIG9mIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgb3IgbWV0aG9kb2xvZ3k/IEkgbmVlZCB0byB0aGluayBhYm91dCB3aGF0ICYjMzQ7cHJvYmUmIzM0OyBpbXBsaWVzIGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBkaWFnbm9zdGljIHRvb2wsIGEgZGF0YSBjb2xsZWN0aW9uIG1lY2hhbmlzbSwgb3Igc29tZXRoaW5nIG1vcmUgbmVmYXJpb3VzPyBLbm93aW5nIHRoZSBlbnZpcm9ubWVudCBpdCYjMzk7cyBvcGVyYXRpbmcgaW4gaXMga2V5IOKAkyB0aGUgcGxhdGZvcm0sIHRoZSB0YXJnZXQgc3lzdGVtLCB0aGUgYXNzb2NpYXRlZCBzZWN1cml0eSBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gZmlndXJpbmcgb3V0IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgaXQgYWN0aW5nIGluIGEgYmVuaWduIHdheSwgb3IgaXMgdGhlcmUgYSBjaGFuY2UgaXQgaGFzIG90aGVyLCBsZXNzIG9idmlvdXMgcHVycG9zZXM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaXRzIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGdldCB0byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvcl9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4MDc9TU9EVUxFX1BBUk1fREVTQyh0cmFuc3BhcmVudF9odWdlcGFnZSwgXCYjMzQ7VXNlIGEgZGVkaWNhdGVkIHRtcGZzIG1vdW50IHBvaW50IHdpdGggVHJhbnNwYXJlbnQgSHVnZXBhZ2UgZW5hYmxlZCAodHJ1ZSA9IGRlZmF1bHQpXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MDktXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE4MTA6c3RhdGljIGludCBwYW50aG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MTEte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM9MTg4Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYW50aG9yX2RyaXZlciA9IHtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTg4ODpcdC5wcm9iZSA9IHBhbnRob3JfcHJvYmUsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4ODktXHQucmVtb3ZlID0gcGFudGhvcl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBVbmRlcnN0YW5kaW5nIHRoZSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgd2hhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBUaGUgY29tbWFuZCBgcGFudGhvcl9wcm9iZWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpdHMgcHVycG9zZSBhbmQgZnVuY3Rpb24gYmVmb3JlIEkgY2FuIHByb2NlZWQuIE5vIHBvaW50IGp1bXBpbmcgaW4gYmxpbmRseSDigJMgSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoaXMgdG9vbCBpcyBzdXBwb3NlZCB0byBiZSBkb2luZy4gV2hhdCBkb2VzIGl0IG1lYXN1cmU/IFdoYXQgZGF0YSBkb2VzIGl0IG91dHB1dD8gV2hhdCBzeXN0ZW1zIGRvZXMgaXQgaW50ZXJhY3Qgd2l0aD8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBpdHMgZnVuY3Rpb25hbGl0eS4gVGhpcyBpbml0aWFsIHByb2JlIGlzIGNydWNpYWwgZm9yIGFueSBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MTA6XHRzdGF0aWMgaW50IHBhbnRob3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbjE4MTE6XHR7XG4xODEyOlx0XHRzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2O1xuMTgxMzpcdFxuMTgxNDpcdFx0cHRkZXYgPSBkZXZtX2RybV9kZXZfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNnBhbnRob3JfZHJtX2RyaXZlcixcbjE4MTU6XHRcdFx0XHRcdCAgIHN0cnVjdCBwYW50aG9yX2RldmljZSwgYmFzZSk7XG4xODE2Olx0XHRpZiAoSVNfRVJSKHB0ZGV2KSlcbjE4MTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODE4Olx0XG4xODE5Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwdGRldik7XG4xODIwOlx0XG4xODIxOlx0XHRyZXR1cm4gcGFudGhvcl9kZXZpY2VfaW5pdChwdGRldik7XG4xODIyOlx0fVxuMTgyMzpcdFxuMTgyNDpcdHN0YXRpYyB2b2lkIHBhbnRob3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4xODI1Olx0e1xuMTgyNjpcdFx0c3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuMTgyNzpcdFxuMTgyODpcdFx0cGFudGhvcl9kZXZpY2VfdW5wbHVnKHB0ZGV2KTtcbjE4Mjk6XHR9XG4xODMwOlx0XG4xODMxOlx0c3RhdGljIHNzaXplX3QgcHJvZmlsaW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuMTgzMjpcdFx0XHRcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTgzMzpcdFx0XHRcdCAgICAgIGNoYXIgKmJ1ZilcbjE4MzQ6XHR7XG4xODM1Olx0XHRzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xODM2Olx0XG4xODM3Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVkXFxuXCYjMzQ7LCBwdGRldi1cdTAwM2Vwcm9maWxlX21hc2spO1xuMTgzODpcdH1cbjE4Mzk6XHRcbjE4NDA6XHRzdGF0aWMgc3NpemVfdCBwcm9maWxpbmdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuMTg0MTpcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbjE4NDI6XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMTg0MzpcdHtcbjE4NDQ6XHRcdHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbjE4NDU6XHRcdHUzMiB2YWx1ZTtcbjE4NDY6XHRcdGludCBlcnI7XG4xODQ3Olx0XG4xODQ4Olx0XHRlcnIgPSBrc3RydG91MzIoYnVmLCAwLCBcdTAwMjZ2YWx1ZSk7XG4xODQ5Olx0XHRpZiAoZXJyKVxuMTg1MDpcdFx0XHRyZXR1cm4gZXJyO1xuMTg1MTpcdFxuMTg1MjpcdFx0aWYgKCh2YWx1ZSBcdTAwMjYgflBBTlRIT1JfREVWSUNFX1BST0ZJTElOR19BTEwpICE9IDApXG4xODUzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg1NDpcdFxuMTg1NTpcdFx0cHRkZXYtXHUwMDNlcHJvZmlsZV9tYXNrID0gdmFsdWU7XG4xODU2Olx0XG4xODU3Olx0XHRyZXR1cm4gbGVuO1xuMTg1ODpcdH1cbjE4NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBhbnRob3JfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpc3NlY3RpbmcgdGhlIFBhbnRob3IgRGV2aWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHNvIGBwYW50aG9yX2RldmljZV9pbml0YC4uLiBteSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdG8gYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBkZXZpY2UgaXMgdGhpcz8gSXMgaXQgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcj8gQSBzcGVjaWZpYyBkcml2ZXI/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBjcmVhdGluZyBhIGZsb3djaGFydCwgY29uc2lkZXJpbmcgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGhhcmR3YXJlIGNvbXBvbmVudHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbW1vbiBwaXRmYWxscyBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb246IGVycm9yIGhhbmRsaW5nLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgaG93IHRob3NlIGFyZSBhZGRyZXNzZWQuCgpJJiMzOTttIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgbG93LWxldmVsIHN0ZXBzIHJlcXVpcmVkIHRvIGJyaW5nIGEgJiMzNDtQYW50aG9yJiMzNDsgZGV2aWNlIG9ubGluZS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHRoZSBsaWtlbHkgb3BlcmF0aW9uczogcG93ZXItdXAgc2VxdWVuY2luZywgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiwgaW50ZXJydXB0IHNldHVwLCBtYXliZSBzb21lIGhhcmR3YXJlIHRlc3RpbmcsIGFuZCBlcnJvciBjb2RlIGNoZWNrcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBhbmQgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggb3RoZXIgc3lzdGVtIHNlcnZpY2VzIGxpa2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIG9yIHBvd2VyIG1hbmFnZW1lbnQuCgpBIHdlbGwtd3JpdHRlbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBjb25zaWRlciBwb3dlci1zYXZpbmcsIHBvdGVudGlhbGx5IGVuYWJsaW5nIGRldmljZS1zcGVjaWZpYyBjbG9ja3MgYW5kIHBvd2VyIGRvbWFpbnMgb25seSB3aGVuIG5lY2Vzc2FyeS4gSXQgcHJvYmFibHkgaW5jbHVkZXMgYSByb2J1c3QgZXJyb3ItY2hlY2tpbmcgbWVjaGFuaXNtIHdpdGggY2xlYXIgbG9nZ2luZyBmb3IgZGVidWdnaW5nLiBJZiBJIHNlZSBhbnkgY3JpdGljYWwgc2VjdGlvbnMsIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGVtIGZvciBwcm9wZXIgbXV0ZXggdXNhZ2Ugb3IgYW55IG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJJiMzOTtsbCBtZW50YWxseSBldmFsdWF0ZSB0aGUgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ3k6IGRvZXMgaXQgcmV0cnksIGxvZyBlcnJvcnMsIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2Rlcywgb3IgdHJpZ2dlciBhIHN5c3RlbSByZXNldD8gSSYjMzk7ZCBleHBlY3QgY29tcHJlaGVuc2l2ZSBsb2dnaW5nIHRvIGFpZCB3aXRoIGRlYnVnZ2luZywgZXNwZWNpYWxseSBkdXJpbmcgZWFybHkgYnJpbmctdXAgb3IgaWYgSSBlbmNvdW50ZXIgZGV2aWNlLXNwZWNpZmljIGlzc3VlcyBsYXRlci4gVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYXJlZnVsbHkgZGVzaWduZWQgdG8gcHJldmVudCBhbnkgZGVhZGxvY2tzIG9yIHN5c3RlbSBpbnN0YWJpbGl0eSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3JfZGV2aWNlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYz0xNjE9c3RhdGljIHZvaWQgcGFudGhvcl9kZXZpY2VfZnJlZV9wYWdlKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMTY1LVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYzoxNjY6aW50IHBhbnRob3JfZGV2aWNlX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMTY3LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTM0Mj1zdHJ1Y3QgcGFudGhvcl9maWxlIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTM3My1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmg6Mzc0OmludCBwYW50aG9yX2RldmljZV9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC0zNzUtdm9pZCBwYW50aG9yX2RldmljZV91bnBsdWcoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldik7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xODEwPXN0YXRpYyBpbnQgcGFudGhvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTgyMC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTgyMTpcdHJldHVybiBwYW50aG9yX2RldmljZV9pbml0KHB0ZGV2KTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTgyMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MjEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkRpdmluZyBpbnRvIGBwYW50aG9yX2RldmljZV9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhpcyBgcGFudGhvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRldmljZSBpcyBiZWluZyBpbml0aWFsaXplZCwgYW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJha2VkIGluIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciB0aGUgaGlnaC1sZXZlbCBmbG93IOKAkyB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbjoqKiBXaGF0IG1lbW9yeSwgaW50ZXJydXB0IGxpbmVzLCBvciBvdGhlciBoYXJkd2FyZSByZXNvdXJjZXMgYXJlIGNsYWltZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24/IEFueSB1bnVzdWFsIG9yIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGFsbG9jYXRpb25zIGFyZSBvZiBpbW1lZGlhdGUgY29uY2Vybi4KKiAgICoqSGFyZHdhcmUgY29uZmlndXJhdGlvbjoqKiBBcmUgcmVnaXN0ZXJzIGJlaW5nIHdyaXR0ZW4gdG8/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHZhbHVlcyBiZWluZyBzZXQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtYWdpYyBudW1iZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCBkZWVwZXIgY29udGV4dD8KKiAgICoqRHJpdmVyIHJlZ2lzdHJhdGlvbjoqKiBJcyB0aGlzIGNvZGUgaW50ZWdyYXRpbmcgd2l0aCB0aGUga2VybmVsJiMzOTtzIGRldmljZSBtb2RlbCBpbiBhbnkgd2F5PyBXaGF0JiMzOTtzIHRoZSBpbnRlcmZhY2UgdXNlZCwgYW5kIGRvZXMgaXQgc2VlbSBzdGFuZGFyZCBvciBjdXN0b20/IFdoYXQgY2FsbGJhY2tzIGdldCByZWdpc3RlcmVkLCBhbmQgd2hhdCBhcmUgdGhlaXIgaGFuZGxlcnM/CiogICAqKkVycm9yIGhhbmRsaW5nOioqIElzIHRoaXMgaW5pdGlhbGl6YXRpb24gcm9idXN0PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBmYWlsdXJlIGF0IGVhY2ggc3RlcD8gQXJlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBoYW5kbGVkIGdyYWNlZnVsbHkgb3IgY2FuIHRoZSBkZXZpY2UgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlPwoqICAgKipEZXBlbmRlbmNpZXM6KiogQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZHJpdmVycyBvciBtb2R1bGVzPyBXaGVyZSB3aWxsIEkgbG9vayBuZXh0PwoKSSYjMzk7bGwgYmUgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFyZWFzIHdoZXJlIHRoZSBzeXN0ZW0gY2FuIGJlIGJsb2NrZWQgYnkgSS9PLCBhcyB0aGlzIGlzIGFsd2F5cyBhIHNvdXJjZSBvZiBlcnJvcnMgaW4gZGV2aWNlIGRyaXZlcnMuCgpJJiMzOTtsbCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgdGltaW5nIGNvbnNpZGVyYXRpb25zIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGdvb2QgZXhlcmNpc2UgZm9yIGZpbmRpbmcgaGlkZGVuIGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE2NjpcdGludCBwYW50aG9yX2RldmljZV9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXG4gMTY3Olx0e1xuIDE2ODpcdFx0dTMyICpkdW1teV9wYWdlX3ZpcnQ7XG4gMTY5Olx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbiAxNzA6XHRcdHN0cnVjdCBwYWdlICpwO1xuIDE3MTpcdFx0aW50IHJldDtcbiAxNzI6XHRcbiAxNzM6XHRcdHB0ZGV2LVx1MDAzZXNvY19kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKHB0ZGV2LVx1MDAzZWJhc2UuZGV2KTtcbiAxNzQ6XHRcbiAxNzU6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZwdGRldi1cdTAwM2V1bnBsdWcuZG9uZSk7XG4gMTc2Olx0XHRyZXQgPSBkcm1tX211dGV4X2luaXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgXHUwMDI2cHRkZXYtXHUwMDNldW5wbHVnLmxvY2spO1xuIDE3NzpcdFx0aWYgKHJldClcbiAxNzg6XHRcdFx0cmV0dXJuIHJldDtcbiAxNzk6XHRcbiAxODA6XHRcdHJldCA9IGRybW1fbXV0ZXhfaW5pdChcdTAwMjZwdGRldi1cdTAwM2ViYXNlLCBcdTAwMjZwdGRldi1cdTAwM2VwbS5tbWlvX2xvY2spO1xuIDE4MTpcdFx0aWYgKHJldClcbiAxODI6XHRcdFx0cmV0dXJuIHJldDtcbiAxODM6XHRcbiAxODQ6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG4gMTg1Olx0XHRkcm1tX211dGV4X2luaXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgXHUwMDI2cHRkZXYtXHUwMDNlZ2Vtcy5sb2NrKTtcbiAxODY6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnB0ZGV2LVx1MDAzZWdlbXMubm9kZSk7XG4gMTg3Olx0I2VuZGlmXG4gMTg4Olx0XG4gMTg5Olx0XHRhdG9taWNfc2V0KFx1MDAyNnB0ZGV2LVx1MDAzZXBtLnN0YXRlLCBQQU5USE9SX0RFVklDRV9QTV9TVEFURV9TVVNQRU5ERUQpO1xuIDE5MDpcdFx0cCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuIDE5MTpcdFx0aWYgKCFwKVxuIDE5MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxOTM6XHRcbiAxOTQ6XHRcdHB0ZGV2LVx1MDAzZXBtLmR1bW15X2xhdGVzdF9mbHVzaCA9IHA7XG4gMTk1Olx0XHRkdW1teV9wYWdlX3ZpcnQgPSBwYWdlX2FkZHJlc3MocCk7XG4gMTk2Olx0XHRyZXQgPSBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgcGFudGhvcl9kZXZpY2VfZnJlZV9wYWdlLFxuIDE5NzpcdFx0XHRcdFx0ICAgICAgIHB0ZGV2LVx1MDAzZXBtLmR1bW15X2xhdGVzdF9mbHVzaCk7XG4gMTk4Olx0XHRpZiAocmV0KVxuIDE5OTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIwMDpcdFxuIDIwMTpcdFx0LypcbiAyMDI6XHRcdCAqIFNldCB0aGUgZHVtbXkgcGFnZSBob2xkaW5nIHRoZSBsYXRlc3QgZmx1c2ggdG8gMS4gVGhpcyB3aWxsIGNhdXNlIHRoZVxuIDIwMzpcdFx0ICogZmx1c2ggdG8gYXZvaWRlZCBhcyB3ZSBrbm93IGl0IGlzbiYjMzk7dCBuZWNlc3NhcnkgaWYgdGhlIHN1Ym1pc3Npb25cbiAyMDQ6XHRcdCAqIGhhcHBlbnMgd2hpbGUgdGhlIGR1bW15IHBhZ2UgaXMgbWFwcGVkLiBaZXJvIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2VcbiAyMDU6XHRcdCAqIHRoYXQgbWVhbnMgJiMzOTthbHdheXMgZmx1c2gmIzM5Oy5cbiAyMDY6XHRcdCAqL1xuIDIwNzpcdFx0KmR1bW15X3BhZ2VfdmlydCA9IDE7XG4gMjA4Olx0XG4gMjA5Olx0XHRJTklUX1dPUksoXHUwMDI2cHRkZXYtXHUwMDNlcmVzZXQud29yaywgcGFudGhvcl9kZXZpY2VfcmVzZXRfd29yayk7XG4gMjEwOlx0XHRwdGRldi1cdTAwM2VyZXNldC53cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwmIzM0O3BhbnRob3ItcmVzZXQtd3FcJiMzNDssIDApO1xuIDIxMTpcdFx0aWYgKCFwdGRldi1cdTAwM2VyZXNldC53cSlcbiAyMTI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjEzOlx0XG4gMjE0Olx0XHRyZXQgPSBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgcGFudGhvcl9kZXZpY2VfcmVzZXRfY2xlYW51cCwgTlVMTCk7XG4gMjE1Olx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgRFJNIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGEgdHlwaWNhbCBEUk0gc2V0dXAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZWZmZWN0aXZlbHkgZnV6eiBgcGFudGhvcmAgdXNpbmcgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGludGVyZXN0aW5nIHN5c2NhbGxzIGZvciBkZXZpY2UgbWFuYWdlbWVudCwgbGlrZSBgc3l6X2RldmZyZXFfYWRkX2RldmljZWAsIGJ1dCB0aGF0JiMzOTtzIHJlYWxseSBmb3IgZGV2ZnJlcS4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfODAyMTFfam9pbl9pYnNzYCBmb3IgdGhpbmdzIGxpa2UgVVNCIGFuZCB3aXJlbGVzcy4uLiBidXQgbm90aGluZyBkaXJlY3RseSBmb3IgRFJNIGJleW9uZCB0aGF0IGB2a21zYCB2aXJ0dWFsIHNldHVwLgoKSGFuZyBvbiwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X29wZW5fZGV2YCwgcmlnaHQ/IFdlIGNhbiB1c2UgdGhhdCB0byBvcGVuIGRldmljZXMgbGlrZSBgL2Rldi9kcmkvcmVuZGVyRDEyOGAsIHdoaWNoIGlzIHByb21pc2luZy4gQnV0IGlmIGBwYW50aG9yYCBpc24mIzM5O3QgbG9hZGVkLCBvcGVuaW5nIGl0IHdvbiYjMzk7dCBkbyBhbnl0aGluZy4gVGhlIGNyaXRpY2FsIHBvaW50IGlzLCBjYW4gc3l6a2FsbGVyIHJ1biBvbiBhIGRldmljZSB0aGF0ICpkb2VzKiBoYXZlIGBwYW50aG9yYCBzdXBwb3J0PyBXZSYjMzk7cmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgYW4gQVJNIGJvYXJkIHdpdGggTWFsaSBDU0YuCgpUaGUgcHJvbXB0LCB0aG91Z2gsIHNheXMgdGhlIGNvZGUgcGF0aHMgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gYXJlIG9mdGVuIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9uLiBJcyBgcGFudGhvcmAgb25lIG9mIHRob3NlIHVucmVhY2hhYmxlIHBhdGhzPyBBYnNvbHV0ZWx5LiBJdOKAmXMgYSBwbGF0Zm9ybSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBBUk0gTWFsaSBDU0YuIFRoZXJlJiMzOTtzIG5vIGVxdWl2YWxlbnQgc29mdHdhcmUgZW11bGF0b3IgaW4gUUVNVSBvciBldmVuIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZiwgbGlrZSB0aGVyZSBpcyBmb3IgYHZrbXNgLgoKSG9sZCBvbiwgbWF5YmUgdGhlcmUmIzM5O3MgYSBtb2NrIG9yIHZpcnR1YWwgZGV2aWNlIHdpdGhpbiB0aGUgYHBhbnRob3JgIGRpcmVjdG9yeS4gTGV0JiMzOTtzIGNoZWNrIGBkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9gIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVyIHRyaWNrZXJ5IHdlIGNhbiBleHBsb2l0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2NrfHZpcnR1YWx8dmttcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmM9MTIzPXN0cnVjdCBwYW50aG9yX2Z3X2JpbmFyeV9zZWN0aW9uX2VudHJ5X2hkciB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jLTEyNi1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYzoxMjc6XHQvKiogQHZhOiBNQ1UgdmlydHVhbCByYW5nZSB0byBtYXAgdGhpcyBiaW5hcnkgc2VjdGlvbiB0by4gKi9cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy0xMjgtXHRzdHJ1Y3Qge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYz01Mzk9c3RhdGljIGludCBwYW50aG9yX2Z3X2xvYWRfc2VjdGlvbl9lbnRyeShzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy01NzMtXHRpZiAoIUlTX0FMSUdORUQoaGRyLnZhLnN0YXJ0LCB2bV9wZ3N6KSB8fCAhSVNfQUxJR05FRChoZHIudmEuZW5kLCB2bV9wZ3N6KSkge1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jOjU3NDpcdFx0ZHJtX2VycihcdTAwMjZwdGRldi1cdTAwM2ViYXNlLCBcJiMzNDtGaXJtd2FyZSBjb3JydXB0ZWQsIHZpcnR1YWwgYWRkcmVzc2VzIG5vdCBwYWdlIGFsaWduZWQ6IDB4JXgtMHgleFxcblwmIzM0OyxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy01NzUtXHRcdFx0aGRyLnZhLnN0YXJ0LCBoZHIudmEuZW5kKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTEyNDc9dm9pZCBwYW50aG9yX2tlcm5lbF9ib19kZXN0cm95KHN0cnVjdCBwYW50aG9yX2tlcm5lbF9ibyAqYm8pXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMjc4LSAqIEBncHVfdmE6IEdQVSBhZGRyZXNzIGFzc2lnbmVkIHdoZW4gbWFwcGluZyB0byB0aGUgVk0uXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjEyNzk6ICogSWYgZ3B1X3ZhID09IFBBTlRIT1JfVk1fS0VSTkVMX0FVVE9fVkEsIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2lsbCBiZVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMjgwLSAqIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGVkLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTU1PXN0cnVjdCBwYW50aG9yX3ZtX29wX2N0eCB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMTctICpcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MjE4OiAqIEEgVk0gaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIEdQVSAob3IgTUNVKSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTIxOS0gKiBJdCBlbWJlZHMgdGhlIE1NVSBwYWdlIHRhYmxlIGZvciB0aGlzIGFkZHJlc3Mgc3BhY2UsIGEgdHJlZSBjb250YWluaW5nXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyMDogKiBhbGwgdGhlIHZpcnR1YWwgbWFwcGluZ3Mgb2YgR0VNIG9iamVjdHMsIGFuZCBvdGhlciB0aGluZ3MgbmVlZGVkIHRvIG1hbmFnZVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMjEtICogdGhlIFZNLlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjI2LSAqXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyNzogKiBBIHBvcnRpb24gb2YgdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBpcyByZXNlcnZlZCBmb3Iga2VybmVsIG9iamVjdHMsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyODogKiBsaWtlIGhlYXAgY2h1bmtzLCBhbmQgdXNlcnNwYWNlIGdldHMgdG8gZGVjaWRlIGhvdyBtdWNoIG9mIHRoZSB2aXJ0dWFsXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyOTogKiBhZGRyZXNzIHNwYWNlIGlzIGxlZnQgdG8gdGhlIGtlcm5lbCAoaGFsZiBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTIzMC0gKiBieSBkZWZhdWx0KS5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTQ1Mj1zdGF0aWMgdm9pZCAqYWxsb2NfcHQodm9pZCAqY29va2llLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtNDg1LVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzo0ODY6XHQvKiBQYWdlIHRhYmxlIGVudHJpZXMgZG9uJiMzOTt0IHVzZSB2aXJ0dWFsIGFkZHJlc3Nlcywgd2hpY2ggdHJpcHMgb3V0XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTQ4Ny1cdCAqIGttZW1sZWFrLiBrbWVtbGVha19hbGxvY19waHlzKCkgbWlnaHQgd29yaywgYnV0IHBoeXNpY2FsIGFkZHJlc3Nlc1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM9MTQxND1zdGF0aWMgdm9pZCBwYW50aG9yX3ZtX3ByZXBhcmVfc3luY19vbmx5X29wX2N0eChzdHJ1Y3QgcGFudGhvcl92bV9vcF9jdHggKm9wX2N0eCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjEtLyoqXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjE0MjI6ICogcGFudGhvcl92bV9nZXRfYm9fZm9yX3ZhKCkgLSBHZXQgdGhlIEdFTSBvYmplY3QgbWFwcGVkIGF0IGEgdmlydHVhbCBhZGRyZXNzXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjMtICogQHZtOiBWTSB0byBsb29rIGludG8uXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjQtICogQHZhOiBWaXJ0dWFsIGFkZHJlc3MgdG8gc2VhcmNoIGZvci5cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MTQyNTogKiBAYm9fb2Zmc2V0OiBPZmZzZXQgb2YgdGhlIEdFTSBvYmplY3QgbWFwcGVkIGF0IHRoaXMgdmlydHVhbCBhZGRyZXNzLlxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0xNDI2LSAqIE9ubHkgdmFsaWQgb24gc3VjY2Vzcy5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5oPTc3PWJvb2wgcGFudGhvcl92bV9pc191bnVzYWJsZShzdHJ1Y3QgcGFudGhvcl92bSAqdm0pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmgtODAtICogUEFOVEhPUl9WTV9LRVJORUxfQVVUT19WQTogVXNlIHRoaXMgbWFnaWMgYWRkcmVzcyB3aGVuIHlvdSB3YW50IHRoZSBHRU1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11Lmg6ODE6ICogbG9naWMgdG8gYXV0by1hbGxvY2F0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHRoZSByZXNlcnZlZCBrZXJuZWwgVkEgcmFuZ2UuXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5oLTgyLSAqL1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYz0zNTA9c3RydWN0IHBhbnRob3JfcXVldWUge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy00MDctXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM6NDA4Olx0XHQvKiogQGlmYWNlLmlucHV0X2Z3X3ZhOiBGVyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGludGVyZmFjZSBidWZmZXIuICovXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmMtNDA5LVx0XHR1MzIgaW5wdXRfZndfdmE7XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmMtNDEwLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jOjQxMTpcdFx0LyoqIEBpZmFjZS5vdXRwdXRfZndfdmE6IEZXIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgb3V0cHV0IGludGVyZmFjZSBidWZmZXIuICovXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmMtNDEyLVx0XHR1MzIgb3V0cHV0X2Z3X3ZhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ3NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGEgUGF0Y2gqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhlcmUmIzM5O3Mgbm8gbWVudGlvbiBvZiBhIG1vY2sgaGVyZSwgc28gdGhhdCYjMzk7cyBpcnJlbGV2YW50LiBUaGUgY3JpdGljYWwgcG9pbnQgaXM6IHN5emthbGxlciBpcyB0ZXN0aW5nIGEgcGF0Y2gsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHJ1bm5pbmcgZWl0aGVyIG9uIHJlYWwgQVJNIGhhcmR3YXJlIG9yIFFFTVUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgcHJlc2VuY2Ugb2YgYSAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldyYjMzQ7IGNvbW1pdCBtZXNzYWdlIGNvbmZpcm1zIHRoYXQgdGhpcyBwYXRjaCB3YXMgc2VudCB0byBzeXpib3QgZm9yIHRlc3RpbmcuIFNpbmNlIHN5emthbGxlciBpcyBzZXQgdXAgdG8gdGVzdCBwYXRjaGVzIG9uIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGUgYnVnIHdhcyBmb3VuZCwgYW5kIGlmIHRoZSBidWcgd2FzIGZvdW5kIG9uIGFuIEFSTSBib2FyZCwgdGhlIHBhdGNoIHdpbGwgYmUgdGVzdGVkIHRoZXJlLgoKVGhlIHByb21wdCBpcyB0aGUga2V5IGhlcmUuIEl0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBzZWVtcyBwcmV0dHkgY2xlYXIuIE15IHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCYjMzk7cyBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gR0NFL1FFTVUuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGUgY29kZSBwYXRocyBhZGRlZCBieSBgcGFudGhvcmAgYXJlIHJlYWNoYWJsZS4gSXMgYHBhbnRob3JgIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFL1FFTVU/IElmIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBgcGFudGhvcmAgd2l0aGluIFFFTVUsIGl0JiMzOTtzIHVucmVhY2hhYmxlLiBCdXQsIHdhaXQsIHN5emthbGxlciBjb3VsZCBiZSBydW5uaW5nIG9uIHJlYWwgaGFyZHdhcmUuIFRoYXQgZG9lc24mIzM5O3QgbWF0dGVyOyB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyBJIHNob3VsZCBsb29rIGF0IHJlYWNoYWJpbGl0eSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG11c3QgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IGlzIG9ubHkgcmVhY2hhYmxlIG9uIHJlYWwgaGFyZHdhcmUuCgpUbyBiZSBleHRyYSBzdXJlLCBJJiMzOTtsbCByZWFkIHRoYXQgYWdhaW46ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFllcywgaXQmIzM5O3MgdmVyeSBjbGVhci4KClNvLCAqaXMqIGBwYW50aG9yYCByZWFjaGFibGU/IEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBDYW4gaXQgYmUgcHJvYmVkIHdpdGggYSBkZXZpY2UgdHJlZSBvdmVybGF5IGluIFFFTVU/IE1heWJlLiBCdXQgZXZlbiBpZiBpdCAqY2FuKiBiZSBwcm9iZWQsIGRvZXMgaXQgcmVxdWlyZSBhY2Nlc3MgdG8gcmVhbCBoYXJkd2FyZSByZWdpc3RlcnMgdG8gbm90IGZhaWwgdGhlIHByb2JlPyBJIG5lZWQgdG8gYW5hbHl6ZSBgcGFudGhvcl9kZXZpY2VfaW5pdGAgYW5kIGBwYW50aG9yX3Byb2JlYCB0byBkZXRlcm1pbmUgaWYgdGhvc2UgZnVuY3Rpb25zIGFjY2VzcyBoYXJkd2FyZSByZWdpc3RlcnMsIGFzIHRoYXQgd291bGQgbWFrZSB0aGlzIGNvZGUgcGF0aCB1bnJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9pb3JlbWFwfHJlYWRsfHdyaXRlbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTYzMD1zdGF0aWMgaW5saW5lIHZvaWQgZ3B1X3dyaXRlKHZvaWQgX19pb21lbSAqaW9tZW0sIHUzMiByZWcsIHUzMiBkYXRhKVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC02MzEte1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2MzI6XHR3cml0ZWwoZGF0YSwgaW9tZW0gJiM0MzsgcmVnKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjMzLX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTYzNT1zdGF0aWMgaW5saW5lIHUzMiBncHVfcmVhZCh2b2lkIF9faW9tZW0gKmlvbWVtLCB1MzIgcmVnKVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC02MzYte1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2Mzc6XHRyZXR1cm4gcmVhZGwoaW9tZW0gJiM0MzsgcmVnKTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjM4LX1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTY0MD1zdGF0aWMgaW5saW5lIHUzMiBncHVfcmVhZF9yZWxheGVkKHZvaWQgX19pb21lbSAqaW9tZW0sIHUzMiByZWcpXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTY0MS17XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oOjY0MjpcdHJldHVybiByZWFkbF9yZWxheGVkKGlvbWVtICYjNDM7IHJlZyk7XG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTY0My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDAyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBgcGFudGhvcl9kZXZpY2VfaW5pdGAgYW5kIFJlZ2lzdGVyIEFjY2VzcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtEb2VzIGBwYW50aG9yX2RldmljZV9pbml0YCBhY3R1YWxseSB0b3VjaCBhbnkgaGFyZHdhcmUgcmVnaXN0ZXJzPyYjMzQ7LiBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBqdXN0IHNldHRpbmcgdXAgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIG9yIGlmIGl0JiMzOTtzIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIGRldmljZSYjMzk7cyBjb250cm9sIG9yIHN0YXR1cyByZWdpc3RlcnMuIFRoZSBiZWhhdmlvciBpcyBjcml0aWNhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG9pbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gd2hlcmUgaXQgY291bGQgYmUgcGVyZm9ybWluZyBJL08uIEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtZW1vcnkgYWRkcmVzc2VzIG9yIHBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzZXMgYmVpbmcgdXNlZD8gQW55IGJpdHdpc2Ugb3BlcmF0aW9ucyB0aGF0IGxvb2sgbGlrZSB0aGV5JiMzOTtyZSBzZXR0aW5nIG9yIGNsZWFyaW5nIGNvbnRyb2wgZmxhZ3M/IEnigJlsbCBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGNhcmVmdWxseS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHN0ZXBwaW5nIHRocm91Z2ggdGhlIGZ1bmN0aW9uLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBjYXJlZnVsIHJlYWRpbmcgd2l0aCBhbiBleWUgdG8gd2hlcmUgbWVtb3J5IGlzIGJlaW5nIHJlYWQvd3JpdHRlbi4gSXTigJlzIGVpdGhlciBnb2luZyB0byBiZSBhIHF1aWNrIGdsYW5jZSwgb3IgYSBtb3JlIGludm9sdmVkIGludmVzdGlnYXRpb24sIGJ1dCBJIG5lZWQgdG8gZmlndXJlIGl0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtncHVfcmVhZHxncHVfd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMDUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIG9uZToKCioqUmV2aXNpdGluZyBgcGFudGhvcl9kZXZpY2VfaW5pdGAqKgoKQWxyaWdodCwgdGltZSB0byBjaXJjbGUgYmFjayB0byBgcGFudGhvcl9kZXZpY2VfaW5pdGAuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgZnVuY3Rpb24uIEkmIzM5O3ZlIGdvdCBhIG5hZ2dpbmcgZmVlbGluZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgc3VidGxlIEkgb3Zlcmxvb2tlZCwgb3IgcGVyaGFwcyBhIGNvbnNlcXVlbmNlIG9mIGEgcmVjZW50IGNoYW5nZSB0aGF0IEkgbmVlZCB0byBjb25maXJtLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgSSBjYW4mIzM5O3QgYWZmb3JkIGFueSBhc3N1bXB0aW9ucyBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBYLCBZLCBhbmQgWiBzcGVjaWZpYyBmZWF0dXJlcyBhZ2FpbiB0byBlbnN1cmUgdGhleSYjMzk7cmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIE5lZWQgdG8gbWFrZSBzdXJlIHRoZSBsb3ctbGV2ZWwgc3R1ZmYgdGhlcmUgaXMgc3RpbGwgYXMgZXhwZWN0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgcmVjZW50IHBhdGNoZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCByZS1ldmFsdWF0ZSB0aGUgY29yZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTY6XHRcdFx0cmV0dXJuIHJldDtcbiAyMTc6XHRcbiAyMTg6XHRcdHJldCA9IHBhbnRob3JfY2xrX2luaXQocHRkZXYpO1xuIDIxOTpcdFx0aWYgKHJldClcbiAyMjA6XHRcdFx0cmV0dXJuIHJldDtcbiAyMjE6XHRcbiAyMjI6XHRcdHJldCA9IHBhbnRob3JfaW5pdF9wb3dlcihwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjIzOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gMjI0Olx0XHRcdGRybV9lcnIoXHUwMDI2cHRkZXYtXHUwMDNlYmFzZSwgXCYjMzQ7aW5pdCBwb3dlciBkb21haW5zIGZhaWxlZCwgcmV0PSVkXCYjMzQ7LCByZXQpO1xuIDIyNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDIyNjpcdFx0fVxuIDIyNzpcdFxuIDIyODpcdFx0cmV0ID0gcGFudGhvcl9kZXZmcmVxX2luaXQocHRkZXYpO1xuIDIyOTpcdFx0aWYgKHJldClcbiAyMzA6XHRcdFx0cmV0dXJuIHJldDtcbiAyMzE6XHRcbiAyMzI6XHRcdHB0ZGV2LVx1MDAzZWlvbWVtID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2UodG9fcGxhdGZvcm1fZGV2aWNlKHB0ZGV2LVx1MDAzZWJhc2UuZGV2KSxcbiAyMzM6XHRcdFx0XHRcdFx0XHRcdCAgICAgIDAsIFx1MDAyNnJlcyk7XG4gMjM0Olx0XHRpZiAoSVNfRVJSKHB0ZGV2LVx1MDAzZWlvbWVtKSlcbiAyMzU6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHRkZXYtXHUwMDNlaW9tZW0pO1xuIDIzNjpcdFxuIDIzNzpcdFx0cHRkZXYtXHUwMDNlcGh5c19hZGRyID0gcmVzLVx1MDAzZXN0YXJ0O1xuIDIzODpcdFxuIDIzOTpcdFx0cmV0ID0gZGV2bV9wbV9ydW50aW1lX2VuYWJsZShwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjQwOlx0XHRpZiAocmV0KVxuIDI0MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDI0MjpcdFxuIDI0MzpcdFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjQ0Olx0XHRpZiAocmV0KVxuIDI0NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDI0NjpcdFxuIDI0NzpcdFx0LyogSWYgUE0gaXMgZGlzYWJsZWQsIHdlIG5lZWQgdG8gY2FsbCBwYW50aG9yX2RldmljZV9yZXN1bWUoKSBtYW51YWxseS4gKi9cbiAyNDg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUE0pKSB7XG4gMjQ5Olx0XHRcdHJldCA9IHBhbnRob3JfZGV2aWNlX3Jlc3VtZShwdGRldi1cdTAwM2ViYXNlLmRldik7XG4gMjUwOlx0XHRcdGlmIChyZXQpXG4gMjUxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAyNTI6XHRcdH1cbiAyNTM6XHRcbiAyNTQ6XHRcdHJldCA9IHBhbnRob3JfaHdfaW5pdChwdGRldik7XG4gMjU1Olx0XHRpZiAocmV0KVxuIDI1NjpcdFx0XHRnb3RvIGVycl9ycG1fcHV0O1xuIDI1NzpcdFxuIDI1ODpcdFx0cmV0ID0gcGFudGhvcl9wd3JfaW5pdChwdGRldik7XG4gMjU5Olx0XHRpZiAocmV0KVxuIDI2MDpcdFx0XHRnb3RvIGVycl9ycG1fcHV0O1xuIDI2MTpcdFxuIDI2MjpcdFx0cmV0ID0gcGFudGhvcl9ncHVfaW5pdChwdGRldik7XG4gMjYzOlx0XHRpZiAocmV0KVxuIDI2NDpcdFx0XHRnb3RvIGVycl91bnBsdWdfcHdyO1xuIDI2NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpSaWdodCwgaXQmIzM5O3Mga2lja2luZyB0aGluZ3Mgb2ZmIHdpdGggYSBjYWxsIHRvIGBwYW50aG9yX2h3X2luaXRgLiBOYXR1cmFsbHksIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uLiBgcGFudGhvcl9od19pbml0YCBpcyB0aGUga2V5IGhlcmU7IGl0JiMzOTtzIHRoZSBnYXRld2F5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBQYW50aG9yIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmRhbWVudGFsIGFzcGVjdHMgb2YgdGhlIGhhcmR3YXJlIGFyZSBiZWluZyBjb25maWd1cmVkIG9yIGVuYWJsZWQgYXQgdGhpcyBzdGFnZS4gSXMgaXQgY2xvY2sgc2V0dXA/IE1lbW9yeSBtYXBwaW5nPyBEZXZpY2UgZHJpdmVyIGxvYWRpbmc/IEtub3dpbmcgd2hhdCBgcGFudGhvcl9od19pbml0YCBpcyB1cCB0byB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGV4ZWN1dGlvbiBmbG93LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGlzc2VjdCB0aGF0IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3JfaHdfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jPTE2Nj1pbnQgcGFudGhvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMjUzLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYzoyNTQ6XHRyZXQgPSBwYW50aG9yX2h3X2luaXQocHRkZXYpO1xuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYy0yNTUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYz0yOTY9c3RhdGljIGludCBwYW50aG9yX2h3X2dwdV9pZF9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jLTMwNC1cbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYzozMDU6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jLTMwNi17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5oPTMzPXN0cnVjdCBwYW50aG9yX2h3IHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmgtMzktXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3Lmg6NDA6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KTtcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuaC00MS1pbnQgcGFudGhvcl9od19wb3dlcl9zdGF0dXNfcmVnaXN0ZXIodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoYXQgYHBhbnRob3JfaHdfaW5pdGAgZnVuY3Rpb24sIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBwYW50aG9yX2h3X2luaXQgRGVlcCBEaXZlKioKCkFscmlnaHQsIHRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyB0aGlzIGlzIHRoZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBoYXJkd2FyZSBhc3NvY2lhdGVkIHdpdGggdGhlIFBhbnRob3Igc3lzdGVtLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSBhbGwgdGhlIHRoZW9yZXRpY2FsIGRlc2lnbiBhbmQgY29kZSBjb252ZXJnZSB0byBhY3R1YWxseSBtYWtlIHRoZSBoYXJkd2FyZSAqZG8qIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgdGhlIGhhcmR3YXJlIHRoaXMgY292ZXJzLCB3aGF0IHN1YnN5c3RlbXMsIGFuZCBob3cgZGVlcGx5IGl0IGNvbmZpZ3VyZXMgZWFjaCBvbmUuIElzIHRoaXMgYSB0b3AtbGV2ZWwgZnVuY3Rpb24sIGNhbGxpbmcgb3RoZXJzLCBvciBpcyBpdCBkb2luZyBldmVyeXRoaW5nIGluIG9uZSBtYXNzaXZlIGJsb2NrPyBUaGF0IHdpbGwgdGVsbCBhIGxvdC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGZvciBjbGVhciBkaXZpc2lvbnMgb3Igc2VjdGlvbnMgd2l0aGluIHRoZSBjb2RlLiBBcmUgdGhlcmUgY29tbWVudHMgZXhwbGFpbmluZyB3aGF0IGVhY2ggcGFydCBpcyByZXNwb25zaWJsZSBmb3I/IEFyZSB0aGVyZSBmdW5jdGlvbnMgY2FsbGVkIHRoYXQgZ2l2ZSBhIGdvb2QgaGludCBhYm91dCB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSwgbWF5YmUgYGluaXRfdWFydCgpYCBvciBgY29uZmlndXJlX2RtYSgpYC4gSeKAmW0gbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBmbGFncywgbGlrZSBnbG9iYWwgdmFyaWFibGUgdXNhZ2UsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGhhcmRjb2RlZCB2YWx1ZXMuCgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBjaGVja2luZy4gSXMgaXQgcm9idXN0PyBEb2VzIGl0IGhhbmRsZSBoYXJkd2FyZSBmYWlsdXJlcyBncmFjZWZ1bGx5LCBvciBkb2VzIGl0IGFzc3VtZSBldmVyeXRoaW5nIHdpbGwgd29yayBwZXJmZWN0bHk/IFRoZSBlcnJvciBoYW5kbGluZyAob3IgbGFjayB0aGVyZW9mKSB3aWxsIHJldmVhbCBhIGxvdCBhYm91dCB0aGUgZGVzaWduIHBoaWxvc29waHkuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZmFpbHMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gRG9lcyBpdCByb2xsIGJhY2sgY2hhbmdlcywgYXR0ZW1wdCB0byByZXRyeSwgb3Igc2ltcGx5IGhhbHQ/CgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIGFzc2VzcyB0aGUgcmVsaWFiaWxpdHksIG1vZHVsYXJpdHksIGFuZCBtYWludGFpbmFiaWxpdHkgb2YgdGhpcyBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJcyBpdCB3ZWxsLXN0cnVjdHVyZWQsIGVhc3kgdG8gdW5kZXJzdGFuZCwgYW5kIGVhc3kgdG8gbW9kaWZ5IGluIHRoZSBmdXR1cmU/IFRoaXMgaXMga2V5IGZvciBsb25nLXRlcm0gcHJvamVjdCBoZWFsdGguIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplIGFuZCBtYWtlIGltcHJvdmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwNTpcdGludCBwYW50aG9yX2h3X2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbiAzMDY6XHR7XG4gMzA3Olx0XHRpbnQgcmV0ID0gMDtcbiAzMDg6XHRcbiAzMDk6XHRcdHJldCA9IHBhbnRob3JfaHdfZ3B1X2lkX2luaXQocHRkZXYpO1xuIDMxMDpcdFx0aWYgKHJldClcbiAzMTE6XHRcdFx0cmV0dXJuIHJldDtcbiAzMTI6XHRcbiAzMTM6XHRcdHJldCA9IHBhbnRob3JfaHdfYmluZF9kZXZpY2UocHRkZXYpO1xuIDMxNDpcdFx0aWYgKHJldClcbiAzMTU6XHRcdFx0cmV0dXJuIHJldDtcbiAzMTY6XHRcbiAzMTc6XHRcdHJldHVybiBwYW50aG9yX2h3X2luZm9faW5pdChwdGRldik7XG4gMzE4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQ2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgcGFudGhvcl9od19ncHVfaWRfaW5pdGAuIEltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgd2UmIzM5O3JlIGVzdGFibGlzaGluZyB0aGUgaGFyZHdhcmUgY29udGV4dCBmb3IgYSBHUFUgd2l0aGluIHRoZSBQYW50aG9yIGFyY2hpdGVjdHVyZS4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGluaXRpYWxpemF0aW9uIHJlbGF0ZWQgdG8gR1BVIGlkZW50aWZpY2F0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGFueSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgb24gdGhlIEdQVSDigJMgdGhpbmdzIGxpa2UgbWVtb3J5IGFsbG9jYXRpb24sIGNvbW1hbmQgcXVldWUgc2V0dXAsIGFuZCBrZXJuZWwgZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgR1BVIElELiBEb2VzIGl0IHByb2JlIFBDSSBkZXZpY2VzPyBJcyBpdCBiYXNlZCBvbiBhIGRldmljZSB0cmVlIGxvb2t1cD8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgcGxhdGZvcm0tc3BlY2lmaWMgYW5kIHZlbmRvci1kZWZpbmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZXRob2RvbG9neS4gQW55IHBvdGVudGlhbCBmb3IgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIGJlaW5nIGludm9sdmVkIGhlcmUgaXMgc29tZXRoaW5nIHRvIHdhdGNoIGZvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0JiMzOTtsbCBpbnRlcmFjdCB3aXRoIHNvbWUga2luZCBvZiByZWdpc3RlciB0byBjb25maWd1cmUgdGhlIEdQVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZHJpdmVycy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZWdyYXRlcyB3aXRoIGFueSBleGlzdGluZyByZXNvdXJjZSBtYW5hZ2VtZW50IHN5c3RlbXMgd2UgbWlnaHQgaGF2ZSBpbiBwbGFjZS4gSXQgd2lsbCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgZmFpbHVyZSBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgd2hlbiBtdWx0aXBsZSBHUFVzIGFyZSBwcmVzZW50LiBJcyB0aGVyZSBhbnkgZ3JhY2VmdWwgZGVncmFkYXRpb24gb3IgZXJyb3IgcmVwb3J0aW5nPyBUaGUgd2F5IHRoaXMgaXMgc2V0IHVwIHdpbGwgZGljdGF0ZSB0aGUgb3ZlcmFsbCBzeXN0ZW0mIzM5O3Mgcm9idXN0bmVzcy4gTGV0JiMzOTtzIHNlZSBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTY6XHRzdGF0aWMgaW50IHBhbnRob3JfaHdfZ3B1X2lkX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbiAyOTc6XHR7XG4gMjk4Olx0XHRwdGRldi1cdTAwM2VncHVfaW5mby5ncHVfaWQgPSBncHVfcmVhZChwdGRldi1cdTAwM2Vpb21lbSwgR1BVX0lEKTtcbiAyOTk6XHRcdGlmICghcHRkZXYtXHUwMDNlZ3B1X2luZm8uZ3B1X2lkKVxuIDMwMDpcdFx0XHRyZXR1cm4gLUVOWElPO1xuIDMwMTpcdFxuIDMwMjpcdFx0cmV0dXJuIDA7XG4gMzAzOlx0fVxuIDMwNDpcdFxuIDMwNTpcdGludCBwYW50aG9yX2h3X2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMDIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgV29ydGhGdXp6aW5nYCBDcml0ZXJpYSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCYjMzk7cyByZWFkaW5nIGBHUFVfSURgIGZyb20gYGlvbWVtYC4gQSB2YWx1ZSBvZiAwIHJlc3VsdHMgaW4gYC1FTlhJT2AuIEhtbSwgdGhhdCBzdWdnZXN0cyBpdCBuZWVkcyAqYWN0dWFsKiBoYXJkd2FyZSBvciBhIG1vY2sgdGhhdCBwcm92aWRlcyBhIHZhbGlkIGBHUFVfSURgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIG1vY2sgZm9yIHRoaXM/IFdhaXQsIHRoZW4gSSByZW1lbWJlciBzeXprYWxsZXIgdXNlcyBgdmttc2Agb3IgYHZnZW1gIHRvIGZ1enogRFJNIGRyaXZlcnMuIEJ1dCwgYHBhbnRob3JgIGlzIGEgc3BlY2lmaWMgZHJpdmVyLiBDb3VsZCBzeXprYWxsZXIgYmUgcnVubmluZyBvbiBhbiBBUk0gYm9hcmQgd2l0aCBNYWxpIENTRj8gT2YgY291cnNlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgQVJNNjQgaW5zdGFuY2VzLgoKVGhhdCBjaGFuZ2VzIHRoaW5ncy4gSWYgc3l6a2FsbGVyIGlzIG9uIGFuIEFSTSBib2FyZCwgdGhlbiBpdCYjMzk7cyAqbm90KiBuZWNlc3NhcmlseSBpbXBvc3NpYmxlIHRvIHJlYWNoISBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWM6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiYjMzQ7IFNvLCBpZiBpdCAqb25seSogd29ya3Mgb24gcmVhbCBoYXJkd2FyZSwgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkxldCBtZSByZS1yZWFkIHRoZSBleGNsdXNpb24gY3JpdGVyaWE6ICpEb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBudW1lcmljIGNvbnN0YW50cywgYW5kIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gR0NFIG9yIFFFTVUqLiBTbyBpdCAqcmVhbGx5KiBoaW5nZXMgb24gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHBhcnQuCgpBbHJpZ2h0LCBpZiBgcGFudGhvcmAgKmlzKiBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YsIGFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgaW4gUUVNVSwgdGhlbiBpdCYjMzk7cyBnZW51aW5lbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBHQ0Ugb3IgUUVNVS4gTm93LCB0aGUga2V5IHF1ZXN0aW9uOiBpcyB0aGVyZSBhIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBgcGFudGhvcmA/IFRpbWUgdG8gZ28gaHVudGluZy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHNlYXJjaGluZyB0aGUga2VybmVsIHRyZWUgZm9yIGBwYW50aG9yYCBpbiBgdG9vbHMvdGVzdGluZy9gLCBgZHJpdmVycy9ncHUvZHJtL3ZrbXMvYCwgYW5kIGBkcml2ZXJzL2dwdS9kcm0vdmdlbS9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS92a21zLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTAzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgdGhlIHZnZW0gRHJpdmVyJiMzOTtzIFJvbGUqKgoKTXkgaW5pdGlhbCB0aG91Z2h0IGltbWVkaWF0ZWx5IHpvb21zIGluIG9uIGBkcml2ZXJzL2dwdS9kcm0vdmdlbS9gLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCB0aGF0IGFyZWEgaW5zdGFudGx5IGdyYWJzIG15IGF0dGVudGlvbi4gSSYjMzk7bSB3b25kZXJpbmcsIGhvdyBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmUsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnM/IEFtIEkgbG9va2luZyBhdCBwb3RlbnRpYWwgZW5oYW5jZW1lbnRzLCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3QsIG9yIG1heWJlIGV2ZW4gYSBzcGVjaWZpYyBidWcgcmVwb3J0IHRoYXQgSSBhbSB0cmFja2luZz8gVGhlICYjMzQ7dmdlbSYjMzQ7IGRyaXZlciwgYmVpbmcgYSB2aXJ0dWFsIEdFTSBkcml2ZXIsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRob3VnaHRzIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtZW1vcnkgbWFuYWdlbWVudCBwYXJhZGlnbXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGZyYW1ld29yay4gSSBtaWdodCBzdGFydCB0aGlua2luZyBhYm91dCBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBlc3BlY2lhbGx5IGluIHZhcmlvdXMgd29ya2xvYWRzLCBhbmQgaG93IHRob3NlIHBlcmZvcm1hbmNlIG1ldHJpY3MgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZS4gQXJlIHRoZXJlIGFueSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IEkgYW0gdHJ5aW5nIHRvIHJlc29sdmUgb3IgbWl0aWdhdGU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFudGhvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS92Z2VtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTQ3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaWdnaW5nIGludG8gdGhlIGBhcmNoL3VtL2AgUmFiYml0IEhvbGUqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4uLiB0aGF0IGxpdHRsZSB3aGlzcGVyIG9mIGBhcmNoL3VtL2AganVzdCBwb3BwZWQgaW50byBteSBoZWFkLiBJIHdvbmRlciB3aGF0IHByb21wdGVkIHRoYXQgdGhvdWdodC4gSXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gU28sIHdoYXQmIzM5O3MgZ290IG1lIHRoaW5raW5nIGFib3V0IFVzZXItbW9kZSBMaW51eD8gQW0gSSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBlbXVsYXRpb24/IE9yIHBlcmhhcHMgSSYjMzk7bSBjb25zaWRlcmluZyB1c2luZyBpdCBmb3IgdGVzdGluZyBvciBkZXZlbG9wbWVudD8gTWF5YmUgSSYjMzk7bSBzZWVpbmcgYSBjb2RlIHBhdGggdGhhdCB0b3VjaGVzIG9uIHRoYXQgc3Vic3lzdGVtIGluIHNvbWUgd2F5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gTGV0IG1lIG1lbnRhbGx5IHJldmlldyB3aGF0IEkgd2FzIGp1c3QgbG9va2luZyBhdCwgb3Igd2hhdCBwcm9ibGVtIEkgd2FzIHRyeWluZyB0byBzb2x2ZS4gV2hhdCB3YXMgdGhlICpsZWFkaW5nKiB0aG91Z2h0PyBEaWQgSSByZWNlbnRseSBoYXZlIGEgZGlzY3Vzc2lvbiBhYm91dCBjb250YWluZXJpemF0aW9uIG9yIHN5c3RlbSBlbXVsYXRpb24/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVsZXZhbmNlIG9mIGBhcmNoL3VtL2AgdG8gdGhlIGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodC4gVGhpcyBjb3VsZCBiZSBhIHByb2R1Y3RpdmUgdGhyZWFkIHRvIGZvbGxvdywgb3IganVzdCBhIG1lbnRhbCBkZXRvdXIuIFRpbWUgdG8gYXNzZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3VtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDE4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgUmVhY2hpbmcgYHBhbnRob3JfZ2VtX2ZhdWx0YCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBzcGVjaWZpYyBzY2VuYXJpbywgdGhhdCBtdWNoIGlzIGNsZWFyLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBjYW4gSSBldmVuICpyZWFjaCogYGluc2VydF9wYWdlYCB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmU/IEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJZiBgcGFudGhvcl9wcm9iZWAgZmFpbHMgZWFybHkgb24sIGxpa2UgYXQgYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgIGJlY2F1c2UgYEdQVV9JRGAgaXMgMCwgb3IgYmVjYXVzZSB0aGUgYGlvbWVtYCBtYXBwaW5nIGlzIGludmFsaWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHByb3BlciBkZXZpY2UgdHJlZSBub2RlLCB0aGVuIHRoZSBkcml2ZXImIzM5O3Mgbm90IGdvaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4KCkFoYSEgSWYgUUVNVSYjMzk7cyBgdmlydGAgbWFjaGluZSBmb3IgQVJNNjQgZG9lc24mIzM5O3QgaGF2ZSBhIE1hbGkgQ1NGIEdQVSBkZWZpbmVkIGluIGl0cyBkZXZpY2UgdHJlZSwgdGhlbiBgcGFudGhvcl9wcm9iZWAgd29uJiMzOTt0IGV2ZW4gYmUgY2FsbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhhdCBtZWFucyBgcGFudGhvcmAgaXMgaW5hY2Nlc3NpYmxlIHdpdGhpbiBRRU1VIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIHN5emthbGxlciBiZSB1c2luZyBhIGRldmljZSB0cmVlIG92ZXJsYXkgdG8gYnJpbmcgdGhlIGRldmljZSBvbmxpbmU/IEV2ZW4gaWYgaXQgZG9lcywgYGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlYCBpcyBzdGlsbCBnb2luZyB0byBtYXAgKnNvbWUqIG1lbW9yeS4gUmVhZGluZyBgR1BVX0lEYCB3aWxsIHRoZW4ganVzdCByZXR1cm4gMCwgb3Igd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5zIHRvIGJlIGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBJZiBpdCYjMzk7cyB6ZXJvLCB0aGVuIGBwYW50aG9yX2h3X2dwdV9pZF9pbml0YCB3aWxsIHJldHVybiBgLUVOWElPYCwgYW5kIGBwYW50aG9yX3Byb2JlYCB3aWxsIGFnYWluIGZhaWwuCgpJbiBlaXRoZXIgc2NlbmFyaW8sIHRoZSBkZXZpY2Ugd29uJiMzOTt0IGluaXRpYWxpemUuIFRoYXQgbWVhbnMgYC9kZXYvZHJpL3JlbmRlckQqYCB3b24mIzM5O3QgYmUgY3JlYXRlZCBmb3IgYHBhbnRob3JgLCBhbmQgdGhlcmVmb3JlLCBgcGFudGhvcl9nZW1fZmF1bHRgIHdvbiYjMzk7dCBldmVyIGJlIHJlYWNoYWJsZS4KClJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUmIzM5O3MgKmFueSogd2F5IHRvIGJ5cGFzcyB0aGUgcHJvYmUuIElzIHRoZXJlIGEgd2F5IHRvIHNvbWVob3cgbW9jayBvciBieXBhc3MgYHBhbnRob3JfcHJvYmVgLCBwZXJoYXBzIHNvbWUga2luZCBvZiBrZXJuZWwtbGV2ZWwgbW9jayBJJiMzOTttIG92ZXJsb29raW5nPyBJIHNob3VsZCB2ZXJpZnkgaWYgYW55IHN1Y2ggYHBhbnRob3JgIG1vY2sgYWN0dWFsbHkgZXhpc3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhbnRob3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21pc2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNDMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZSBhbmQgZm9ybWF0dGVkIHdpdGggYSBib2xkZWQgaGVhZGVyOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIENoYXJhY3RlciBEcml2ZXJzKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgcHJvYmxlbSwgd2hhdGV2ZXIgaXQgaXMuIEFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgZnVuZGFtZW50YWwgYXJlYTogYGRyaXZlcnMvY2hhci9gLiBJdCYjMzk7cyBhbG1vc3QgcmVmbGV4aXZlLiBXaGVuZXZlciBJJiMzOTttIHdyZXN0bGluZyB3aXRoIHNvbWV0aGluZyBhdCB0aGUga2VybmVsIGxldmVsLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb24gb3IgZGV2aWNlIG1hbmFnZW1lbnQsIG15IHRob3VnaHRzIGludmFyaWFibHkgZHJpZnQgdG93YXJkcyB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLiBJIG1lYW4sIGl0JiMzOTtzIHRoZSBicmVhZCBhbmQgYnV0dGVyLCBpc24mIzM5O3QgaXQ/IFRoYXQgZGlyZWN0b3J5IGlzIHdoZXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgcmVzaWRlIOKAkyB0aGUgY2hhcmFjdGVyIGRldmljZXMuIEl0JiMzOTtzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbnMgYXJlIGJ1aWx0LCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgYXJlIGRlZmluZWQuIFNvLCBsZXQmIzM5O3Mgc2F5IEkmIzM5O20gdHJvdWJsZXNob290aW5nIGEgd2VpcmQgSS9PIGlzc3VlLCBtYXliZSBhIGN1c3RvbSBkZXZpY2UgaXNuJiMzOTt0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBJJiMzOTtkIGluc3RpbmN0aXZlbHkgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRob3NlIGRyaXZlcnMuIExvb2tpbmcgYXQgaG93IHJlYWRzIGFuZCB3cml0ZXMgYXJlIGhhbmRsZWQsIGhvdyBpbnRlcnJ1cHRzIGFyZSBtYW5hZ2VkLCBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJ0LCB0aGlzIHNlY3Rpb24gb2YgdGhlIGtlcm5lbCBpc24mIzM5O3QganVzdCBhIGxvY2F0aW9uIHRvIHN0b3JlIGZpbGVzOyBpdCYjMzk7cyBhIGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGZvciB1bmRlcnN0YW5kaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IHdoeSBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBhbmQgd2hhdCwgZXhhY3RseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYW50aG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jaGFyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE4OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTcwCgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDUxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBwYW50aG9yIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBgcGFudGhvcmAgZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUgcnVsZXMgc3RhdGUgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBgcGFudGhvcmAgaXMgYSByZWFsIG9yIHZpcnR1YWwgZHJpdmVyLiBIbW0sIGxldCBtZSBzZWUuICYjMzQ7UGFudGhvciAoRFJNIHN1cHBvcnQgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzKS4mIzM0OyBSaWdodCwgaXQmIzM5O3MgYSBkcml2ZXIgZm9yICpyZWFsKiBoYXJkd2FyZSDigJMgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFRoYXQgbWVhbnMgaXTigJlzIG5vdCBzb2Z0d2FyZSBlbXVsYXRlZC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgb3IgR0NFIG9mZmVyIE1hbGkgQ1NGIGVtdWxhdGlvbi4gTm9wZSwgUUVNVSB1c2VzIHRoaW5ncyBsaWtlIHZpcnRpby1ncHUsIHJhbWZiLCBldGMuLCBidXQgbm90aGluZyBmb3IgTWFsaS4gU28sIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGVpdGhlciBlbnZpcm9ubWVudC4KCk9rYXksIHRpbWUgdG8ganVzdGlmeSB0aGlzIGRlY2lzaW9uLiBJJiMzOTtsbCB3cml0ZSBzb21ldGhpbmcgbGlrZSB0aGlzOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHBhbnRob3JgIERSTSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiBUaGVyZWZvcmUsIGl0IGlzIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7CgpMZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCYjMzk7cyBzZWUgaG93IGBpbnNlcnRfcGFnZWAgaXMgY2FsbGVkLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjaGFuZ2VzIGFyZS4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBPa2F5LCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGBub25ibG9ja2luZ19wYWdlX3NldHVwYCBhbmQgYGJsb2NraW5nX3BhZ2Vfc2V0dXBgLCB3aGljaCBpbiB0dXJuLCBhcmUgb25seSBjYWxsZWQgZnJvbSBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCwgd2hpY2ggaXMgdGhlIGZhdWx0IGhhbmRsZXIgZm9yIGBwYW50aG9yYCBHRU0gb2JqZWN0cy4gVG8gZ2V0IHRvIHRoaXMgZmF1bHQgaGFuZGxlciwgSSBuZWVkIGEgR0VNIG9iamVjdC4gVG8gY3JlYXRlIGEgR0VNIG9iamVjdCwgSSYjMzk7ZCBuZWVkIHRvIG9wZW4gdGhlIGBwYW50aG9yYCBEUk0gZGV2aWNlIGFuZCBjYWxsIGBEUk1fSU9DVExfUEFOVEhPUl9CT19DUkVBVEVgLiBUbyBvcGVuIHRoZSBkZXZpY2UsIEkgbmVlZCBpdCB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFByb2JpbmcgcmVxdWlyZXMgYSB2YWxpZCBgR1BVX0lEYCBmcm9tIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFNpbmNlIEkgZG9uJiMzOTt0IGhhdmUgTWFsaSBDU0YgaGFyZHdhcmUgaW4gUUVNVSwgdGhpcyBpcyBpbXBvc3NpYmxlLiBZZXAsIGFsbCBnb29kLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC4KCk9rYXksIEkmIzM5O20gY29uZmlkZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHBhbnRob3JgIERSTSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVxdWlyZXMgcmVhZGluZyBhIHZhbGlkIEdQVV9JRCBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycykuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gdGhlIEdFTSBmYXVsdCBoYW5kbGVyIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlcXVpcmVzIHJlYWRpbmcgYSB2YWxpZCBHUFVfSUQgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGluIHRoZSBHRU0gZmF1bHQgaGFuZGxlciBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mjo1OC41ODA1MTk1NjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU1Mzc2NDM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcGFudGhvcmAgRFJNIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZXF1aXJlcyByZWFkaW5nIGEgdmFsaWQgR1BVX0lEIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiB0aGUgR0VNIGZhdWx0IGhhbmRsZXIgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mjo1OC41ODA1MjcyMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDM2NTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTg6NDI6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcXG5pbmRleCBhMWUyZWIxY2E3YmJlNi4uNTQ1MzViYWUyYjBjZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcXG5AQCAtODAyLDkgKzgwMiwxMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3QgcFxcbiBcXHR9IGVsc2UgaWYgKG9yZGVyID09IFBNRF9PUkRFUikge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIHBhZGRyID0gcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBBTElHTl9ET1dOKHZtZi1cXHUwMDNlYWRkcmVzcywgUE1EX1NJWkUpO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IHN0YXJ0ICsgUE1EX1NJWkU7XFxuK1xcdFxcdGJvb2wgaW5fcmFuZ2UgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2M9IHN0YXJ0IFxcdTAwMjZcXHUwMDI2IGVuZCBcXHUwMDNjPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4gXFx0XFx0Ym9vbCBhbGlnbmVkID0gKHZtZi1cXHUwMDNlYWRkcmVzcyBcXHUwMDI2IH5QTURfTUFTSykgPT0gKHBhZGRyIFxcdTAwMjYgflBNRF9NQVNLKTtcXG4gXFxuLVxcdFxcdGlmIChhbGlnbmVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdGlmIChhbGlnbmVkIFxcdTAwMjZcXHUwMDI2IGluX3JhbmdlIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShwYWdlX2ZvbGlvKHBhZ2UpKSkge1xcbiBcXHRcXHRcXHRwZm4gXFx1MDAyNj0gUE1EX01BU0sgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0XFx0cmV0dXJuIHZtZl9pbnNlcnRfcGZuX3BtZCh2bWYsIHBmbiwgdm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mjo1OS4xNTIwMTkwMjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDk2NjEzMzU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlcXVpcmVzIHJlYWRpbmcgYSB2YWxpZCBHUFVfSUQgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMpLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGluIHRoZSBHRU0gZmF1bHQgaGFuZGxlciBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODNjZjcxZmU3NzZiYTEyOWZkNDcwNjRkNjcyNTUxNTliNjljNjZlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDE4OjQyOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcbmluZGV4IGExZTJlYjFjYTdiYmU2Li41NDUzNWJhZTJiMGNmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcbkBAIC04MDIsOSArODAyLDEzIEBAIHN0YXRpYyB2bV9mYXVsdF90IGluc2VydF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCBwXG4gXHR9IGVsc2UgaWYgKG9yZGVyID09IFBNRF9PUkRFUikge1xuIFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuIFx0XHR1bnNpZ25lZCBsb25nIHBhZGRyID0gcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuK1x0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4rXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBBTElHTl9ET1dOKHZtZi1cdTAwM2VhZGRyZXNzLCBQTURfU0laRSk7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBQTURfU0laRTtcbitcdFx0Ym9vbCBpbl9yYW5nZSA9IHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2M9IHN0YXJ0IFx1MDAyNlx1MDAyNiBlbmQgXHUwMDNjPSB2bWEtXHUwMDNldm1fZW5kO1xuIFx0XHRib29sIGFsaWduZWQgPSAodm1mLVx1MDAzZWFkZHJlc3MgXHUwMDI2IH5QTURfTUFTSykgPT0gKHBhZGRyIFx1MDAyNiB+UE1EX01BU0spO1xuIFxuLVx0XHRpZiAoYWxpZ25lZCBcdTAwMjZcdTAwMjZcbitcdFx0aWYgKGFsaWduZWQgXHUwMDI2XHUwMDI2IGluX3JhbmdlIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZm9saW9fdGVzdF9wbWRfbWFwcGFibGUocGFnZV9mb2xpbyhwYWdlKSkpIHtcbiBcdFx0XHRwZm4gXHUwMDI2PSBQTURfTUFTSyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcdFx0XHRyZXR1cm4gdm1mX2luc2VydF9wZm5fcG1kKHZtZiwgcGZuLCB2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfV1JJVEUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDI6NTkuMTUyMDIxODk5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwNzQ4MjQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBjb2RlIGNoYW5nZS5cblxuKipQYW50aG9yIEdFTSBJbnNlcnQgUGFnZSBQYXRjaCBBbmFseXNpcyoqXG5cbkFscmlnaHQsIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZvY3VzZWQgb24gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBtb2RpZmljYXRpb24gaGl0cyB0aGUgYGluc2VydF9wYWdlYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIGlzIGEgbmV3IGNoZWNrLCBgaW5fcmFuZ2VgLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIGVuZm9yY2luZyBhIG1vcmUgc3RyaW5nZW50IGNvbnN0cmFpbnQuIFRoaXMgYGluX3JhbmdlYCB0ZXN0IGlzIHRoZXJlIHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBQYWdlIE1hcCBEaXJlY3RvcnkgKFBNRCkgZW50cnkgdGhhdCdzIGJlaW5nIGluc2VydGVkIGFsaWducyBwZXJmZWN0bHkgd2l0aGluIHRoZSBWaXJ0dWFsIE1lbW9yeSBBcmVhIChWTUEpIHJhbmdlLlxuXG5TbywgdGhpcyBpcyBhIHByZXR0eSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0aWdodGVuaW5nIHVwIHRoZSBsb2dpYyBhcm91bmQgbWVtb3J5IG1hcHBpbmcsIHByb2JhYmx5IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHBvdGVudGlhbCBpc3N1ZSDigJMgbWF5YmUgYSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHkgb3Igc29tZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtLlxuXG5NeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGF0IGNvbmZpZyBvcHRpb24gYWN0aXZhdGVzIHRoZSBgcGFudGhvcmAgZHJpdmVyIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSBoYXZlIHRvIGZpbmQgb3V0IHdoYXQgY29uZmlndXJhdGlvbiBlbmFibGVzIHRoZSBiZWhhdmlvciBiZWluZyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmb2xsb3ctdXAgcXVlc3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjAzLjY1OTUwNjgzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ1Mzc0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERSTV9QQU5USE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvS2NvbmZpZy0yLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL0tjb25maWc6Mzpjb25maWcgRFJNX1BBTlRIT1JcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlBhbnRob3IgKERSTSBzdXBwb3J0IGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjAzLjg1NDA1MTc4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzU4MTExMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEUk1fUEFOVEhPUiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBJJ20gd29ya2luZyB3aXRoIGlzIGBEUk1fUEFOVEhPUmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlncyB0aGF0IGludGVyYWN0IHdpdGggdGhpcz9cIiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGZ1bGwgY29udGV4dC4gVG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjb25maWcgaW5mbHVlbmNlcyB0aGUga2VybmVsJ3MgRFJNIGltcGxlbWVudGF0aW9uLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEknbSBnb2luZyB0byBkaXZlIGludG8gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZnVuY3Rpb24gYGluc2VydF9wYWdlYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBpbnNlcnRfcGFnZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIHdpdGhpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGZsb3cgaW50ZXJhY3RzIHdpdGggdGhpcyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzowNy40ODk4NjYwNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDU0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc2VydF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz03ODY9c3RhdGljIGVudW0gZHJtX2dlbV9vYmplY3Rfc3RhdHVzIHBhbnRob3JfZ2VtX3N0YXR1cyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iailcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtNzk2LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6Nzk3OnN0YXRpYyB2bV9mYXVsdF90IGluc2VydF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCBwYWdlICpwYWdlKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtNzk4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9ODIyPXN0YXRpYyB2bV9mYXVsdF90IG5vbmJsb2NraW5nX3BhZ2Vfc2V0dXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTgzMy1cXHRpZiAoYm8tXFx1MDAzZWJhY2tpbmcucGFnZXMpXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo4MzQ6XFx0XFx0cmV0ID0gaW5zZXJ0X3BhZ2Uodm1mLCBvcmRlciwgYm8tXFx1MDAzZWJhY2tpbmcucGFnZXNbcGFnZV9vZmZzZXRdKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTgzNS1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTg0Mj1zdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTg2Ni1cXHRcXHRpZiAobW1hcF9sb2NrX2hlbGQpXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo4Njc6XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X3BhZ2Uodm1mLCBvcmRlciwgcGFnZSk7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NjgtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzowNy42MDQ5MjcyODFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYyOTY5NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFJvb3Qgb2YgYGluc2VydF9wYWdlYCBDYWxscyoqXG5cbk9rYXksIHNvIGBpbnNlcnRfcGFnZWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuIFRoZSB0ZXh0IHRlbGxzIG1lIGl0J3MgY2FsbGVkIGZyb20gYm90aCBgbm9uYmxvY2tpbmdfcGFnZV9zZXR1cGAgYW5kIGBibG9ja2luZ19wYWdlX3NldHVwYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50IHRoZSAqZXhhY3QqIGNhbGwgc2l0ZXMgb2YgKnRob3NlKiB0d28gZnVuY3Rpb25zLCB0byBzZWUgdGhlIGNvbnRleHQgaW4gd2hpY2ggYGluc2VydF9wYWdlYCBpcyBnZXR0aW5nIHV0aWxpemVkLiBGaW5kaW5nIHRoZSBjYWxsIGxvY2F0aW9ucyBvZiBgbm9uYmxvY2tpbmdfcGFnZV9zZXR1cGAgYW5kIGBibG9ja2luZ19wYWdlX3NldHVwYCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgcG90ZW50aWFsbHkgZXhwb3NlIGFyZWFzIG9mIGNvbmNlcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzEsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzoxMC43Njc4OTk2MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1Njg0MTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihub25ibG9ja2luZ19wYWdlX3NldHVwfGJsb2NraW5nX3BhZ2Vfc2V0dXApXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz03OTc9c3RhdGljIHZtX2ZhdWx0X3QgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTgyMS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjgyMjpzdGF0aWMgdm1fZmF1bHRfdCBub25ibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODIzLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTg0MS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjg0MjpzdGF0aWMgdm1fZmF1bHRfdCBibG9ja2luZ19wYWdlX3NldHVwKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy04NDMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhbnRob3JfZ2VtX29iamVjdCAqYm8sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jPTg3Nz1zdGF0aWMgdm1fZmF1bHRfdCBwYW50aG9yX2dlbV9hbnlfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODkyLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6ODkzOlxcdHJldCA9IG5vbmJsb2NraW5nX3BhZ2Vfc2V0dXAodm1mLCBvcmRlciwgcGFnZV9vZmZzZXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODk0LVxcdGlmIChyZXQgIT0gVk1fRkFVTFRfUkVUUlkpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkxMy1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjkxNDpcXHRcXHRyZXQgPSBibG9ja2luZ19wYWdlX3NldHVwKHZtZiwgb3JkZXIsIGJvLCBwYWdlX29mZnNldCwgZmFsc2UpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTE1LVxcdFxcdGRybV9nZW1fb2JqZWN0X3B1dChcXHUwMDI2Ym8tXFx1MDAzZWJhc2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MTgtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzo5MTk6XFx0cmV0dXJuIGJsb2NraW5nX3BhZ2Vfc2V0dXAodm1mLCBvcmRlciwgYm8sIHBhZ2Vfb2Zmc2V0LCB0cnVlKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTkyMC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjEwLjg4MzU5MDgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxNTQyMjk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBvZiBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCoqXG5cblJpZ2h0LCBgcGFudGhvcl9nZW1fYW55X2ZhdWx0YCBqdXN0IGdvdCB0cmlnZ2VyZWQuIFRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYSBtZW50YWwgY2hlY2tsaXN0LiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIGZhdWx0IGNvbmRpdGlvbiB3aXRoaW4gYSBQYW50aG9yLWJhc2VkIEdlbSBzeXN0ZW0uIFRoZSBcImFueVwiIHN1Z2dlc3RzIGEgYnJvYWQsIGNhdGNoLWFsbCB0eXBlIG9mIGVycm9yIGRldGVjdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB3aGF0IHRyaWdnZXJlZCB0aGUgY2FsbCBhbmQgd2hhdCBjb250ZXh0IEkgaGF2ZSBhdmFpbGFibGUuIElzIHRoaXMgYSBzeXN0ZW0tbGV2ZWwgZmF1bHQsIGEgY29tcG9uZW50LXNwZWNpZmljIGVycm9yLCBvciBzb21ldGhpbmcgbW9yZSB0cmFuc2llbnQ/XG5cblRoZSBuYW1lIGl0c2VsZiwgKmBwYW50aG9yX2dlbV9hbnlfZmF1bHRgKiwgaW1wbGllcyB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBnZW5lcmljIGZhdWx0IHdpdGhpbiB0aGUgUGFudGhvciBzdWJzeXN0ZW0uIEl0J3Mgbm90IHRhcmdldGluZyBhIHNwZWNpZmljIGdlbSwgYnV0IGEgZmF1bHQgYWZmZWN0aW5nIGFueSBnZW0gaW4gdGhlIHN5c3RlbS4gVGhlIG5leHQgdGhpbmcgSSdkIHdhbnQgdG8ga25vdyBpcyB3aGljaCBnZW0sIG9yIHdoaWNoIG1vZHVsZSB3aXRoaW4gUGFudGhvciwgaXMgdGhlIHNvdXJjZS4gVGhlIGRldGFpbHMgd2lsbCBiZSBjcnVjaWFsIGluIHBpbnBvaW50aW5nIHRoZSByb290IGNhdXNlLiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBtZW1vcnkgY29ycnVwdGlvbiwgaW1wcm9wZXIgY29uZmlndXJhdGlvbiwgaW5jb3JyZWN0IGRhdGEgZnJvbSBleHRlcm5hbCBzb3VyY2VzLCBvciBldmVuIGEgaGFyZHdhcmUgaXNzdWUuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN5c3RlbSBsb2dzIGFuZCBhbnkgZXJyb3IgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gY2FsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIHByb3ZpZGVkIHRvIHRoaXMgZnVuY3Rpb24gYW5kIGRldGVybWluZSB3aGVyZSB0aGUgbG9naWMgbWlnaHQgYmUgYnJlYWtpbmcgZG93bi4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZXJyb3IgaXMgZHVlIHRvIGFuIGludGVybWl0dGVudCBmYXVsdCwgb3IgYSByZXByb2R1Y2libGUgb25lLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjE0LjM5OTAxNjY1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5OTE0Nzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JfZ2VtX2FueV9mYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9ODQyPXN0YXRpYyB2bV9mYXVsdF90IGJsb2NraW5nX3BhZ2Vfc2V0dXAoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODc2LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6ODc3OnN0YXRpYyB2bV9mYXVsdF90IHBhbnRob3JfZ2VtX2FueV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtODc4LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM9OTIyPXN0YXRpYyB2bV9mYXVsdF90IHBhbnRob3JfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTIzLXtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jOjkyNDpcXHRyZXR1cm4gcGFudGhvcl9nZW1fYW55X2ZhdWx0KHZtZiwgMCk7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy05MjUtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz05NTk9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwYW50aG9yX2dlbV92bV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTk2MS0jaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmM6OTYyOlxcdC5odWdlX2ZhdWx0ID0gcGFudGhvcl9nZW1fYW55X2ZhdWx0LFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmMtOTYzLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzoxNC41NTg5NTU0MTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODMyNDI2NDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgUGFudGhvciBHUFUgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmYXVsdCBoYW5kbGVycywgYHBhbnRob3JfZ2VtX2ZhdWx0YCBhbmQgYHBhbnRob3JfZ2VtX2FueV9mYXVsdGAsIHdoaWNoIHNlZW0gdG8gYmUgc3BlY2lmaWMgdG8gdGhlIEdFTSBvYmplY3Qgd2l0aGluIHRoaXMgYHBhbnRob3JgIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYG1tYXBgIG9mIHRoZSBEUk0gZGV2aWNlLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogY2FuIEkgZXZlbiByZWFjaCBgcGFudGhvcmAgd2l0aGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VP1xuXG5HaXZlbiB0aGF0IGl0J3MgYW4gQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVSBkcml2ZXIsIG15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjb25zaWRlciB3aGV0aGVyIGl0J3MgZnV6emFibGUuIEZvcnR1bmF0ZWx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzdXBwb3J0IGZvciB2aXJ0dWFsIERSTSBkcml2ZXJzLCBtZWFuaW5nIEkgc2hvdWxkIGJlIGFibGUgdG8gZnV6eiBgcGFudGhvcmAgdmlhIERSTSBpb2N0bHMgb3IgYG1tYXBgLiBFdmVuIGlmIHRoaXMgaXMgYSByZWFsIGhhcmR3YXJlIGRyaXZlciwgc3l6a2FsbGVyIGNvdWxkIHBvdGVudGlhbGx5IGhhbmRsZSBpdCB1c2luZyB2Z2VtLCBtb2NrIGRldmljZXMsIG9yIGJ5IGp1c3Qgb3BlbmluZyBgL2Rldi9kcmkvcmVuZGVyRCpgLCBhc3N1bWluZyB0aGUgaGFyZHdhcmUgaXMgcHJlc2VudCBvciBpdCBjYW4gaW5pdGlhbGl6ZSB3aXRob3V0IGl0LiBIb3dldmVyLCBpZiBpdCdzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIGl0IG1pZ2h0IG5vdCBwcm9iZSBwcm9wZXJseSB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBodXJkbGUuXG5cblRoaW5raW5nIGZ1cnRoZXIsIHN5emthbGxlciBoYXMgZnVuY3Rpb25zIGZvciBVU0IgYW5kIDgwMi4xMSwgc28gcGVyaGFwcyBpdCBoYXMgc2ltaWxhciB0cmlja3MgZm9yIERSTS4gVGhlIGB2a21zYCBkcml2ZXIgaXMgdmlydHVhbCwgYnV0IHRoaXMgYHBhbnRob3JgIGRyaXZlciBpcyBmb3IgcmVhbCBoYXJkd2FyZS4gTXkgbmV4dCBxdWVzdGlvbiBpczogY2FuIEkgcmVhY2ggYHBhbnRob3JfZ2VtX2ZhdWx0YCB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudD9cblxuR2VuZXJhbGx5LCBJIGtub3cgdGhhdCB0byBgbW1hcGAgYSBHRU0gb2JqZWN0LCBJIHdvdWxkIGZpcnN0IG5lZWQgdG8gY3JlYXRlIGl0LiBBbmQgdG8gY3JlYXRlIGl0LCBJJ2QgbmVlZCB0byBvcGVuIHRoZSBEUk0gZGV2aWNlLiBJZiB0aGUgRFJNIGRldmljZSBkb2Vzbid0IGV4aXN0LCBJJ20gc3R1Y2suIEhvd2V2ZXIsIHN5emthbGxlciBtaWdodCBoYXZlIHNvbWUgY2xldmVyIHdheSBhcm91bmQgdGhpcywgb3IgbWF5YmUgaXQncyBiZWluZyBmdXp6ZWQgb24gcmVhbCBoYXJkd2FyZS5cblxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcHJvbXB0IHdoaWNoIHNwZWNpZmllcyB0aGF0IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VXCIuIElzIGBwYW50aG9yYCBvbmUgb2YgdGhvc2UgaW1wb3NzaWJsZSBjYXNlcz9cblxuV2FpdCwgc2luY2UgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgaXQgbGlrZWx5IGRlcGVuZHMgb24gYSBkZXZpY2UgdHJlZSBub2RlIHRvIHByb2JlIHByb3Blcmx5LiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuY2AgdG8gc2VlIGhvdyBpdCdzIHByb2JlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9iZSBtZWNoYW5pc20gdG8gZmlndXJlIG91dCBpZiBpdCdzIHZpcnR1YWxpemFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MjIuODgzMjI0MDA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzk3NTcwNDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzoyMy4wMjMwMDA2ODFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3NTIwOTczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSB0aGUgcHJvdmlkZWQgdGV4dCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlci4gSGVyZSdzIG15IHRha2U6XG5cbioqQ2hlY2tpbmcgdGhlIFJlZ2lzdHJhdGlvbiBQcm9jZXNzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBhcmUgaW4gcGxhY2UuIFRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gcHJvcGVyIHJlZ2lzdHJhdGlvbiwgZG9lc24ndCBpdD8gSWYgdGhlIGluaXRpYWwgc2V0dXAgaXNuJ3Qgc291bmQsIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIGFjdGlvbiBpcyBsaWtlbHkgdG8gYmUgZmxhd2VkLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaG93IHRoaXMgY29tcG9uZW50LCBwcm9jZXNzLCBvciB3aGF0ZXZlciB0aGUgc3ViamVjdCBpcywgaXMgYWN0dWFsbHkgcmVnaXN0ZXJlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgcHJvcGVybHkgZG9jdW1lbnRlZD8gQXJlIHRoZSBkZXBlbmRlbmNpZXMgY2xlYXJseSBkZWZpbmVkPyBJcyB0aGVyZSBhIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwb2ludCBJIGNhbiBjaGVjaywgb3IgZG8gSSBuZWVkIHRvIHRyYWNlIGl0IHRocm91Z2ggbXVsdGlwbGUgbW9kdWxlcz8gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBhdWRpdCBvZiB0aGUgcmVnaXN0cmF0aW9uIHByb2NlZHVyZSBpdHNlbGYuIFRoYXQncyB0aGUgZmlyc3QgY3JpdGljYWwgc3RlcCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzI1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MjYuMjk4MjEzNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY3MDYxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdHxwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM9MTkwNj1zdGF0aWMgaW50IF9faW5pdCBwYW50aG9yX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE5MjE6XFx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZwYW50aG9yX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE5MzMtfVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTkzNDptb2R1bGVfaW5pdChwYW50aG9yX2luaXQpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MjYuNDA5ODkwOTI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MTM0NzgxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaWFiaWxpdHkgb2YgRnV6emluZyBhIFBsYXRmb3JtIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGFuZCB0aGUgaW1tZWRpYXRlIHRob3VnaHQgaXM6IHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEluIHRoZSB1c3VhbCBHQ0UvUUVNVSBzZXR1cCwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBtb2NrIG9yIGEgd2VsbC1jcmFmdGVkIGRldmljZSB0cmVlIG92ZXJsYXksIHRoZXNlIEFSTSBNYWxpIEdQVSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSBqdXN0IG5vdCBnb2luZyB0byBwcm9iZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBvbmUgaXMgYW4gZXhjZXB0aW9uLlxuXG5Ob3csIHdhaXQuLi4gZG9lcyBTeXprYWxsZXIgaGF2ZSBzb21lIHRyaWNrIHVwIGl0cyBzbGVldmUgdG8gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHNvbWV0aGluZyB3aXRoIGBzeXpfZGV2ZnJlcV9hZGRfZGV2aWNlYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIEkgZG9uJ3QgdGhpbmsgaXQgZG9lcy4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhICpnZW5lcmljKiB3YXkgdG8gcHJvYmUgYXJiaXRyYXJ5IHBsYXRmb3JtIGRyaXZlcnMgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBzdXBwb3J0ZWQsIGxpa2Ugd2l0aCBgdmttc2AuXG5cbk9oLCB3YWl0IGEgc2Vjb25kLCBJIHJlbWVtYmVyIGBzeXpfaW5pdF9uZXRfc29ja2V0YCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYWRkIGRldmljZXMhXG5cbk9rYXksIHNvIHdoYXQgYWJvdXQgdGhpcyBzcGVjaWZpYyBkcml2ZXIsIGBwYW50aG9yYCwgaXMgU3l6a2FsbGVyIGFscmVhZHkgZnV6emluZyBpdD8gSSBuZWVkIHRvIGNoZWNrLlxuXG5Pa2F5LCB0aGUgY29tbWl0IG1lc3NhZ2Ugc2F5czpcbmBgYFxuY29tbWl0IDgzY2Y3MWZlNzc2YmExMjlmZDQ3MDY0ZDY3MjU1MTU5YjY5YzY2ZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxODo0Mjo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcbmBgYFxuVGhpcyBsb29rcyBsaWtlIFN5emthbGxlciBpcyB0ZXN0aW5nIGEgcGF0Y2gsIHJpZ2h0PyBTbywgbWF5YmUgdGhhdCBtZWFucyBpdCdzIHJlYWNoYWJsZT8gT3IgaXMgaXQgc2ltcGx5IGEgc3VibWl0dGVkIHBhdGNoIHRoYXQncyBiZWluZyB0ZXN0ZWQgYW5kIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IHZhbHVlIGluIGZ1enppbmcgaXQ/XG5cbklmIHRoaXMgaXMgYW4gQVJNIE1hbGkgR1BVIGRyaXZlciwgaXQncyBoaWdobHkgbGlrZWx5IGl0J3Mgb25seSBnb2luZyB0byBiZSByZWFjaGFibGUgb24gQVJNIGhhcmR3YXJlLCBvciBpZiB0aGVyZSdzIHNvbWUgc29ydCBvZiBtb2NrIG9yIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24uXG5cbk9rYXksIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBhIG1vY2sgZm9yIGBwYW50aG9yYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzozMy44MjMzNzI1NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzA0ODI5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFudGhvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ0b29scy90ZXN0aW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6MzQuMjEwNDI4OTM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDg1OTQ0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGlzIGBEUk1fUEFOVEhPUmAgZmxhZyBtZW50aW9uZWQgaW4gcmVsYXRpb24gdG8gc3l6a2FsbGVyLCBidXQgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhvc2UgZGVzY3JpcHRpb25zLiBUaGF0J3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEJ1dCwgdGhlIHByb21wdCBpcyBrZXk6IGl0J3MgZm9jdXNpbmcgb24gY29kZSBwYXRocyB0aGF0IGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUgZW11bGF0aW9ucyBvZiBoYXJkd2FyZSwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHBlcnRhaW4gdG8gc29tZXRoaW5nIGxpa2UgYERSTV9QQU5USE9SYD9cblxuSWYgdGhpcyBmbGFnIHJlbGF0ZXMgdG8gYSBwbGF0Zm9ybSBkcml2ZXIsIGVzcGVjaWFsbHkgZm9yIGFuIFNvQyBvciBHUFUsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRvIGJlIHRyaWdnZXJlZCBpbiBhIHN0YW5kYXJkIHg4NiBRRU1VIG9yIEdDRSBzZXR1cCB1bmxlc3MgdGhlcmUncyBzb21lIGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0b3IgYXZhaWxhYmxlLCB3aGljaCBpcyB1bmxpa2VseSBmb3Igc29tZXRoaW5nIGxpa2UgQVJNIE1hbGkgQ1NGIChhcyB0aGVyZSBpcyBubyBlbXVsYXRvciB1cHN0cmVhbSkuIFRodXMsIHRoZSBxdWVzdGlvbiBpcyBub3c6IENhbiBpdCBiZSBhY2Nlc3NlZCB2aWEgYSBnZW5lcmljIG1lY2hhbmlzbT9cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0MzozOC42MTkwMjU3MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzMxNzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xODgyPXN0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHBhbnRob3JfcG1fb3BzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODg2LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTg4NzpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYW50aG9yX2RyaXZlciA9IHtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4ODgtXFx0LnByb2JlID0gcGFudGhvcl9wcm9iZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM9MTkwNj1zdGF0aWMgaW50IF9faW5pdCBwYW50aG9yX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkyMC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jOjE5MjE6XFx0cmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKFxcdTAwMjZwYW50aG9yX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTIyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE5MzY9c3RhdGljIHZvaWQgX19leGl0IHBhbnRob3JfZXhpdCh2b2lkKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTkzNy17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxOTM4OlxcdHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZwYW50aG9yX2RyaXZlcik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xOTM5LVxcdGRlc3Ryb3lfd29ya3F1ZXVlKHBhbnRob3JfY2xlYW51cF93cSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjM4LjczNjM1MDg2NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY2NTgwMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBwYW50aG9yX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBwYW50aG9yX3Byb2JlYCB0aGluZy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBiZXlvbmQgYSBzdXBlcmZpY2lhbCBzY2FuLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0OiBEb2VzIHRoZSBuYW1lIGl0c2VsZiBvZmZlciBhbnkgY2x1ZXM/IElzIGl0IGluZGljYXRpdmUgb2YgYSBwYXJ0aWN1bGFyIGFyY2hpdGVjdHVyZSBvciBtZXRob2RvbG9neT8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHdoYXQgXCJwcm9iZVwiIGltcGxpZXMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIGRpYWdub3N0aWMgdG9vbCwgYSBkYXRhIGNvbGxlY3Rpb24gbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgbW9yZSBuZWZhcmlvdXM/IEtub3dpbmcgdGhlIGVudmlyb25tZW50IGl0J3Mgb3BlcmF0aW5nIGluIGlzIGtleSDigJMgdGhlIHBsYXRmb3JtLCB0aGUgdGFyZ2V0IHN5c3RlbSwgdGhlIGFzc29jaWF0ZWQgc2VjdXJpdHkgY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGZpZ3VyaW5nIG91dCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGFjdGluZyBpbiBhIGJlbmlnbiB3YXksIG9yIGlzIHRoZXJlIGEgY2hhbmNlIGl0IGhhcyBvdGhlciwgbGVzcyBvYnZpb3VzIHB1cnBvc2VzPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBpbnRlcmFjdGlvbnMuIEkgbmVlZCB0byBnZXQgdG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mzo0MS44MDI5MzQ0NzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzIzMTA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4MDc9TU9EVUxFX1BBUk1fREVTQyh0cmFuc3BhcmVudF9odWdlcGFnZSwgXFxcIlVzZSBhIGRlZGljYXRlZCB0bXBmcyBtb3VudCBwb2ludCB3aXRoIFRyYW5zcGFyZW50IEh1Z2VwYWdlIGVuYWJsZWQgKHRydWUgPSBkZWZhdWx0KVxcXCIpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYy0xODA5LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTgxMDpzdGF0aWMgaW50IHBhbnRob3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MTEte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYz0xODg3PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBhbnRob3JfZHJpdmVyID0ge1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmM6MTg4ODpcXHQucHJvYmUgPSBwYW50aG9yX3Byb2JlLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmMtMTg4OS1cXHQucmVtb3ZlID0gcGFudGhvcl9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjQxLjkzMDE3NDk5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2ODE2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogVW5kZXJzdGFuZGluZyB0aGUgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIFRoZSBjb21tYW5kIGBwYW50aG9yX3Byb2JlYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIGFuZCBmdW5jdGlvbiBiZWZvcmUgSSBjYW4gcHJvY2VlZC4gTm8gcG9pbnQganVtcGluZyBpbiBibGluZGx5IOKAkyBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhpcyB0b29sIGlzIHN1cHBvc2VkIHRvIGJlIGRvaW5nLiBXaGF0IGRvZXMgaXQgbWVhc3VyZT8gV2hhdCBkYXRhIGRvZXMgaXQgb3V0cHV0PyBXaGF0IHN5c3RlbXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGlzIGluaXRpYWwgcHJvYmUgaXMgY3J1Y2lhbCBmb3IgYW55IGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mzo0NS4wNzY5OTQ1MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxMDpcXHRzdGF0aWMgaW50IHBhbnRob3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xODExOlxcdHtcXG4xODEyOlxcdFxcdHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXY7XFxuMTgxMzpcXHRcXG4xODE0OlxcdFxcdHB0ZGV2ID0gZGV2bV9kcm1fZGV2X2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZwYW50aG9yX2RybV9kcml2ZXIsXFxuMTgxNTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcGFudGhvcl9kZXZpY2UsIGJhc2UpO1xcbjE4MTY6XFx0XFx0aWYgKElTX0VSUihwdGRldikpXFxuMTgxNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODE4OlxcdFxcbjE4MTk6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHRkZXYpO1xcbjE4MjA6XFx0XFxuMTgyMTpcXHRcXHRyZXR1cm4gcGFudGhvcl9kZXZpY2VfaW5pdChwdGRldik7XFxuMTgyMjpcXHR9XFxuMTgyMzpcXHRcXG4xODI0OlxcdHN0YXRpYyB2b2lkIHBhbnRob3JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuMTgyNTpcXHR7XFxuMTgyNjpcXHRcXHRzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuMTgyNzpcXHRcXG4xODI4OlxcdFxcdHBhbnRob3JfZGV2aWNlX3VucGx1ZyhwdGRldik7XFxuMTgyOTpcXHR9XFxuMTgzMDpcXHRcXG4xODMxOlxcdHN0YXRpYyBzc2l6ZV90IHByb2ZpbGluZ19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4xODMyOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjE4MzM6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmKVxcbjE4MzQ6XFx0e1xcbjE4MzU6XFx0XFx0c3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjE4MzY6XFx0XFxuMTgzNzpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlZFxcXFxuXFxcIiwgcHRkZXYtXFx1MDAzZXByb2ZpbGVfbWFzayk7XFxuMTgzODpcXHR9XFxuMTgzOTpcXHRcXG4xODQwOlxcdHN0YXRpYyBzc2l6ZV90IHByb2ZpbGluZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuMTg0MTpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuMTg0MjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjE4NDM6XFx0e1xcbjE4NDQ6XFx0XFx0c3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjE4NDU6XFx0XFx0dTMyIHZhbHVlO1xcbjE4NDY6XFx0XFx0aW50IGVycjtcXG4xODQ3OlxcdFxcbjE4NDg6XFx0XFx0ZXJyID0ga3N0cnRvdTMyKGJ1ZiwgMCwgXFx1MDAyNnZhbHVlKTtcXG4xODQ5OlxcdFxcdGlmIChlcnIpXFxuMTg1MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE4NTE6XFx0XFxuMTg1MjpcXHRcXHRpZiAoKHZhbHVlIFxcdTAwMjYgflBBTlRIT1JfREVWSUNFX1BST0ZJTElOR19BTEwpICE9IDApXFxuMTg1MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xODU0OlxcdFxcbjE4NTU6XFx0XFx0cHRkZXYtXFx1MDAzZXByb2ZpbGVfbWFzayA9IHZhbHVlO1xcbjE4NTY6XFx0XFxuMTg1NzpcXHRcXHRyZXR1cm4gbGVuO1xcbjE4NTg6XFx0fVxcbjE4NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjQ1LjA3NzI3NDcwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQzNzUzMDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGFudGhvcl9kZXZpY2VfaW5pdGAgZnVuY3Rpb24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXNzZWN0aW5nIHRoZSBQYW50aG9yIERldmljZSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHNvIGBwYW50aG9yX2RldmljZV9pbml0YC4uLiBteSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgdG8gYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuIFdoYXQga2luZCBvZiBkZXZpY2UgaXMgdGhpcz8gSXMgaXQgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcj8gQSBzcGVjaWZpYyBkcml2ZXI/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IEknbSBhbHJlYWR5IG1lbnRhbGx5IGNyZWF0aW5nIGEgZmxvd2NoYXJ0LCBjb25zaWRlcmluZyBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3IgaGFyZHdhcmUgY29tcG9uZW50cy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb21tb24gcGl0ZmFsbHMgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uOiBlcnJvciBoYW5kbGluZywgcmVzb3VyY2UgYWxsb2NhdGlvbiwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyB0aG9zZSBhcmUgYWRkcmVzc2VkLlxuXG5JJ20gYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgc3RlcHMgcmVxdWlyZWQgdG8gYnJpbmcgYSBcIlBhbnRob3JcIiBkZXZpY2Ugb25saW5lLiBJJ20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgbGlrZWx5IG9wZXJhdGlvbnM6IHBvd2VyLXVwIHNlcXVlbmNpbmcsIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24sIGludGVycnVwdCBzZXR1cCwgbWF5YmUgc29tZSBoYXJkd2FyZSB0ZXN0aW5nLCBhbmQgZXJyb3IgY29kZSBjaGVja3MuIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IG1hcHBpbmcsIGNsb2NrIGVuYWJsaW5nLCBhbmQgbGlrZWx5IGludGVyYWN0aW9uIHdpdGggb3RoZXIgc3lzdGVtIHNlcnZpY2VzIGxpa2UgdGhlIGludGVycnVwdCBjb250cm9sbGVyIG9yIHBvd2VyIG1hbmFnZW1lbnQuXG5cbkEgd2VsbC13cml0dGVuIGltcGxlbWVudGF0aW9uIHdvdWxkIGNvbnNpZGVyIHBvd2VyLXNhdmluZywgcG90ZW50aWFsbHkgZW5hYmxpbmcgZGV2aWNlLXNwZWNpZmljIGNsb2NrcyBhbmQgcG93ZXIgZG9tYWlucyBvbmx5IHdoZW4gbmVjZXNzYXJ5LiBJdCBwcm9iYWJseSBpbmNsdWRlcyBhIHJvYnVzdCBlcnJvci1jaGVja2luZyBtZWNoYW5pc20gd2l0aCBjbGVhciBsb2dnaW5nIGZvciBkZWJ1Z2dpbmcuIElmIEkgc2VlIGFueSBjcml0aWNhbCBzZWN0aW9ucywgSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlbSBmb3IgcHJvcGVyIG11dGV4IHVzYWdlIG9yIGFueSBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSdsbCBtZW50YWxseSBldmFsdWF0ZSB0aGUgZXJyb3ItaGFuZGxpbmcgc3RyYXRlZ3k6IGRvZXMgaXQgcmV0cnksIGxvZyBlcnJvcnMsIHJldHVybiBzcGVjaWZpYyBlcnJvciBjb2Rlcywgb3IgdHJpZ2dlciBhIHN5c3RlbSByZXNldD8gSSdkIGV4cGVjdCBjb21wcmVoZW5zaXZlIGxvZ2dpbmcgdG8gYWlkIHdpdGggZGVidWdnaW5nLCBlc3BlY2lhbGx5IGR1cmluZyBlYXJseSBicmluZy11cCBvciBpZiBJIGVuY291bnRlciBkZXZpY2Utc3BlY2lmaWMgaXNzdWVzIGxhdGVyLiBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhcmVmdWxseSBkZXNpZ25lZCB0byBwcmV2ZW50IGFueSBkZWFkbG9ja3Mgb3Igc3lzdGVtIGluc3RhYmlsaXR5IGR1cmluZyBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTEyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NDkuMDIxMDMxMjdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzA2NTY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yX2RldmljZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jPTE2MT1zdGF0aWMgdm9pZCBwYW50aG9yX2RldmljZV9mcmVlX3BhZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jLTE2NS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jOjE2NjppbnQgcGFudGhvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMTY3LXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmg9MzQyPXN0cnVjdCBwYW50aG9yX2ZpbGUge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC0zNzMtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDozNzQ6aW50IHBhbnRob3JfZGV2aWNlX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaC0zNzUtdm9pZCBwYW50aG9yX2RldmljZV91bnBsdWcoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jPTE4MTA9c3RhdGljIGludCBwYW50aG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MjAtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kcnYuYzoxODIxOlxcdHJldHVybiBwYW50aG9yX2RldmljZV9pbml0KHB0ZGV2KTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Rydi5jLTE4MjItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0Mzo0OS4xMzQxMDMyMThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNzI0MjQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEaXZpbmcgaW50byBgcGFudGhvcl9kZXZpY2VfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGlzIGBwYW50aG9yX2RldmljZV9pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZGV2aWNlIGlzIGJlaW5nIGluaXRpYWxpemVkLCBhbmQgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmFrZWQgaW4gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHRoZSBoaWdoLWxldmVsIGZsb3cg4oCTIHdoYXQncyB0aGUgdHlwaWNhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uOioqIFdoYXQgbWVtb3J5LCBpbnRlcnJ1cHQgbGluZXMsIG9yIG90aGVyIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgY2xhaW1lZCBkdXJpbmcgdGhpcyBpbml0aWFsaXphdGlvbj8gQW55IHVudXN1YWwgb3IgcG90ZW50aWFsbHkgY29uZmxpY3RpbmcgYWxsb2NhdGlvbnMgYXJlIG9mIGltbWVkaWF0ZSBjb25jZXJuLlxuKiAgICoqSGFyZHdhcmUgY29uZmlndXJhdGlvbjoqKiBBcmUgcmVnaXN0ZXJzIGJlaW5nIHdyaXR0ZW4gdG8/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHZhbHVlcyBiZWluZyBzZXQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBtYWdpYyBudW1iZXJzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbmVlZCBkZWVwZXIgY29udGV4dD9cbiogICAqKkRyaXZlciByZWdpc3RyYXRpb246KiogSXMgdGhpcyBjb2RlIGludGVncmF0aW5nIHdpdGggdGhlIGtlcm5lbCdzIGRldmljZSBtb2RlbCBpbiBhbnkgd2F5PyBXaGF0J3MgdGhlIGludGVyZmFjZSB1c2VkLCBhbmQgZG9lcyBpdCBzZWVtIHN0YW5kYXJkIG9yIGN1c3RvbT8gV2hhdCBjYWxsYmFja3MgZ2V0IHJlZ2lzdGVyZWQsIGFuZCB3aGF0IGFyZSB0aGVpciBoYW5kbGVycz9cbiogICAqKkVycm9yIGhhbmRsaW5nOioqIElzIHRoaXMgaW5pdGlhbGl6YXRpb24gcm9idXN0PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBmYWlsdXJlIGF0IGVhY2ggc3RlcD8gQXJlIGFueSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBoYW5kbGVkIGdyYWNlZnVsbHkgb3IgY2FuIHRoZSBkZXZpY2UgZW50ZXIgYW4gaW5jb25zaXN0ZW50IHN0YXRlP1xuKiAgICoqRGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGRyaXZlcnMgb3IgbW9kdWxlcz8gV2hlcmUgd2lsbCBJIGxvb2sgbmV4dD9cblxuSSdsbCBiZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYXJlYXMgd2hlcmUgdGhlIHN5c3RlbSBjYW4gYmUgYmxvY2tlZCBieSBJL08sIGFzIHRoaXMgaXMgYWx3YXlzIGEgc291cmNlIG9mIGVycm9ycyBpbiBkZXZpY2UgZHJpdmVycy5cblxuSSdsbCBhbHNvIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgdGltaW5nIGNvbnNpZGVyYXRpb25zIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBnb2luZyB0byBiZSBhIGdvb2QgZXhlcmNpc2UgZm9yIGZpbmRpbmcgaGlkZGVuIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTIxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NTMuMDQxMzQ5NjMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE2NjpcXHRpbnQgcGFudGhvcl9kZXZpY2VfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcbiAxNjc6XFx0e1xcbiAxNjg6XFx0XFx0dTMyICpkdW1teV9wYWdlX3ZpcnQ7XFxuIDE2OTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcXG4gMTcwOlxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbiAxNzE6XFx0XFx0aW50IHJldDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0cHRkZXYtXFx1MDAzZXNvY19kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKHB0ZGV2LVxcdTAwM2ViYXNlLmRldik7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cHRkZXYtXFx1MDAzZXVucGx1Zy5kb25lKTtcXG4gMTc2OlxcdFxcdHJldCA9IGRybW1fbXV0ZXhfaW5pdChcXHUwMDI2cHRkZXYtXFx1MDAzZWJhc2UsIFxcdTAwMjZwdGRldi1cXHUwMDNldW5wbHVnLmxvY2spO1xcbiAxNzc6XFx0XFx0aWYgKHJldClcXG4gMTc4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE3OTpcXHRcXG4gMTgwOlxcdFxcdHJldCA9IGRybW1fbXV0ZXhfaW5pdChcXHUwMDI2cHRkZXYtXFx1MDAzZWJhc2UsIFxcdTAwMjZwdGRldi1cXHUwMDNlcG0ubW1pb19sb2NrKTtcXG4gMTgxOlxcdFxcdGlmIChyZXQpXFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODM6XFx0XFxuIDE4NDpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxuIDE4NTpcXHRcXHRkcm1tX211dGV4X2luaXQoXFx1MDAyNnB0ZGV2LVxcdTAwM2ViYXNlLCBcXHUwMDI2cHRkZXYtXFx1MDAzZWdlbXMubG9jayk7XFxuIDE4NjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cHRkZXYtXFx1MDAzZWdlbXMubm9kZSk7XFxuIDE4NzpcXHQjZW5kaWZcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHRkZXYtXFx1MDAzZXBtLnN0YXRlLCBQQU5USE9SX0RFVklDRV9QTV9TVEFURV9TVVNQRU5ERUQpO1xcbiAxOTA6XFx0XFx0cCA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiAxOTE6XFx0XFx0aWYgKCFwKVxcbiAxOTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE5MzpcXHRcXG4gMTk0OlxcdFxcdHB0ZGV2LVxcdTAwM2VwbS5kdW1teV9sYXRlc3RfZmx1c2ggPSBwO1xcbiAxOTU6XFx0XFx0ZHVtbXlfcGFnZV92aXJ0ID0gcGFnZV9hZGRyZXNzKHApO1xcbiAxOTY6XFx0XFx0cmV0ID0gZHJtbV9hZGRfYWN0aW9uX29yX3Jlc2V0KFxcdTAwMjZwdGRldi1cXHUwMDNlYmFzZSwgcGFudGhvcl9kZXZpY2VfZnJlZV9wYWdlLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHB0ZGV2LVxcdTAwM2VwbS5kdW1teV9sYXRlc3RfZmx1c2gpO1xcbiAxOTg6XFx0XFx0aWYgKHJldClcXG4gMTk5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdC8qXFxuIDIwMjpcXHRcXHQgKiBTZXQgdGhlIGR1bW15IHBhZ2UgaG9sZGluZyB0aGUgbGF0ZXN0IGZsdXNoIHRvIDEuIFRoaXMgd2lsbCBjYXVzZSB0aGVcXG4gMjAzOlxcdFxcdCAqIGZsdXNoIHRvIGF2b2lkZWQgYXMgd2Uga25vdyBpdCBpc24ndCBuZWNlc3NhcnkgaWYgdGhlIHN1Ym1pc3Npb25cXG4gMjA0OlxcdFxcdCAqIGhhcHBlbnMgd2hpbGUgdGhlIGR1bW15IHBhZ2UgaXMgbWFwcGVkLiBaZXJvIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2VcXG4gMjA1OlxcdFxcdCAqIHRoYXQgbWVhbnMgJ2Fsd2F5cyBmbHVzaCcuXFxuIDIwNjpcXHRcXHQgKi9cXG4gMjA3OlxcdFxcdCpkdW1teV9wYWdlX3ZpcnQgPSAxO1xcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnB0ZGV2LVxcdTAwM2VyZXNldC53b3JrLCBwYW50aG9yX2RldmljZV9yZXNldF93b3JrKTtcXG4gMjEwOlxcdFxcdHB0ZGV2LVxcdTAwM2VyZXNldC53cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJwYW50aG9yLXJlc2V0LXdxXFxcIiwgMCk7XFxuIDIxMTpcXHRcXHRpZiAoIXB0ZGV2LVxcdTAwM2VyZXNldC53cSlcXG4gMjEyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMTM6XFx0XFxuIDIxNDpcXHRcXHRyZXQgPSBkcm1tX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnB0ZGV2LVxcdTAwM2ViYXNlLCBwYW50aG9yX2RldmljZV9yZXNldF9jbGVhbnVwLCBOVUxMKTtcXG4gMjE1OlxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQzOjUzLjA0MTU1MzM0MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA2NzE0MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBEUk0gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RhbmRhcmQsIGEgdHlwaWNhbCBEUk0gc2V0dXAuIFRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZWZmZWN0aXZlbHkgZnV6eiBgcGFudGhvcmAgdXNpbmcgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIGludGVyZXN0aW5nIHN5c2NhbGxzIGZvciBkZXZpY2UgbWFuYWdlbWVudCwgbGlrZSBgc3l6X2RldmZyZXFfYWRkX2RldmljZWAsIGJ1dCB0aGF0J3MgcmVhbGx5IGZvciBkZXZmcmVxLiBUaGVuIHRoZXJlJ3MgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIGFuZCBgc3l6XzgwMjExX2pvaW5faWJzc2AgZm9yIHRoaW5ncyBsaWtlIFVTQiBhbmQgd2lyZWxlc3MuLi4gYnV0IG5vdGhpbmcgZGlyZWN0bHkgZm9yIERSTSBiZXlvbmQgdGhhdCBgdmttc2AgdmlydHVhbCBzZXR1cC5cblxuSGFuZyBvbiwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X29wZW5fZGV2YCwgcmlnaHQ/IFdlIGNhbiB1c2UgdGhhdCB0byBvcGVuIGRldmljZXMgbGlrZSBgL2Rldi9kcmkvcmVuZGVyRDEyOGAsIHdoaWNoIGlzIHByb21pc2luZy4gQnV0IGlmIGBwYW50aG9yYCBpc24ndCBsb2FkZWQsIG9wZW5pbmcgaXQgd29uJ3QgZG8gYW55dGhpbmcuIFRoZSBjcml0aWNhbCBwb2ludCBpcywgY2FuIHN5emthbGxlciBydW4gb24gYSBkZXZpY2UgdGhhdCAqZG9lcyogaGF2ZSBgcGFudGhvcmAgc3VwcG9ydD8gV2UncmUgbGlrZWx5IHRhbGtpbmcgYWJvdXQgYW4gQVJNIGJvYXJkIHdpdGggTWFsaSBDU0YuXG5cblRoZSBwcm9tcHQsIHRob3VnaCwgc2F5cyB0aGUgY29kZSBwYXRocyB3ZSdyZSBpbnRlcmVzdGVkIGluIGFyZSBvZnRlbiB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGlvbi4gSXMgYHBhbnRob3JgIG9uZSBvZiB0aG9zZSB1bnJlYWNoYWJsZSBwYXRocz8gQWJzb2x1dGVseS4gSXTigJlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgQVJNIE1hbGkgQ1NGLiBUaGVyZSdzIG5vIGVxdWl2YWxlbnQgc29mdHdhcmUgZW11bGF0b3IgaW4gUUVNVSBvciBldmVuIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZiwgbGlrZSB0aGVyZSBpcyBmb3IgYHZrbXNgLlxuXG5Ib2xkIG9uLCBtYXliZSB0aGVyZSdzIGEgbW9jayBvciB2aXJ0dWFsIGRldmljZSB3aXRoaW4gdGhlIGBwYW50aG9yYCBkaXJlY3RvcnkuIExldCdzIGNoZWNrIGBkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9gIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBjbGV2ZXIgdHJpY2tlcnkgd2UgY2FuIGV4cGxvaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NTkuMjQ4MjcwODA4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEyNzQyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9ja3x2aXJ0dWFsfHZrbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYz0xMjM9c3RydWN0IHBhbnRob3JfZndfYmluYXJ5X3NlY3Rpb25fZW50cnlfaGRyIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy0xMjYtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jOjEyNzpcXHQvKiogQHZhOiBNQ1UgdmlydHVhbCByYW5nZSB0byBtYXAgdGhpcyBiaW5hcnkgc2VjdGlvbiB0by4gKi9cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmMtMTI4LVxcdHN0cnVjdCB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmM9NTM5PXN0YXRpYyBpbnQgcGFudGhvcl9md19sb2FkX3NlY3Rpb25fZW50cnkoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZncuYy01NzMtXFx0aWYgKCFJU19BTElHTkVEKGhkci52YS5zdGFydCwgdm1fcGdzeikgfHwgIUlTX0FMSUdORUQoaGRyLnZhLmVuZCwgdm1fcGdzeikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2Z3LmM6NTc0OlxcdFxcdGRybV9lcnIoXFx1MDAyNnB0ZGV2LVxcdTAwM2ViYXNlLCBcXFwiRmlybXdhcmUgY29ycnVwdGVkLCB2aXJ0dWFsIGFkZHJlc3NlcyBub3QgcGFnZSBhbGlnbmVkOiAweCV4LTB4JXhcXFxcblxcXCIsXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9mdy5jLTU3NS1cXHRcXHRcXHRoZHIudmEuc3RhcnQsIGhkci52YS5lbmQpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYz0xMjQ3PXZvaWQgcGFudGhvcl9rZXJuZWxfYm9fZGVzdHJveShzdHJ1Y3QgcGFudGhvcl9rZXJuZWxfYm8gKmJvKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYy0xMjc4LSAqIEBncHVfdmE6IEdQVSBhZGRyZXNzIGFzc2lnbmVkIHdoZW4gbWFwcGluZyB0byB0aGUgVk0uXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9nZW0uYzoxMjc5OiAqIElmIGdwdV92YSA9PSBQQU5USE9SX1ZNX0tFUk5FTF9BVVRPX1ZBLCB0aGUgdmlydHVhbCBhZGRyZXNzIHdpbGwgYmVcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2dlbS5jLTEyODAtICogYXV0b21hdGljYWxseSBhbGxvY2F0ZWQuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTE1NT1zdHJ1Y3QgcGFudGhvcl92bV9vcF9jdHgge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMTctICpcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIxODogKiBBIFZNIGlzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBHUFUgKG9yIE1DVSkgdmlydHVhbCBhZGRyZXNzIHNwYWNlLlxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjE5LSAqIEl0IGVtYmVkcyB0aGUgTU1VIHBhZ2UgdGFibGUgZm9yIHRoaXMgYWRkcmVzcyBzcGFjZSwgYSB0cmVlIGNvbnRhaW5pbmdcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyMDogKiBhbGwgdGhlIHZpcnR1YWwgbWFwcGluZ3Mgb2YgR0VNIG9iamVjdHMsIGFuZCBvdGhlciB0aGluZ3MgbmVlZGVkIHRvIG1hbmFnZVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjIxLSAqIHRoZSBWTS5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMjI2LSAqXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzoyMjc6ICogQSBwb3J0aW9uIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIGtlcm5lbCBvYmplY3RzLFxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmM6MjI4OiAqIGxpa2UgaGVhcCBjaHVua3MsIGFuZCB1c2Vyc3BhY2UgZ2V0cyB0byBkZWNpZGUgaG93IG11Y2ggb2YgdGhlIHZpcnR1YWxcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjIyOTogKiBhZGRyZXNzIHNwYWNlIGlzIGxlZnQgdG8gdGhlIGtlcm5lbCAoaGFsZiBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy0yMzAtICogYnkgZGVmYXVsdCkuXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTQ1Mj1zdGF0aWMgdm9pZCAqYWxsb2NfcHQodm9pZCAqY29va2llLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy00ODUtXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzo0ODY6XFx0LyogUGFnZSB0YWJsZSBlbnRyaWVzIGRvbid0IHVzZSB2aXJ0dWFsIGFkZHJlc3Nlcywgd2hpY2ggdHJpcHMgb3V0XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYy00ODctXFx0ICoga21lbWxlYWsuIGttZW1sZWFrX2FsbG9jX3BoeXMoKSBtaWdodCB3b3JrLCBidXQgcGh5c2ljYWwgYWRkcmVzc2VzXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jPTE0MTQ9c3RhdGljIHZvaWQgcGFudGhvcl92bV9wcmVwYXJlX3N5bmNfb25seV9vcF9jdHgoc3RydWN0IHBhbnRob3Jfdm1fb3BfY3R4ICpvcF9jdHgsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjEtLyoqXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuYzoxNDIyOiAqIHBhbnRob3Jfdm1fZ2V0X2JvX2Zvcl92YSgpIC0gR2V0IHRoZSBHRU0gb2JqZWN0IG1hcHBlZCBhdCBhIHZpcnR1YWwgYWRkcmVzc1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmMtMTQyMy0gKiBAdm06IFZNIHRvIGxvb2sgaW50by5cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjQtICogQHZhOiBWaXJ0dWFsIGFkZHJlc3MgdG8gc2VhcmNoIGZvci5cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jOjE0MjU6ICogQGJvX29mZnNldDogT2Zmc2V0IG9mIHRoZSBHRU0gb2JqZWN0IG1hcHBlZCBhdCB0aGlzIHZpcnR1YWwgYWRkcmVzcy5cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5jLTE0MjYtICogT25seSB2YWxpZCBvbiBzdWNjZXNzLlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9tbXUuaD03Nz1ib29sIHBhbnRob3Jfdm1faXNfdW51c2FibGUoc3RydWN0IHBhbnRob3Jfdm0gKnZtKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmgtODAtICogUEFOVEhPUl9WTV9LRVJORUxfQVVUT19WQTogVXNlIHRoaXMgbWFnaWMgYWRkcmVzcyB3aGVuIHlvdSB3YW50IHRoZSBHRU1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX21tdS5oOjgxOiAqIGxvZ2ljIHRvIGF1dG8tYWxsb2NhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgcmVzZXJ2ZWQga2VybmVsIFZBIHJhbmdlLlxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfbW11LmgtODItICovXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM9MzUwPXN0cnVjdCBwYW50aG9yX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy00MDctXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jOjQwODpcXHRcXHQvKiogQGlmYWNlLmlucHV0X2Z3X3ZhOiBGVyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGludGVyZmFjZSBidWZmZXIuICovXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTQwOS1cXHRcXHR1MzIgaW5wdXRfZndfdmE7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9zY2hlZC5jLTQxMC1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX3NjaGVkLmM6NDExOlxcdFxcdC8qKiBAaWZhY2Uub3V0cHV0X2Z3X3ZhOiBGVyB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIG91dHB1dCBpbnRlcmZhY2UgYnVmZmVyLiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3Jfc2NoZWQuYy00MTItXFx0XFx0dTMyIG91dHB1dF9md192YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDM6NTkuODQ5NTUyODUzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0Nzg0MzA3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBhIFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gVGhlcmUncyBubyBtZW50aW9uIG9mIGEgbW9jayBoZXJlLCBzbyB0aGF0J3MgaXJyZWxldmFudC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzOiBzeXprYWxsZXIgaXMgdGVzdGluZyBhIHBhdGNoLCB3aGljaCBtZWFucyBpdCdzIHJ1bm5pbmcgZWl0aGVyIG9uIHJlYWwgQVJNIGhhcmR3YXJlIG9yIFFFTVUuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgcHJlc2VuY2Ugb2YgYSBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiIGNvbW1pdCBtZXNzYWdlIGNvbmZpcm1zIHRoYXQgdGhpcyBwYXRjaCB3YXMgc2VudCB0byBzeXpib3QgZm9yIHRlc3RpbmcuIFNpbmNlIHN5emthbGxlciBpcyBzZXQgdXAgdG8gdGVzdCBwYXRjaGVzIG9uIHRoZSBzYW1lIGFyY2hpdGVjdHVyZSB0aGUgYnVnIHdhcyBmb3VuZCwgYW5kIGlmIHRoZSBidWcgd2FzIGZvdW5kIG9uIGFuIEFSTSBib2FyZCwgdGhlIHBhdGNoIHdpbGwgYmUgdGVzdGVkIHRoZXJlLlxuXG5UaGUgcHJvbXB0IGlzIHRoZSBrZXkgaGVyZS4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIEl0IHNlZW1zIHByZXR0eSBjbGVhci4gTXkgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIHBhdGNoJ3MgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIGluIEdDRS9RRU1VLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGUgY29kZSBwYXRocyBhZGRlZCBieSBgcGFudGhvcmAgYXJlIHJlYWNoYWJsZS4gSXMgYHBhbnRob3JgIGltcG9zc2libGUgdG8gcmVhY2ggaW4gR0NFL1FFTVU/IElmIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIG9mIGBwYW50aG9yYCB3aXRoaW4gUUVNVSwgaXQncyB1bnJlYWNoYWJsZS4gQnV0LCB3YWl0LCBzeXprYWxsZXIgY291bGQgYmUgcnVubmluZyBvbiByZWFsIGhhcmR3YXJlLiBUaGF0IGRvZXNuJ3QgbWF0dGVyOyB0aGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyBJIHNob3VsZCBsb29rIGF0IHJlYWNoYWJpbGl0eSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG11c3QgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0IGlzIG9ubHkgcmVhY2hhYmxlIG9uIHJlYWwgaGFyZHdhcmUuXG5cblRvIGJlIGV4dHJhIHN1cmUsIEknbGwgcmVhZCB0aGF0IGFnYWluOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBZZXMsIGl0J3MgdmVyeSBjbGVhci5cblxuU28sICppcyogYHBhbnRob3JgIHJlYWNoYWJsZT8gSXQncyBhIHBsYXRmb3JtIGRyaXZlci4gQ2FuIGl0IGJlIHByb2JlZCB3aXRoIGEgZGV2aWNlIHRyZWUgb3ZlcmxheSBpbiBRRU1VPyBNYXliZS4gQnV0IGV2ZW4gaWYgaXQgKmNhbiogYmUgcHJvYmVkLCBkb2VzIGl0IHJlcXVpcmUgYWNjZXNzIHRvIHJlYWwgaGFyZHdhcmUgcmVnaXN0ZXJzIHRvIG5vdCBmYWlsIHRoZSBwcm9iZT8gSSBuZWVkIHRvIGFuYWx5emUgYHBhbnRob3JfZGV2aWNlX2luaXRgIGFuZCBgcGFudGhvcl9wcm9iZWAgdG8gZGV0ZXJtaW5lIGlmIHRob3NlIGZ1bmN0aW9ucyBhY2Nlc3MgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhcyB0aGF0IHdvdWxkIG1ha2UgdGhpcyBjb2RlIHBhdGggdW5yZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjA5LjMyNzk4Njk2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY5NjA1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9pb3JlbWFwfHJlYWRsfHdyaXRlbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaD02MzA9c3RhdGljIGlubGluZSB2b2lkIGdwdV93cml0ZSh2b2lkIF9faW9tZW0gKmlvbWVtLCB1MzIgcmVnLCB1MzIgZGF0YSlcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTYzMS17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2MzI6XFx0d3JpdGVsKGRhdGEsIGlvbWVtICsgcmVnKTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTYzMy19XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oPTYzNT1zdGF0aWMgaW5saW5lIHUzMiBncHVfcmVhZCh2b2lkIF9faW9tZW0gKmlvbWVtLCB1MzIgcmVnKVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjM2LXtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oOjYzNzpcXHRyZXR1cm4gcmVhZGwoaW9tZW0gKyByZWcpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjM4LX1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmg9NjQwPXN0YXRpYyBpbmxpbmUgdTMyIGdwdV9yZWFkX3JlbGF4ZWQodm9pZCBfX2lvbWVtICppb21lbSwgdTMyIHJlZylcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5oLTY0MS17XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuaDo2NDI6XFx0cmV0dXJuIHJlYWRsX3JlbGF4ZWQoaW9tZW0gKyByZWcpO1xcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmgtNjQzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MDkuNTM0OTU3Nzc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MTg5MzUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWUgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYHBhbnRob3JfZGV2aWNlX2luaXRgIGFuZCBSZWdpc3RlciBBY2Nlc3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkRvZXMgYHBhbnRob3JfZGV2aWNlX2luaXRgIGFjdHVhbGx5IHRvdWNoIGFueSBoYXJkd2FyZSByZWdpc3RlcnM/XCIuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgaXMganVzdCBzZXR0aW5nIHVwIHNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpZiBpdCdzIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggdGhlIGRldmljZSdzIGNvbnRyb2wgb3Igc3RhdHVzIHJlZ2lzdGVycy4gVGhlIGJlaGF2aW9yIGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgd2l0aGluIHRoZSBmdW5jdGlvbiB3aGVyZSBpdCBjb3VsZCBiZSBwZXJmb3JtaW5nIEkvTy4gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBhZGRyZXNzZXMgb3IgcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3NlcyBiZWluZyB1c2VkPyBBbnkgYml0d2lzZSBvcGVyYXRpb25zIHRoYXQgbG9vayBsaWtlIHRoZXkncmUgc2V0dGluZyBvciBjbGVhcmluZyBjb250cm9sIGZsYWdzPyBJ4oCZbGwgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBjYXJlZnVsbHkuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSBzdGVwcGluZyB0aHJvdWdoIHRoZSBmdW5jdGlvbiwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgY2FyZWZ1bCByZWFkaW5nIHdpdGggYW4gZXllIHRvIHdoZXJlIG1lbW9yeSBpcyBiZWluZyByZWFkL3dyaXR0ZW4uIEl04oCZcyBlaXRoZXIgZ29pbmcgdG8gYmUgYSBxdWljayBnbGFuY2UsIG9yIGEgbW9yZSBpbnZvbHZlZCBpbnZlc3RpZ2F0aW9uLCBidXQgSSBuZWVkIHRvIGZpZ3VyZSBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDAyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MTYuMTUzOTExMzEyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5ODcwMDUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdwdV9yZWFkfGdwdV93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDoxNi4zMTc5MDg0NzdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg2MDkzMjE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBvbmU6XG5cbioqUmV2aXNpdGluZyBgcGFudGhvcl9kZXZpY2VfaW5pdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBwYW50aG9yX2RldmljZV9pbml0YC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmdW5jdGlvbi4gSSd2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIHN1YnRsZSBJIG92ZXJsb29rZWQsIG9yIHBlcmhhcHMgYSBjb25zZXF1ZW5jZSBvZiBhIHJlY2VudCBjaGFuZ2UgdGhhdCBJIG5lZWQgdG8gY29uZmlybS4gSXQncyBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgSSBjYW4ndCBhZmZvcmQgYW55IGFzc3VtcHRpb25zIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIFgsIFksIGFuZCBaIHNwZWNpZmljIGZlYXR1cmVzIGFnYWluIHRvIGVuc3VyZSB0aGV5J3JlIGJlaGF2aW5nIGFzIGV4cGVjdGVkLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbG93LWxldmVsIHN0dWZmIHRoZXJlIGlzIHN0aWxsIGFzIGV4cGVjdGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBwYXRjaGVzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gVGltZSB0byBkaWcgaW4gYW5kIHJlLWV2YWx1YXRlIHRoZSBjb3JlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMwNSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjE5LjE3ODg0Mzk0N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0cmV0ID0gcGFudGhvcl9jbGtfaW5pdChwdGRldik7XFxuIDIxOTpcXHRcXHRpZiAocmV0KVxcbiAyMjA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjIxOlxcdFxcbiAyMjI6XFx0XFx0cmV0ID0gcGFudGhvcl9pbml0X3Bvd2VyKHB0ZGV2LVxcdTAwM2ViYXNlLmRldik7XFxuIDIyMzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiAyMjQ6XFx0XFx0XFx0ZHJtX2VycihcXHUwMDI2cHRkZXYtXFx1MDAzZWJhc2UsIFxcXCJpbml0IHBvd2VyIGRvbWFpbnMgZmFpbGVkLCByZXQ9JWRcXFwiLCByZXQpO1xcbiAyMjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjI2OlxcdFxcdH1cXG4gMjI3OlxcdFxcbiAyMjg6XFx0XFx0cmV0ID0gcGFudGhvcl9kZXZmcmVxX2luaXQocHRkZXYpO1xcbiAyMjk6XFx0XFx0aWYgKHJldClcXG4gMjMwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIzMTpcXHRcXG4gMjMyOlxcdFxcdHB0ZGV2LVxcdTAwM2Vpb21lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShwdGRldi1cXHUwMDNlYmFzZS5kZXYpLFxcbiAyMzM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgMCwgXFx1MDAyNnJlcyk7XFxuIDIzNDpcXHRcXHRpZiAoSVNfRVJSKHB0ZGV2LVxcdTAwM2Vpb21lbSkpXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwdGRldi1cXHUwMDNlaW9tZW0pO1xcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRwdGRldi1cXHUwMDNlcGh5c19hZGRyID0gcmVzLVxcdTAwM2VzdGFydDtcXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0cmV0ID0gZGV2bV9wbV9ydW50aW1lX2VuYWJsZShwdGRldi1cXHUwMDNlYmFzZS5kZXYpO1xcbiAyNDA6XFx0XFx0aWYgKHJldClcXG4gMjQxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI0MjpcXHRcXG4gMjQzOlxcdFxcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQocHRkZXYtXFx1MDAzZWJhc2UuZGV2KTtcXG4gMjQ0OlxcdFxcdGlmIChyZXQpXFxuIDI0NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNDY6XFx0XFxuIDI0NzpcXHRcXHQvKiBJZiBQTSBpcyBkaXNhYmxlZCwgd2UgbmVlZCB0byBjYWxsIHBhbnRob3JfZGV2aWNlX3Jlc3VtZSgpIG1hbnVhbGx5LiAqL1xcbiAyNDg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QTSkpIHtcXG4gMjQ5OlxcdFxcdFxcdHJldCA9IHBhbnRob3JfZGV2aWNlX3Jlc3VtZShwdGRldi1cXHUwMDNlYmFzZS5kZXYpO1xcbiAyNTA6XFx0XFx0XFx0aWYgKHJldClcXG4gMjUxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI1MjpcXHRcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdHJldCA9IHBhbnRob3JfaHdfaW5pdChwdGRldik7XFxuIDI1NTpcXHRcXHRpZiAocmV0KVxcbiAyNTY6XFx0XFx0XFx0Z290byBlcnJfcnBtX3B1dDtcXG4gMjU3OlxcdFxcbiAyNTg6XFx0XFx0cmV0ID0gcGFudGhvcl9wd3JfaW5pdChwdGRldik7XFxuIDI1OTpcXHRcXHRpZiAocmV0KVxcbiAyNjA6XFx0XFx0XFx0Z290byBlcnJfcnBtX3B1dDtcXG4gMjYxOlxcdFxcbiAyNjI6XFx0XFx0cmV0ID0gcGFudGhvcl9ncHVfaW5pdChwdGRldik7XFxuIDI2MzpcXHRcXHRpZiAocmV0KVxcbiAyNjQ6XFx0XFx0XFx0Z290byBlcnJfdW5wbHVnX3B3cjtcXG4gMjY1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDoxOS4xNzkwOTg1NDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5MzQ4MDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5SaWdodCwgaXQncyBraWNraW5nIHRoaW5ncyBvZmYgd2l0aCBhIGNhbGwgdG8gYHBhbnRob3JfaHdfaW5pdGAuIE5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoYXQgZnVuY3Rpb24uIGBwYW50aG9yX2h3X2luaXRgIGlzIHRoZSBrZXkgaGVyZTsgaXQncyB0aGUgZ2F0ZXdheSB0byB1bmRlcnN0YW5kaW5nIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHdpdGhpbiB0aGUgUGFudGhvciBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIHRoZSBoYXJkd2FyZSBhcmUgYmVpbmcgY29uZmlndXJlZCBvciBlbmFibGVkIGF0IHRoaXMgc3RhZ2UuIElzIGl0IGNsb2NrIHNldHVwPyBNZW1vcnkgbWFwcGluZz8gRGV2aWNlIGRyaXZlciBsb2FkaW5nPyBLbm93aW5nIHdoYXQgYHBhbnRob3JfaHdfaW5pdGAgaXMgdXAgdG8gd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGNvbnRleHQgZm9yIHRoZSByZXN0IG9mIHRoZSBleGVjdXRpb24gZmxvdy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpc3NlY3QgdGhhdCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI0NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MjQuNjcyNTg0MDMyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI0MjIwMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JfaHdfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vcGFudGhvci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYz0xNjY9aW50IHBhbnRob3JfZGV2aWNlX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmMtMjUzLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZGV2aWNlLmM6MjU0OlxcdHJldCA9IHBhbnRob3JfaHdfaW5pdChwdGRldik7XFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9kZXZpY2UuYy0yNTUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYz0yOTY9c3RhdGljIGludCBwYW50aG9yX2h3X2dwdV9pZF9pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmMtMzA0LVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYzozMDU6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuYy0zMDYte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5oPTMzPXN0cnVjdCBwYW50aG9yX2h3IHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfaHcuaC0zOS1cXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3Lmg6NDA6aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KTtcXG5kcml2ZXJzL2dwdS9kcm0vcGFudGhvci9wYW50aG9yX2h3LmgtNDEtaW50IHBhbnRob3JfaHdfcG93ZXJfc3RhdHVzX3JlZ2lzdGVyKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDoyNi41OTY4MTE5NDRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU3MzgxOTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRoYXQgYHBhbnRob3JfaHdfaW5pdGAgZnVuY3Rpb24sIHRoaW5raW5nIGxpa2UgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IHBhbnRob3JfaHdfaW5pdCBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgdGhpcyBpcyB0aGUgY3J1Y2lhbCBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB0aGUgaGFyZHdhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBQYW50aG9yIHN5c3RlbS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJdCdzIHRoZSBwb2ludCB3aGVyZSBhbGwgdGhlIHRoZW9yZXRpY2FsIGRlc2lnbiBhbmQgY29kZSBjb252ZXJnZSB0byBhY3R1YWxseSBtYWtlIHRoZSBoYXJkd2FyZSAqZG8qIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBwaWVjZXMgb2YgdGhlIGhhcmR3YXJlIHRoaXMgY292ZXJzLCB3aGF0IHN1YnN5c3RlbXMsIGFuZCBob3cgZGVlcGx5IGl0IGNvbmZpZ3VyZXMgZWFjaCBvbmUuIElzIHRoaXMgYSB0b3AtbGV2ZWwgZnVuY3Rpb24sIGNhbGxpbmcgb3RoZXJzLCBvciBpcyBpdCBkb2luZyBldmVyeXRoaW5nIGluIG9uZSBtYXNzaXZlIGJsb2NrPyBUaGF0IHdpbGwgdGVsbCBhIGxvdC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIGNsZWFyIGRpdmlzaW9ucyBvciBzZWN0aW9ucyB3aXRoaW4gdGhlIGNvZGUuIEFyZSB0aGVyZSBjb21tZW50cyBleHBsYWluaW5nIHdoYXQgZWFjaCBwYXJ0IGlzIHJlc3BvbnNpYmxlIGZvcj8gQXJlIHRoZXJlIGZ1bmN0aW9ucyBjYWxsZWQgdGhhdCBnaXZlIGEgZ29vZCBoaW50IGFib3V0IHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5LCBtYXliZSBgaW5pdF91YXJ0KClgIG9yIGBjb25maWd1cmVfZG1hKClgLiBJ4oCZbSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGZsYWdzLCBsaWtlIGdsb2JhbCB2YXJpYWJsZSB1c2FnZSwgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgaGFyZGNvZGVkIHZhbHVlcy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBjaGVja2luZy4gSXMgaXQgcm9idXN0PyBEb2VzIGl0IGhhbmRsZSBoYXJkd2FyZSBmYWlsdXJlcyBncmFjZWZ1bGx5LCBvciBkb2VzIGl0IGFzc3VtZSBldmVyeXRoaW5nIHdpbGwgd29yayBwZXJmZWN0bHk/IFRoZSBlcnJvciBoYW5kbGluZyAob3IgbGFjayB0aGVyZW9mKSB3aWxsIHJldmVhbCBhIGxvdCBhYm91dCB0aGUgZGVzaWduIHBoaWxvc29waHkuIFdoYXQgaGFwcGVucyBpZiBzb21ldGhpbmcgZmFpbHMgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gRG9lcyBpdCByb2xsIGJhY2sgY2hhbmdlcywgYXR0ZW1wdCB0byByZXRyeSwgb3Igc2ltcGx5IGhhbHQ/XG5cbkVzc2VudGlhbGx5LCBJIHdhbnQgdG8gYXNzZXNzIHRoZSByZWxpYWJpbGl0eSwgbW9kdWxhcml0eSwgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuIElzIGl0IHdlbGwtc3RydWN0dXJlZCwgZWFzeSB0byB1bmRlcnN0YW5kLCBhbmQgZWFzeSB0byBtb2RpZnkgaW4gdGhlIGZ1dHVyZT8gVGhpcyBpcyBrZXkgZm9yIGxvbmctdGVybSBwcm9qZWN0IGhlYWx0aC4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWl6ZSBhbmQgbWFrZSBpbXByb3ZlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MzEuMTcwNjM0NzUxWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjU0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwNTpcXHRpbnQgcGFudGhvcl9od19pbml0KHN0cnVjdCBwYW50aG9yX2RldmljZSAqcHRkZXYpXFxuIDMwNjpcXHR7XFxuIDMwNzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0cmV0ID0gcGFudGhvcl9od19ncHVfaWRfaW5pdChwdGRldik7XFxuIDMxMDpcXHRcXHRpZiAocmV0KVxcbiAzMTE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0cmV0ID0gcGFudGhvcl9od19iaW5kX2RldmljZShwdGRldik7XFxuIDMxNDpcXHRcXHRpZiAocmV0KVxcbiAzMTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0cmV0dXJuIHBhbnRob3JfaHdfaW5mb19pbml0KHB0ZGV2KTtcXG4gMzE4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MzEuMTcyODA0ODIyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjg4NjE2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgd2UncmUgZXN0YWJsaXNoaW5nIHRoZSBoYXJkd2FyZSBjb250ZXh0IGZvciBhIEdQVSB3aXRoaW4gdGhlIFBhbnRob3IgYXJjaGl0ZWN0dXJlLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaW5pdGlhbGl6YXRpb24gcmVsYXRlZCB0byBHUFUgaWRlbnRpZmljYXRpb24uIEknbSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBhbnkgc3Vic2VxdWVudCBvcGVyYXRpb25zIG9uIHRoZSBHUFUg4oCTIHRoaW5ncyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uLCBjb21tYW5kIHF1ZXVlIHNldHVwLCBhbmQga2VybmVsIGV4ZWN1dGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgR1BVIElELiBEb2VzIGl0IHByb2JlIFBDSSBkZXZpY2VzPyBJcyBpdCBiYXNlZCBvbiBhIGRldmljZSB0cmVlIGxvb2t1cD8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgcGxhdGZvcm0tc3BlY2lmaWMgYW5kIHZlbmRvci1kZWZpbmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZXRob2RvbG9neS4gQW55IHBvdGVudGlhbCBmb3IgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzIGJlaW5nIGludm9sdmVkIGhlcmUgaXMgc29tZXRoaW5nIHRvIHdhdGNoIGZvci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J2xsIGludGVyYWN0IHdpdGggc29tZSBraW5kIG9mIHJlZ2lzdGVyIHRvIGNvbmZpZ3VyZSB0aGUgR1BVLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBkcml2ZXJzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCBhbnkgZXhpc3RpbmcgcmVzb3VyY2UgbWFuYWdlbWVudCBzeXN0ZW1zIHdlIG1pZ2h0IGhhdmUgaW4gcGxhY2UuIEl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgYW55IGZhaWx1cmUgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHdoZW4gbXVsdGlwbGUgR1BVcyBhcmUgcHJlc2VudC4gSXMgdGhlcmUgYW55IGdyYWNlZnVsIGRlZ3JhZGF0aW9uIG9yIGVycm9yIHJlcG9ydGluZz8gVGhlIHdheSB0aGlzIGlzIHNldCB1cCB3aWxsIGRpY3RhdGUgdGhlIG92ZXJhbGwgc3lzdGVtJ3Mgcm9idXN0bmVzcy4gTGV0J3Mgc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6MzUuNDAxNjcwMjc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ncHUvZHJtL3BhbnRob3IvcGFudGhvcl9ody5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5NjpcXHRzdGF0aWMgaW50IHBhbnRob3JfaHdfZ3B1X2lkX2luaXQoc3RydWN0IHBhbnRob3JfZGV2aWNlICpwdGRldilcXG4gMjk3OlxcdHtcXG4gMjk4OlxcdFxcdHB0ZGV2LVxcdTAwM2VncHVfaW5mby5ncHVfaWQgPSBncHVfcmVhZChwdGRldi1cXHUwMDNlaW9tZW0sIEdQVV9JRCk7XFxuIDI5OTpcXHRcXHRpZiAoIXB0ZGV2LVxcdTAwM2VncHVfaW5mby5ncHVfaWQpXFxuIDMwMDpcXHRcXHRcXHRyZXR1cm4gLUVOWElPO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRyZXR1cm4gMDtcXG4gMzAzOlxcdH1cXG4gMzA0OlxcdFxcbiAzMDU6XFx0aW50IHBhbnRob3JfaHdfaW5pdChzdHJ1Y3QgcGFudGhvcl9kZXZpY2UgKnB0ZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDozNS40MDM4Mzk2NjdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIwNjcyMzQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBXb3J0aEZ1enppbmdgIENyaXRlcmlhKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIHJlYWRpbmcgYEdQVV9JRGAgZnJvbSBgaW9tZW1gLiBBIHZhbHVlIG9mIDAgcmVzdWx0cyBpbiBgLUVOWElPYC4gSG1tLCB0aGF0IHN1Z2dlc3RzIGl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlIG9yIGEgbW9jayB0aGF0IHByb3ZpZGVzIGEgdmFsaWQgYEdQVV9JRGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBoYXZlIGEgbW9jayBmb3IgdGhpcz8gV2FpdCwgdGhlbiBJIHJlbWVtYmVyIHN5emthbGxlciB1c2VzIGB2a21zYCBvciBgdmdlbWAgdG8gZnV6eiBEUk0gZHJpdmVycy4gQnV0LCBgcGFudGhvcmAgaXMgYSBzcGVjaWZpYyBkcml2ZXIuIENvdWxkIHN5emthbGxlciBiZSBydW5uaW5nIG9uIGFuIEFSTSBib2FyZCB3aXRoIE1hbGkgQ1NGPyBPZiBjb3Vyc2UsIHN5emthbGxlciAqZG9lcyogaGF2ZSBBUk02NCBpbnN0YW5jZXMuXG5cblRoYXQgY2hhbmdlcyB0aGluZ3MuIElmIHN5emthbGxlciBpcyBvbiBhbiBBUk0gYm9hcmQsIHRoZW4gaXQncyAqbm90KiBuZWNlc3NhcmlseSBpbXBvc3NpYmxlIHRvIHJlYWNoISBUaGUgcHJvbXB0IGlzIHZlcnkgc3BlY2lmaWM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlwiIFNvLCBpZiBpdCAqb25seSogd29ya3Mgb24gcmVhbCBoYXJkd2FyZSwgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIHJlLXJlYWQgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYTogKkRvY3VtZW50YXRpb24sIEtjb25maWcsIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG51bWVyaWMgY29uc3RhbnRzLCBhbmQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBHQ0Ugb3IgUUVNVSouIFNvIGl0ICpyZWFsbHkqIGhpbmdlcyBvbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgcGFydC5cblxuQWxyaWdodCwgaWYgYHBhbnRob3JgICppcyogYSByZWFsIGhhcmR3YXJlIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLCBhbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgaXQgaW4gUUVNVSwgdGhlbiBpdCdzIGdlbnVpbmVseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIEdDRSBvciBRRU1VLiBOb3csIHRoZSBrZXkgcXVlc3Rpb246IGlzIHRoZXJlIGEgc29mdHdhcmUgZW11bGF0b3IgZm9yIGBwYW50aG9yYD8gVGltZSB0byBnbyBodW50aW5nLiBMZXQncyBzdGFydCBieSBzZWFyY2hpbmcgdGhlIGtlcm5lbCB0cmVlIGZvciBgcGFudGhvcmAgaW4gYHRvb2xzL3Rlc3RpbmcvYCwgYGRyaXZlcnMvZ3B1L2RybS92a21zL2AsIGFuZCBgZHJpdmVycy9ncHUvZHJtL3ZnZW0vYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAwMiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjQyLjYxMDU2OTU2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDEzODc4NTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3ZrbXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDo0My4yMTE5NzIyMzVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwODYxMjcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgdGhlIHZnZW0gRHJpdmVyJ3MgUm9sZSoqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpbW1lZGlhdGVseSB6b29tcyBpbiBvbiBgZHJpdmVycy9ncHUvZHJtL3ZnZW0vYC4gR2l2ZW4gbXkgYmFja2dyb3VuZCwgdGhhdCBhcmVhIGluc3RhbnRseSBncmFicyBteSBhdHRlbnRpb24uIEknbSB3b25kZXJpbmcsIGhvdyBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmUsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnM/IEFtIEkgbG9va2luZyBhdCBwb3RlbnRpYWwgZW5oYW5jZW1lbnRzLCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uZmxpY3QsIG9yIG1heWJlIGV2ZW4gYSBzcGVjaWZpYyBidWcgcmVwb3J0IHRoYXQgSSBhbSB0cmFja2luZz8gVGhlIFwidmdlbVwiIGRyaXZlciwgYmVpbmcgYSB2aXJ0dWFsIEdFTSBkcml2ZXIsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIHRob3VnaHRzIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtZW1vcnkgbWFuYWdlbWVudCBwYXJhZGlnbXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIChEUk0pIGZyYW1ld29yay4gSSBtaWdodCBzdGFydCB0aGlua2luZyBhYm91dCBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBlc3BlY2lhbGx5IGluIHZhcmlvdXMgd29ya2xvYWRzLCBhbmQgaG93IHRob3NlIHBlcmZvcm1hbmNlIG1ldHJpY3MgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZS4gQXJlIHRoZXJlIGFueSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGF0IEkgYW0gdHJ5aW5nIHRvIHJlc29sdmUgb3IgbWl0aWdhdGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTAzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6NDYuOTIwNTg4NDIzWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg0NjcyNzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL3ZnZW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDo0Ny4wODkwNjc1MzlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NDgzMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSByZWxldmFudCBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBhcmNoL3VtL2AgUmFiYml0IEhvbGUqKlxuXG5BbHJpZ2h0LCB0aGF0J3MgaW50ZXJlc3RpbmcuLi4gdGhhdCBsaXR0bGUgd2hpc3BlciBvZiBgYXJjaC91bS9gIGp1c3QgcG9wcGVkIGludG8gbXkgaGVhZC4gSSB3b25kZXIgd2hhdCBwcm9tcHRlZCB0aGF0IHRob3VnaHQuIEl0IHN1Z2dlc3RzIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFNvLCB3aGF0J3MgZ290IG1lIHRoaW5raW5nIGFib3V0IFVzZXItbW9kZSBMaW51eD8gQW0gSSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBlbXVsYXRpb24/IE9yIHBlcmhhcHMgSSdtIGNvbnNpZGVyaW5nIHVzaW5nIGl0IGZvciB0ZXN0aW5nIG9yIGRldmVsb3BtZW50PyBNYXliZSBJJ20gc2VlaW5nIGEgY29kZSBwYXRoIHRoYXQgdG91Y2hlcyBvbiB0aGF0IHN1YnN5c3RlbSBpbiBzb21lIHdheS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQuIExldCBtZSBtZW50YWxseSByZXZpZXcgd2hhdCBJIHdhcyBqdXN0IGxvb2tpbmcgYXQsIG9yIHdoYXQgcHJvYmxlbSBJIHdhcyB0cnlpbmcgdG8gc29sdmUuIFdoYXQgd2FzIHRoZSAqbGVhZGluZyogdGhvdWdodD8gRGlkIEkgcmVjZW50bHkgaGF2ZSBhIGRpc2N1c3Npb24gYWJvdXQgY29udGFpbmVyaXphdGlvbiBvciBzeXN0ZW0gZW11bGF0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHJlbGV2YW5jZSBvZiBgYXJjaC91bS9gIHRvIHRoZSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQuIFRoaXMgY291bGQgYmUgYSBwcm9kdWN0aXZlIHRocmVhZCB0byBmb2xsb3csIG9yIGp1c3QgYSBtZW50YWwgZGV0b3VyLiBUaW1lIHRvIGFzc2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxNDcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ0OjUwLjc1MzkwMjE1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NDUwMTk1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYW50aG9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvdW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NDo1MS4zNjkzNjU1NTRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQxOTAxNTQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIFJlYWNoaW5nIGBwYW50aG9yX2dlbV9mYXVsdGAqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgaG93IGNhbiBJIGV2ZW4gKnJlYWNoKiBgaW5zZXJ0X3BhZ2VgIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZT8gSSdtIHRoaW5raW5nIHRocm91Z2ggdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJZiBgcGFudGhvcl9wcm9iZWAgZmFpbHMgZWFybHkgb24sIGxpa2UgYXQgYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgIGJlY2F1c2UgYEdQVV9JRGAgaXMgMCwgb3IgYmVjYXVzZSB0aGUgYGlvbWVtYCBtYXBwaW5nIGlzIGludmFsaWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHByb3BlciBkZXZpY2UgdHJlZSBub2RlLCB0aGVuIHRoZSBkcml2ZXIncyBub3QgZ29pbmcgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LlxuXG5BaGEhIElmIFFFTVUncyBgdmlydGAgbWFjaGluZSBmb3IgQVJNNjQgZG9lc24ndCBoYXZlIGEgTWFsaSBDU0YgR1BVIGRlZmluZWQgaW4gaXRzIGRldmljZSB0cmVlLCB0aGVuIGBwYW50aG9yX3Byb2JlYCB3b24ndCBldmVuIGJlIGNhbGxlZCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoYXQgbWVhbnMgYHBhbnRob3JgIGlzIGluYWNjZXNzaWJsZSB3aXRoaW4gUUVNVSB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG5cbkJ1dCB3YWl0IGEgbWludXRlLi4uIGNvdWxkIHN5emthbGxlciBiZSB1c2luZyBhIGRldmljZSB0cmVlIG92ZXJsYXkgdG8gYnJpbmcgdGhlIGRldmljZSBvbmxpbmU/IEV2ZW4gaWYgaXQgZG9lcywgYGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlYCBpcyBzdGlsbCBnb2luZyB0byBtYXAgKnNvbWUqIG1lbW9yeS4gUmVhZGluZyBgR1BVX0lEYCB3aWxsIHRoZW4ganVzdCByZXR1cm4gMCwgb3Igd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5zIHRvIGJlIGluIHRoYXQgbWVtb3J5IGxvY2F0aW9uLiBJZiBpdCdzIHplcm8sIHRoZW4gYHBhbnRob3JfaHdfZ3B1X2lkX2luaXRgIHdpbGwgcmV0dXJuIGAtRU5YSU9gLCBhbmQgYHBhbnRob3JfcHJvYmVgIHdpbGwgYWdhaW4gZmFpbC5cblxuSW4gZWl0aGVyIHNjZW5hcmlvLCB0aGUgZGV2aWNlIHdvbid0IGluaXRpYWxpemUuIFRoYXQgbWVhbnMgYC9kZXYvZHJpL3JlbmRlckQqYCB3b24ndCBiZSBjcmVhdGVkIGZvciBgcGFudGhvcmAsIGFuZCB0aGVyZWZvcmUsIGBwYW50aG9yX2dlbV9mYXVsdGAgd29uJ3QgZXZlciBiZSByZWFjaGFibGUuXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUncyAqYW55KiB3YXkgdG8gYnlwYXNzIHRoZSBwcm9iZS4gSXMgdGhlcmUgYSB3YXkgdG8gc29tZWhvdyBtb2NrIG9yIGJ5cGFzcyBgcGFudGhvcl9wcm9iZWAsIHBlcmhhcHMgc29tZSBraW5kIG9mIGtlcm5lbC1sZXZlbCBtb2NrIEknbSBvdmVybG9va2luZz8gSSBzaG91bGQgdmVyaWZ5IGlmIGFueSBzdWNoIGBwYW50aG9yYCBtb2NrIGFjdHVhbGx5IGV4aXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0MTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6NTkuNzg4Mzg0MTY2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU3MzI4NjUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhbnRob3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9taXNjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTg6NDQ6NTkuOTk0MTI1MzgxWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTUwMjEyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZSBhbmQgZm9ybWF0dGVkIHdpdGggYSBib2xkZWQgaGVhZGVyOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBDaGFyYWN0ZXIgRHJpdmVycyoqXG5cblJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBwcm9ibGVtLCB3aGF0ZXZlciBpdCBpcy4gQW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBmdW5kYW1lbnRhbCBhcmVhOiBgZHJpdmVycy9jaGFyL2AuIEl0J3MgYWxtb3N0IHJlZmxleGl2ZS4gV2hlbmV2ZXIgSSdtIHdyZXN0bGluZyB3aXRoIHNvbWV0aGluZyBhdCB0aGUga2VybmVsIGxldmVsLCBlc3BlY2lhbGx5IGFueXRoaW5nIHJlbGF0ZWQgdG8gaGFyZHdhcmUgaW50ZXJhY3Rpb24gb3IgZGV2aWNlIG1hbmFnZW1lbnQsIG15IHRob3VnaHRzIGludmFyaWFibHkgZHJpZnQgdG93YXJkcyB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzLiBJIG1lYW4sIGl0J3MgdGhlIGJyZWFkIGFuZCBidXR0ZXIsIGlzbid0IGl0PyBUaGF0IGRpcmVjdG9yeSBpcyB3aGVyZSB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIHJlc2lkZSDigJMgdGhlIGNoYXJhY3RlciBkZXZpY2VzLiBJdCdzIHdoZXJlIHRoZSBhYnN0cmFjdGlvbnMgYXJlIGJ1aWx0LCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgYXJlIGRlZmluZWQuIFNvLCBsZXQncyBzYXkgSSdtIHRyb3VibGVzaG9vdGluZyBhIHdlaXJkIEkvTyBpc3N1ZSwgbWF5YmUgYSBjdXN0b20gZGV2aWNlIGlzbid0IGJlaGF2aW5nIGFzIGV4cGVjdGVkLCBJJ2QgaW5zdGluY3RpdmVseSBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhvc2UgZHJpdmVycy4gTG9va2luZyBhdCBob3cgcmVhZHMgYW5kIHdyaXRlcyBhcmUgaGFuZGxlZCwgaG93IGludGVycnVwdHMgYXJlIG1hbmFnZWQsIGhvdyB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLiBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBhbiBleHBlcnQsIHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGlzbid0IGp1c3QgYSBsb2NhdGlvbiB0byBzdG9yZSBmaWxlczsgaXQncyBhIGNyaXRpY2FsIGluZnJhc3RydWN0dXJlIGZvciB1bmRlcnN0YW5kaW5nLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IHdoeSBJJ20gdGhpbmtpbmcgYWJvdXQgaXQsIGFuZCB3aGF0LCBleGFjdGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjQzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NTowMy40ODkxNDk4OTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjM4MDEzNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFudGhvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NoYXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxODo0NTowNC4wOTE1Mzg3MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAyNjU3MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBwYW50aG9yIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBgcGFudGhvcmAgZHJpdmVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBydWxlcyBzdGF0ZSBJIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGluIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYHBhbnRob3JgIGlzIGEgcmVhbCBvciB2aXJ0dWFsIGRyaXZlci4gSG1tLCBsZXQgbWUgc2VlLiBcIlBhbnRob3IgKERSTSBzdXBwb3J0IGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcykuXCIgUmlnaHQsIGl0J3MgYSBkcml2ZXIgZm9yICpyZWFsKiBoYXJkd2FyZSDigJMgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFRoYXQgbWVhbnMgaXTigJlzIG5vdCBzb2Z0d2FyZSBlbXVsYXRlZC4gTm93IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgb3IgR0NFIG9mZmVyIE1hbGkgQ1NGIGVtdWxhdGlvbi4gTm9wZSwgUUVNVSB1c2VzIHRoaW5ncyBsaWtlIHZpcnRpby1ncHUsIHJhbWZiLCBldGMuLCBidXQgbm90aGluZyBmb3IgTWFsaS4gU28sIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIGVpdGhlciBlbnZpcm9ubWVudC5cblxuT2theSwgdGltZSB0byBqdXN0aWZ5IHRoaXMgZGVjaXNpb24uIEknbGwgd3JpdGUgc29tZXRoaW5nIGxpa2UgdGhpczogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBwYW50aG9yYCBEUk0gZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgQVJNIE1hbGkgQ1NGLWJhc2VkIEdQVXMuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgc3RhbmRhcmQgZnV6emluZy4gVGhlcmVmb3JlLCBpdCBpcyBub3Qgd29ydGggZnV6emluZy5cIlxuXG5MZXQgbWUganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCdzIHNlZSBob3cgYGluc2VydF9wYWdlYCBpcyBjYWxsZWQsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlcyBhcmUuIEl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYGRyaXZlcnMvZ3B1L2RybS9wYW50aG9yL3BhbnRob3JfZ2VtLmNgLiBPa2F5LCBpdCdzIG9ubHkgY2FsbGVkIGZyb20gYG5vbmJsb2NraW5nX3BhZ2Vfc2V0dXBgIGFuZCBgYmxvY2tpbmdfcGFnZV9zZXR1cGAsIHdoaWNoIGluIHR1cm4sIGFyZSBvbmx5IGNhbGxlZCBmcm9tIGBwYW50aG9yX2dlbV9hbnlfZmF1bHRgLCB3aGljaCBpcyB0aGUgZmF1bHQgaGFuZGxlciBmb3IgYHBhbnRob3JgIEdFTSBvYmplY3RzLiBUbyBnZXQgdG8gdGhpcyBmYXVsdCBoYW5kbGVyLCBJIG5lZWQgYSBHRU0gb2JqZWN0LiBUbyBjcmVhdGUgYSBHRU0gb2JqZWN0LCBJJ2QgbmVlZCB0byBvcGVuIHRoZSBgcGFudGhvcmAgRFJNIGRldmljZSBhbmQgY2FsbCBgRFJNX0lPQ1RMX1BBTlRIT1JfQk9fQ1JFQVRFYC4gVG8gb3BlbiB0aGUgZGV2aWNlLCBJIG5lZWQgaXQgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBQcm9iaW5nIHJlcXVpcmVzIGEgdmFsaWQgYEdQVV9JRGAgZnJvbSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLiBTaW5jZSBJIGRvbid0IGhhdmUgTWFsaSBDU0YgaGFyZHdhcmUgaW4gUUVNVSwgdGhpcyBpcyBpbXBvc3NpYmxlLiBZZXAsIGFsbCBnb29kLiBUaGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBhIGZ1enplZCBlbnZpcm9ubWVudC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NzAsIk91dHB1dFRva2VucyI6MTE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE4OjQ1OjE0LjExODExMzEwM1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgcGFudGhvcmAgRFJNIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFSTSBNYWxpIENTRi1iYXNlZCBHUFVzLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZXF1aXJlcyByZWFkaW5nIGEgdmFsaWQgR1BVX0lEIGZyb20gaGFyZHdhcmUgcmVnaXN0ZXJzKS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBpbiB0aGUgR0VNIGZhdWx0IGhhbmRsZXIgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIHN0YW5kYXJkIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYHBhbnRob3JgIERSTSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBBUk0gTWFsaSBDU0YtYmFzZWQgR1BVcy4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVxdWlyZXMgcmVhZGluZyBhIHZhbGlkIEdQVV9JRCBmcm9tIGhhcmR3YXJlIHJlZ2lzdGVycykuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgaW4gdGhlIEdFTSBmYXVsdCBoYW5kbGVyIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBzdGFuZGFyZCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowlg5fg[1] Phase: Running StartedAt: 2026-06-23 18:45:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg5fg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 18:45:27 +0000 UTC FinishedAt: 2026-06-23 18:45:52 +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,}