Name: series-workflowxrjj2 Phase: Failed StartedAt: 2026-09-03 22:00:27 +0000 UTC FinishedAt: 2026-09-03 22:43:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrjj2[0] Phase: Succeeded StartedAt: 2026-09-03 22:00:27 +0000 UTC FinishedAt: 2026-09-03 22:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrjj2[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 22:00:27 +0000 UTC FinishedAt: 2026-09-03 22:42:59 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMDY5MDI3N2Y2N2EyN2U0OTlhMGU2ODE0ZjliODViOTE1ZTI5MzQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjo0MTo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiAmIzQzOzk3NCw3IEBAIGVudW0ge1xuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgRkJOSUNfQ1NSX1NUQVJUX1BVTF9VU0VSXHQweDMxMDAwXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR1x0MHgzMTAzZFx0XHQvKiAweGM0MGY0ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREVcdENTUl9CSVQoMjApXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcdENTUl9CSVQoMTkpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfQk1FXHRcdENTUl9CSVQoMTgpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfUkRFX0FUVFJcdENTUl9HRU5NQVNLKDE3LCAxNSlcbkBAIC0xMjE1LDYgJiM0MzsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbiYjNDM7LyogU2V0IHdpdGggRldfQ01QTCB3aGVuIHRoZSBGVyBjb21wbGV0ZWQgYSBkZXNjcmlwdG9yIHdpdGhvdXQgc3VjY2Vzc2Z1bGx5XG4mIzQzOyAqIHByb2Nlc3NpbmcgaXQgKGUuZy4gYSBtYWlsYm94IERNQSBlcnJvcik7IHRoZSBjb21wbGV0aW9uIGhhcyBubyB2YWxpZCBkYXRhLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSXHRERVNDX0JJVCgyKVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcdERFU0NfQklUKDEpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfSE9TVF9DTVBMXHRERVNDX0JJVCgwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjQ1ODFmZDhjOGVkZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbkBAIC01MzksOCAmIzQzOzUzOSw4IEBAIHN0YXRpYyB2b2lkIGZibmljX2RiZ19md19tYnhfZGlzcGxheShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXG4gXHQvKiBHZW5lcmF0ZSBoZWFkZXIgKi9cbiBcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcJiMzNDtSeFxcblwmIzM0OyA6IFwmIzM0O1R4XFxuXCYjMzQ7KTtcbiBcbi1cdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcblwmIzM0Oyxcbi1cdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZCByZXNwX2Vycm9yOiAlbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwmIzM0OyUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXG5cJiMzNDssXG4gXHRcdCBcJiMzNDtJZHhcJiMzNDssIFwmIzM0O0xlblwmIzM0OywgXCYjMzQ7RVwmIzM0OywgXCYjMzQ7QWRkclwmIzM0OywgXCYjMzQ7RlwmIzM0OywgXCYjMzQ7SFwmIzM0OywgXCYjMzQ7UmF3XCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5pbmRleCAwZTQ3MDg4ZWM0NGJhLi40MjNmMTc5YzlkNDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5AQCAtMjAyNSw3ICYjNDM7MjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5nZXRfZHJ2aW5mb1x0XHRcdD0gZmJuaWNfZ2V0X2RydmluZm8sXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdFx0PSBmYm5pY19nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0XHQ9IGZibmljX2dldF9yZWdzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuaW5kZXggMjgzZDI1ZmFlNzllNy4uOGY0YTE5NWJiOGVkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNjAsOCAmIzQzOzYwLDE0IEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9yZXNldF9kZXNjX3Jpbmcoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgbWJ4X2lkeClcbiBcdCAqL1xuIFx0c3dpdGNoIChtYnhfaWR4KSB7XG4gXHRjYXNlIEZCTklDX0lQQ19NQlhfUlhfSURYOlxuJiM0MztcdFx0LyogVGhlIHdyaXRlIHBhdGggb25seSB0ZXJtaW5hdGVzIG91dHN0YW5kaW5nIHJlcXVlc3RzIHdoZW5cbiYjNDM7XHRcdCAqIGJvdGggRkxVU0ggYW5kIEZMVVNIX01PREUgYXJlIHNldC4gV2l0aCBGTFVTSCBhbG9uZSB0aGVcbiYjNDM7XHRcdCAqIHdyaXRlcyBzdGlsbCBvYmV5IHRoZSBoYWx0IGFzc2VydGVkIGJ5IGNsZWFyaW5nIEJNRSwgc29cbiYjNDM7XHRcdCAqIG5vdGhpbmcgZHJhaW5zIGFuZCBBV19GTFVTSF9ET05FIG5ldmVyIGFzc2VydHMuXG4mIzQzO1x0XHQgKi9cbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRyxcbi1cdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpO1xuJiM0MztcdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0ggfFxuJiM0MztcdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDpcbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRyxcbkBAIC0yODUsNiAmIzQzOzI5MSwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdFx0aWYgKCEoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0aWYgKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHtcbiYjNDM7XHRcdFx0dHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3ImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRkZXZfd2FybihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGVyBjb21wbGV0ZWQgYSBUeCBtYWlsYm94IHJlcXVlc3Qgd2l0aCBhbiBlcnJvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRmYm5pY19tYnhfdW5tYXBfYW5kX2ZyZWVfbXNnKGZiZCwgRkJOSUNfSVBDX01CWF9UWF9JRFgsIGhlYWQpO1xuIFxuIFx0XHRoZWFkJiM0MzsmIzQzOztcbkBAIC0xNjY2LDYgJiM0MzsxNjc4LDEzIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3J4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRpZiAoIShkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuJiM0MztcdFx0XHRyeF9tYngtXHUwMDNlcmVzcF9lcnJvciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRldl93YXJuKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZXIHJlcG9ydGVkIGFuIGVycm9yIG9uIGFuIFJ4IG1haWxib3ggbWVzc2FnZTsgZHJvcHBpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG5leHRfcGFnZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGZiZC1cdTAwM2VkZXYsIHJ4X21ieC1cdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxuIFx0XHRcdFx0XHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG5AQCAtMTczNCw2ICYjNDM7MTc1Myw3IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuIFx0c3RydWN0IGZibmljX2Z3X21ieCAqdHhfbWJ4ID0gXHUwMDI2ZmJkLVx1MDAzZW1ieFtGQk5JQ19JUENfTUJYX1RYX0lEWF07XG4gXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IDEwICogSFogJiM0MzsgMTtcbiYjNDM7XHR1NjQgcmVzcF9lcnJvcjtcbiBcdGludCBlcnIsIGk7XG4gXG4gXHRkbyB7XG5AQCAtMTc2NCw2ICYjNDM7MTc4NCw4IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXG4gXHQgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS5cbiBcdCAqL1xuJiM0MztzZW5kX2NhcF9yZXE6XG4mIzQzO1x0cmVzcF9lcnJvciA9IHR4X21ieC1cdTAwM2VyZXNwX2Vycm9yO1xuIFx0ZXJyID0gZmJuaWNfZndfeG1pdF9zaW1wbGVfbXNnKGZiZCwgRkJOSUNfVExWX01TR19JRF9IT1NUX0NBUF9SRVEpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBjbGVhbl9tYng7XG5AQCAtMTc4Miw4ICYjNDM7MTgwNCwxNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuIFx0XHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cbi1cdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXG4mIzQzO1x0XHRpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkge1xuIFx0XHRcdGVyciA9IC1FVElNRURPVVQ7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIElmIHRoZSBGVyBjb21wbGV0ZWQgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IHdpdGggYW4gZXJyb3JcbiYjNDM7XHRcdCAqIChGV19FUlIpIGl0IHByb2R1Y2VkIG5vIHJlc3BvbnNlOyB0aGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzb1xuJiM0MztcdFx0ICogcmUtaXNzdWUgdGhlIHJlcXVlc3QgaW5zdGVhZCBvZiB0aW1pbmcgb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IgIT0gcmVzcF9lcnJvcilcbiYjNDM7XHRcdFx0Z290byBzZW5kX2NhcF9yZXE7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTEzLDYgJiM0MzsxMyw3IEBAIHN0cnVjdCBmYm5pY190bHZfbXNnO1xuIFxuIHN0cnVjdCBmYm5pY19md19tYngge1xuIFx0dTggcmVhZHksIGhlYWQsIHRhaWw7XG4mIzQzO1x0dTY0IHJlc3BfZXJyb3I7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfdGx2X21zZ1x0Km1zZztcbiBcdFx0ZG1hX2FkZHJfdFx0XHRhZGRyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jXG5pbmRleCA4YjliYzllOGVhNTZjLi5jNjY5OGUzMDAyYTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuQEAgLTQzNCw2ICYjNDM7NDM0LDcgQEAgc3RhdGljIGludCBmYm5pY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHN0cnVjdCBmYm5pY19uZXQgKmZibjtcbiBcbiBcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcbiBcdFx0Z290byBudWxsX3VjX2FkZHI7XG5AQCAtNDQxLDExICYjNDM7NDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRydG5sX2xvY2soKTtcbiBcdG5ldGRldl9sb2NrKG5ldGRldik7XG4gXG4mIzQzO1x0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4gXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4gXG4gXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuIFxuJiM0MztcdC8qIFRoZSBJUlFzIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgc28gZHJvcCB0aGUgbmFwaSB2ZWN0b3IgY291bnQgKi9cbiYjNDM7XHRmYm4tXHUwMDNlbnVtX25hcGkgPSAwO1xuJiM0MztcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG5AQCAtNTA4LDE2ICYjNDM7NTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRkZXZfbG9jayhuZXRkZXYpO1xuJiM0MztcbiBcdGZibiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4gXHQvKiBSZXNldCB0aGUgcXVldWVzIGlmIG5lZWRlZCAqL1xuIFx0ZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLVx1MDAzZW51bV90eF9xdWV1ZXMsIGZibi1cdTAwM2VudW1fcnhfcXVldWVzKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuLVx0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbi1cbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIFx0XHRlcnIgPSBfX2ZibmljX29wZW4oZmJuKTtcbiYjNDM7XHRcdC8qIE9uIGZhaWx1cmUgdGhlIHZlY3RvcnMgYXJlIGZyZWVkLCBzbyBkcm9wIHRoZSBjb3VudCAqL1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0ZmJuLVx1MDAzZW51bV9uYXBpID0gMDtcbiYjNDM7XHR9XG4gXG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDEyNjgzYjVkMTI1ZTQuLjk3YTFhZGJkOWVhZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbkBAIC05NDQsNiAmIzQzOzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVx0QklUKDYpXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTXHRcdEJJVCg3KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuIFxuIC8qKlxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXG5AQCAtOTgxLDYgJiM0Mzs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICpcdCAtIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKVxuICAqXHQgLSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKClcbiAgKlx0IC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaylcbiYjNDM7ICpcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcbiAgKlxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXG4gICpcdGxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmVcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5AQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbiBcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xuIFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcbiYjNDM7XHRjYXNlIEVUSFRPT0xfVEVTVDpcbiYjNDM7XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSAoZmJuaWMpIGRyaXZlciBhbmQgYWRkcyB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyB0byB0aGUgY29yZSBldGh0b29sIGluZnJhc3RydWN0dXJlIHNwZWNpZmljYWxseSBmb3IgZmJuaWMuIFRoZSBmYm5pYyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSBwaHlzaWNhbCBBU0lDIG5ldHdvcmsgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIG5vIHJlYWNoYWJsZSB2aXJ0dWFsL2VtdWxhdGVkIGRyaXZlcnMgc2V0IHRoZSBuZXcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjA2OTAyNzdmNjdhMjdlNDk5YTBlNjgxNGY5Yjg1YjkxNWUyOTM0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjI6NDE6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaAppbmRleCA2NGI5NThkZjc3NzQ0Li5iYWJhMzQ3MWJmNWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmgKQEAgLTk3NCw2ICYjNDM7OTc0LDcgQEAgZW51bSB7CiAvKiBQVUwgVXNlciBSZWdpc3RlcnMgKi8KICNkZWZpbmUgRkJOSUNfQ1NSX1NUQVJUX1BVTF9VU0VSCTB4MzEwMDAJLyogQ1NSIHNlY3Rpb24gZGVsaW1pdGVyICovCiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRwkweDMxMDNkCQkvKiAweGM0MGY0ICovCiYjNDM7I2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERQlDU1JfQklUKDIwKQogI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gJQ1NSX0JJVCgxOSkKICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0JNRQkJQ1NSX0JJVCgxOCkKICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX1JERV9BVFRSCUNTUl9HRU5NQVNLKDE3LCAxNSkKQEAgLTEyMTUsNiAmIzQzOzEyMTYsMTAgQEAgZW51bSB7CiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19MRU5fTUFTSwlERVNDX0dFTk1BU0soNjMsIDQ4KQogI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRU9NCQlERVNDX0JJVCg0NikKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0FERFJfTUFTSwlERVNDX0dFTk1BU0soNDUsIDMpCiYjNDM7LyogU2V0IHdpdGggRldfQ01QTCB3aGVuIHRoZSBGVyBjb21wbGV0ZWQgYSBkZXNjcmlwdG9yIHdpdGhvdXQgc3VjY2Vzc2Z1bGx5CiYjNDM7ICogcHJvY2Vzc2luZyBpdCAoZS5nLiBhIG1haWxib3ggRE1BIGVycm9yKTsgdGhlIGNvbXBsZXRpb24gaGFzIG5vIHZhbGlkIGRhdGEuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSCURFU0NfQklUKDIpCiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMCURFU0NfQklUKDEpCiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUEwJREVTQ19CSVQoMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYwppbmRleCAzYzQ1NjNjOGY0MDNmLi40NTgxZmQ4YzhlZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYwpAQCAtNTM5LDggJiM0Mzs1MzksOCBAQCBzdGF0aWMgdm9pZCBmYm5pY19kYmdfZndfbWJ4X2Rpc3BsYXkoc3RydWN0IHNlcV9maWxlICpzLAogCS8qIEdlbmVyYXRlIGhlYWRlciAqLwogCXNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyAmIzM0O1J4XG4mIzM0OyA6ICYjMzQ7VHhcbiYjMzQ7KTsKIAotCXNlcV9wcmludGYocywgJiMzNDtSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkXG4mIzM0OywKLQkJICAgbWJ4LSZndDtyZWFkeSwgbWJ4LSZndDtoZWFkLCBtYngtJmd0O3RhaWwpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZCByZXNwX2Vycm9yOiAlbGxkXG4mIzM0OywKJiM0MzsJCSAgIG1ieC0mZ3Q7cmVhZHksIG1ieC0mZ3Q7aGVhZCwgbWJ4LSZndDt0YWlsLCBtYngtJmd0O3Jlc3BfZXJyb3IpOwogCiAJc25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgJiMzNDslM3MgJS00cyAlcyAlLTEycyAlcyAlLTNzICUtMTZzXG4mIzM0OywKIAkJICYjMzQ7SWR4JiMzNDssICYjMzQ7TGVuJiMzNDssICYjMzQ7RSYjMzQ7LCAmIzM0O0FkZHImIzM0OywgJiMzNDtGJiMzNDssICYjMzQ7SCYjMzQ7LCAmIzM0O1JhdyYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMKaW5kZXggMGU0NzA4OGVjNDRiYS4uNDIzZjE3OWM5ZDQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMKQEAgLTIwMjUsNyAmIzQzOzIwMjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0gewogCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTSB8CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfAotCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSywKJiM0MzsJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHwKJiM0MzsJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsCiAJLmdldF9kcnZpbmZvCQkJPSBmYm5pY19nZXRfZHJ2aW5mbywKIAkuZ2V0X3JlZ3NfbGVuCQkJPSBmYm5pY19nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzCQkJPSBmYm5pY19nZXRfcmVncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwppbmRleCAyODNkMjVmYWU3OWU3Li44ZjRhMTk1YmI4ZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCkBAIC02MCw4ICYjNDM7NjAsMTQgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Jlc2V0X2Rlc2NfcmluZyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBtYnhfaWR4KQogCSAqLwogCXN3aXRjaCAobWJ4X2lkeCkgewogCWNhc2UgRkJOSUNfSVBDX01CWF9SWF9JRFg6CiYjNDM7CQkvKiBUaGUgd3JpdGUgcGF0aCBvbmx5IHRlcm1pbmF0ZXMgb3V0c3RhbmRpbmcgcmVxdWVzdHMgd2hlbgomIzQzOwkJICogYm90aCBGTFVTSCBhbmQgRkxVU0hfTU9ERSBhcmUgc2V0LiBXaXRoIEZMVVNIIGFsb25lIHRoZQomIzQzOwkJICogd3JpdGVzIHN0aWxsIG9iZXkgdGhlIGhhbHQgYXNzZXJ0ZWQgYnkgY2xlYXJpbmcgQk1FLCBzbwomIzQzOwkJICogbm90aGluZyBkcmFpbnMgYW5kIEFXX0ZMVVNIX0RPTkUgbmV2ZXIgYXNzZXJ0cy4KJiM0MzsJCSAqLwogCQl3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHLAotCQkgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCk7CiYjNDM7CQkgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8CiYjNDM7CQkgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFKTsKIAkJYnJlYWs7CiAJY2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDoKIAkJd3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRywKQEAgLTI4NSw2ICYjNDM7MjkxLDEyIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3R4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKQogCQlpZiAoIShkZXNjICZhbXA7IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSkKIAkJCWJyZWFrOwogCiYjNDM7CQlpZiAoZGVzYyAmYW1wOyBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7CiYjNDM7CQkJdHhfbWJ4LSZndDtyZXNwX2Vycm9yJiM0MzsmIzQzOzsKJiM0MzsJCQlkZXZfd2FybihmYmQtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7RlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTsKIAogCQloZWFkJiM0MzsmIzQzOzsKQEAgLTE2NjYsNiAmIzQzOzE2NzgsMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiAJCWlmICghKGRlc2MgJmFtcDsgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChkZXNjICZhbXA7IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHsKJiM0MzsJCQlyeF9tYngtJmd0O3Jlc3BfZXJyb3ImIzQzOyYjNDM7OwomIzQzOwkJCWRldl93YXJuKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtGVyByZXBvcnRlZCBhbiBlcnJvciBvbiBhbiBSeCBtYWlsYm94IG1lc3NhZ2U7IGRyb3BwaW5nXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBuZXh0X3BhZ2U7CiYjNDM7CQl9CiYjNDM7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGZiZC0mZ3Q7ZGV2LCByeF9tYngtJmd0O2J1Zl9pbmZvW2hlYWRdLmFkZHIsCiAJCQkJCUZCTklDX1JYX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIApAQCAtMTczNCw2ICYjNDM7MTc1Myw3IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiB7CiAJc3RydWN0IGZibmljX2Z3X21ieCAqdHhfbWJ4ID0gJmFtcDtmYmQtJmd0O21ieFtGQk5JQ19JUENfTUJYX1RYX0lEWF07CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAmIzQzOyAxMCAqIEhaICYjNDM7IDE7CiYjNDM7CXU2NCByZXNwX2Vycm9yOwogCWludCBlcnIsIGk7CiAKIAlkbyB7CkBAIC0xNzY0LDYgJiM0MzsxNzg0LDggQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIAkgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlCiAJICogaW4gdGhlIGNhcGFiaWxpdGllcyByZXF1ZXN0IG1lc3NhZ2UuCiAJICovCiYjNDM7c2VuZF9jYXBfcmVxOgomIzQzOwlyZXNwX2Vycm9yID0gdHhfbWJ4LSZndDtyZXNwX2Vycm9yOwogCWVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTsKIAlpZiAoZXJyKQogCQlnb3RvIGNsZWFuX21ieDsKQEAgLTE3ODIsOCAmIzQzOzE4MDQsMTcgQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIAkJZmJuaWNfbWJ4X3BvbGwoZmJkKTsKIAogCQkvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi8KLQkJaWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpCiYjNDM7CQlpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkgewogCQkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIElmIHRoZSBGVyBjb21wbGV0ZWQgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IHdpdGggYW4gZXJyb3IKJiM0MzsJCSAqIChGV19FUlIpIGl0IHByb2R1Y2VkIG5vIHJlc3BvbnNlOyB0aGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzbwomIzQzOwkJICogcmUtaXNzdWUgdGhlIHJlcXVlc3QgaW5zdGVhZCBvZiB0aW1pbmcgb3V0LgomIzQzOwkJICovCiYjNDM7CQlpZiAodHhfbWJ4LSZndDtyZXNwX2Vycm9yICE9IHJlc3BfZXJyb3IpCiYjNDM7CQkJZ290byBzZW5kX2NhcF9yZXE7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKaW5kZXggZDg0NzIzZTRjZmEzNi4uNWY5OTY5MjQ3ZTMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaApAQCAtMTMsNiAmIzQzOzEzLDcgQEAgc3RydWN0IGZibmljX3Rsdl9tc2c7CiAKIHN0cnVjdCBmYm5pY19md19tYnggewogCXU4IHJlYWR5LCBoZWFkLCB0YWlsOwomIzQzOwl1NjQgcmVzcF9lcnJvcjsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZmJuaWNfdGx2X21zZwkqbXNnOwogCQlkbWFfYWRkcl90CQlhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMKaW5kZXggOGI5YmM5ZThlYTU2Yy4uYzY2OThlMzAwMmExMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jCkBAIC00MzQsNiAmIzQzOzQzNCw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZiZC0mZ3Q7bmV0ZGV2OwomIzQzOwlzdHJ1Y3QgZmJuaWNfbmV0ICpmYm47CiAKIAlpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpCiAJCWdvdG8gbnVsbF91Y19hZGRyOwpAQCAtNDQxLDExICYjNDM7NDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcnRubF9sb2NrKCk7CiAJbmV0ZGV2X2xvY2sobmV0ZGV2KTsKIAomIzQzOwlmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKIAomIzQzOwkvKiBUaGUgSVJRcyBhcmUgYWJvdXQgdG8gYmUgZnJlZWQsIHNvIGRyb3AgdGhlIG5hcGkgdmVjdG9yIGNvdW50ICovCiYjNDM7CWZibi0mZ3Q7bnVtX25hcGkgPSAwOwomIzQzOwogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKIAlydG5sX3VubG9jaygpOwogCkBAIC01MDgsMTYgJiM0Mzs1MTQsMjAgQEAgc3RhdGljIGludCBfX2ZibmljX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJaWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJbmV0ZGV2X2xvY2sobmV0ZGV2KTsKJiM0MzsKIAlmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJLyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi8KIAlmYm5pY19yZXNldF9xdWV1ZXMoZmJuLCBmYm4tJmd0O251bV90eF9xdWV1ZXMsIGZibi0mZ3Q7bnVtX3J4X3F1ZXVlcyk7CiAKLQlydG5sX2xvY2soKTsKLQluZXRkZXZfbG9jayhuZXRkZXYpOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQllcnIgPSBfX2ZibmljX29wZW4oZmJuKTsKJiM0MzsJCS8qIE9uIGZhaWx1cmUgdGhlIHZlY3RvcnMgYXJlIGZyZWVkLCBzbyBkcm9wIHRoZSBjb3VudCAqLwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlmYm4tJmd0O251bV9uYXBpID0gMDsKJiM0MzsJfQogCiAJbmV0ZGV2X3VubG9jayhuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDEyNjgzYjVkMTI1ZTQuLjk3YTFhZGJkOWVhZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC05NDQsNiAmIzQzOzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHsKICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNCUJJVCg2KQogI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTCQlCSVQoNykKICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUCQlCSVQoOSkKIAogLyoqCiAgKiBzdHJ1Y3QgZXRodG9vbF9vcHMgLSBvcHRpb25hbCBuZXRkZXYgb3BlcmF0aW9ucwpAQCAtOTgxLDYgJiM0Mzs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7CiAgKgkgLSBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKCkKICAqCSAtIG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMoKQogICoJIC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaykKJiM0MzsgKgkgLSBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpCiAgKgogICogQGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyL2RldmljZSBpbmZvcm1hdGlvbi4gTW9kZXJuIGRyaXZlcnMgbm8KICAqCWxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmUKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2NvbW1vbi5oIGIvbmV0L2V0aHRvb2wvY29tbW9uLmgKaW5kZXggNGU1MzU2ZTI2ZjQwMC4uYWUzMmU3ZmRiNTYzYyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvY29tbW9uLmgKQEAgLTE2Myw2ICYjNDM7MTYzLDggQEAgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpCiAJCXJldHVybiBvcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUzsKIAljYXNlIEVUSFRPT0xfR0xJTks6CiAJCXJldHVybiBvcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LOwomIzQzOwljYXNlIEVUSFRPT0xfVEVTVDoKJiM0MzsJCXJldHVybiBvcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTeXprYWxsZXIgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpBbHJpZ2h0LCBJIHNlZSBhIGxpc3Qgb2YgZmlsZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY2AsIGFuZCBzbyBvbi4gV2FpdCBhIHNlY29uZC4uLiBgZmJuaWNgISBUaGF0JiMzOTtzIE1ldGEmIzM5O3MgQVNJQyBOSUMgZHJpdmVyLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciwgcmlnaHQ/IEludGVyZXN0aW5nLgoKQnV0IGhvbGQgb24sIHRoZXJlIGFyZSBhbHNvIG1vZGlmaWNhdGlvbnMgdG8gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gVGhhdCYjMzk7cyBhIGJpdCBtb3JlIHNpZ25pZmljYW50LiBJdCBtYWtlcyBtZSB3b25kZXI6IEFyZSB0aGVzZSBjaGFuZ2VzIHNwZWNpZmljIHRvIHRoZSBgZmJuaWNgIGRyaXZlciwgb3IgYXJlIHRoZXkgbW9yZSBnZW5lcmFsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpb2N0bCBoYW5kbGluZyB3b3JrcywgYW5kIHdoZXRoZXIgdGhvc2UgZXRodG9vbCBjaGFuZ2VzIGFyZSBldmVuIHJlYWNoYWJsZSBpbiBhIGJyb2FkZXIgY29udGV4dC4gSXMgYGZibmljYCB0aGUgb25seSBkcml2ZXIgdXRpbGl6aW5nIHRoZW0/IEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgaG93IGBFVEhUT09MX1RFU1RgIGFuZCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9ldGh0b29sL2AuCgpPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYW5vdGhlciBzdWl0YWJsZSB0b29sIHRvIHNlYXJjaCB0aGUgcmVwb3NpdG9yeSBhbmQgZGV0ZXJtaW5lIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyOC1cdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyOTpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMzAtXHQuZ2V0X2RydmluZm9cdFx0XHQ9IGZibmljX2dldF9kcnZpbmZvLFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTQ2LSNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQ3OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RcdFx0QklUKDkpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NDgtXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM4PWV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cdGNhc2UgRVRIVE9PTF9URVNUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTY3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgcGlucG9pbnRpbmcgZXZlcnkgc2luZ2xlIGNhbGwgc2l0ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgc2VlIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nICp3aHkqIHRoZSBmdW5jdGlvbiBleGlzdHMsICp3aGVuKiBpdCYjMzk7cyBuZWVkZWQsIGFuZCwgdWx0aW1hdGVseSwgaWYgaXRzIGJlaGF2aW9yIGlzIGNvcnJlY3Qgb3IgaWYgdGhlcmUgbWF5IGJlIG9wcG9ydHVuaXRpZXMgdG8gc3RyZWFtbGluZSBpdHMgaW1wbGVtZW50YXRpb24gb3IgaXRzIHVzYWdlIGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBEaWdnaW5nIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIGZpbmQgdGhvc2UgY2FsbHMgd2lsbCBnaXZlIG1lIG15IGZpcnN0IGNsdWVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2lsbCBpbmZvcm0gdGhlIGRpcmVjdGlvbiBvZiBteSBuZXh0IHN0ZXBzLiBJJiMzOTttIGhvcGluZyB0aGUgY29kZSBpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWFzaWx5IHVuZGVyc3Rvb2QsIGJ1dCBJIGFtIHJlYWR5IHRvIGRlbHZlIGZ1cnRoZXIgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMjktLyoqXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzA6ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEzMS0gKiBAZGV2OiB0YXJnZXQgZGV2aWNlXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTM4OmV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM5LXtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM1OTE6ICogY292ZXJlZCBieSBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKS9FVEhUT09MX09QX05FRURTX1JUTkxfKi5cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5Mi0gKi9cbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2MTA9X19kZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVx0XHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2MjQ6XHRcdCAgICBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI1LVx0aWYgKG5lZWRfcnRubClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjU2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZXRodG9vbGAmIzM5O3MgSU9DVEwgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMzYxMC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIHB1bGwgdGhhdCBjb2RlIGRpcmVjdGx5IGludG8gbXkgdmlldy4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHNwZWNpZmljIGxvY2F0aW9uIHdpbGwgaG9sZCBzb21lIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGBldGh0b29sYCBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGJlIGRpZ2dpbmcgaW50byB0aGUgSU9DVEwgaGFuZGxpbmcgbG9naWMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgd2l0aGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzYwMDpcdFx0Y2FzZSBFVEhUT09MX1NTRzpcbjM2MDE6XHRcdGNhc2UgRVRIVE9PTF9TVFNPOlxuMzYwMjpcdFx0Y2FzZSBFVEhUT09MX1NHU086XG4zNjAzOlx0XHRjYXNlIEVUSFRPT0xfU0dSTzpcbjM2MDQ6XHRcdFx0cmV0dXJuIHRydWU7XG4zNjA1Olx0XHR9XG4zNjA2Olx0XHRyZXR1cm4gZmFsc2U7XG4zNjA3Olx0fVxuMzYwODpcdFxuMzYwOTpcdHN0YXRpYyBpbnRcbjM2MTA6XHRfX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbjM2MTE6XHRcdCAgICAgIHUzMiBldGhjbWQsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpkZXZsaW5rX3N0YXRlKVxuMzYxMjpcdHtcbjM2MTM6XHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuMzYxNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjM2MTU6XHRcdGJvb2wgbmVlZF9ydG5sO1xuMzYxNjpcdFx0aW50IHJjO1xuMzYxNzpcdFxuMzYxODpcdFx0ZGV2ID0gbmV0ZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLVx1MDAzZWlmcl9uYW1lLCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4zNjE5Olx0XHRpZiAoIWRldilcbjM2MjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zNjIxOlx0XG4zNjIyOlx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxuMzYyMzpcdFx0XHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XG4zNjI0Olx0XHRcdCAgICBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpO1xuMzYyNTpcdFx0aWYgKG5lZWRfcnRubClcbjM2MjY6XHRcdFx0cnRubF9sb2NrKCk7XG4zNjI3Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbjM2Mjg6XHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuMzYyOTpcdFx0ICAgIGRldi1cdTAwM2Vtb3ZpbmdfbnMgfHwgIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpIHtcbjM2MzA6XHRcdFx0cmMgPSAtRU5PREVWO1xuMzYzMTpcdFx0XHRnb3RvIGV4aXRfb3BzX3VubG9jaztcbjM2MzI6XHRcdH1cbjM2MzM6XHRcbjM2MzQ6XHRcdHJjID0gZGV2X2V0aHRvb2xfbG9ja2VkKG5ldCwgZGV2LCB1c2VyYWRkciwgZXRoY21kLCBkZXZsaW5rX3N0YXRlLFxuMzYzNTpcdFx0XHRcdFx0bmVlZF9ydG5sKTtcbjM2MzY6XHRcbjM2Mzc6XHRleGl0X29wc191bmxvY2s6XG4zNjM4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMzYzOTpcdFx0aWYgKG5lZWRfcnRubClcbjM2NDA6XHRcdFx0cnRubF91bmxvY2soKTtcbjM2NDE6XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4zNjQyOlx0XG4zNjQzOlx0XHRyZXR1cm4gcmM7XG4zNjQ0Olx0fVxuMzY0NTpcdFxuMzY0NjpcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zNjQ3Olx0e1xuMzY0ODpcdFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xuMzY0OTpcdFx0dTMyIGV0aGNtZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjI3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgcGFydCB0aGF0IGhhbmRsZXMgYEVUSFRPT0xfVEVTVGAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgZXRodG9vbCBvcGVyYXRpb24gbmVlZHMgdGhlIHJvdXRpbmcvdHJhZmZpYyBjb250cm9sIGxheWVyIChSVE5MKS4gVGhlIGNydWNpYWwgcGFydCBpcyBjaGVja2luZyBgb3BzLSZndDtvcF9uZWVkc19ydG5sYCBhbmQgaWYgaXQgaGFzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoaWNoIGRyaXZlcnMgYWN0dWFsbHkgKnVzZSogYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYD8gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUga2VybmVsIHNvdXJjZSB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBzcGVjaWZpYyBmbGFnLiBMb29rcyBsaWtlIHRoZSBvbmx5IGRyaXZlciB1c2luZyBpdCBpcyBgZmJuaWNgLiBIbW0uLi4KCk5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkuIFdoYXQgZXhhY3RseSAqaXMqIGBmYm5pY2A/IFJpZ2h0LCB0aGF0JiMzOTtzIE1ldGEmIzM5O3MgaG9zdCBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIFBDSSBkcml2ZXIuIFRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGBmYm5pY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgdGhpcyBpcyB0YXJnZXRlZCBmb3IuIFRoZSBLY29uZmlnIHNob3VsZCB0ZWxsIG1lIHdoYXQgc29ydCBvZiBwbGF0Zm9ybXMgb3IgZGV2aWNlcyBhcmUgdXNpbmcgdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgc3BlY2lmaWMgdXNlIGNhc2UgaXMgZm9yIHRoaXMgUlROTCBkZXBlbmRlbmN5LCB3aGljaCBpcyBvbmx5IHNldCBmb3IgdGVzdCBvcGVyYXRpb25zIGluIGBmYm5pY2AuIFRoaXMgY291bGQgZ2l2ZSBzb21lIGluc2lnaHRzIHRvIHNvbWUgdW5pcXVlIGhhcmR3YXJlIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZCTklDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyMDpjb25maWcgRkJOSUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O01ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZTogRHJpdmVycy9OZXQvRXRoZXJuZXQvTWV0YSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgYSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEV0aGVybmV0IGRyaXZlciBzdWJzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvYCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbiB0byBpdHMgcHVycG9zZS4gVGhpcyBsaWtlbHkgaXNuJiMzOTt0IGEgKnNwZWNpZmljKiBkZXZpY2UgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24sIGJ1dCBtb3JlIGxpa2VseSBhIHRvcC1sZXZlbCwgb3JnYW5pemF0aW9uYWwgS2NvbmZpZyBmaWxlLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgb3ZlcmFyY2hpbmcgZnJhbWV3b3JrIGZvciBFdGhlcm5ldCBzdXBwb3J0LCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhpbmdzIGxpa2U6CgoqICAgKipPcHRpb25zIGZvciBFbmFibGluZy9EaXNhYmxpbmcgdGhlIEV0aGVybmV0IFN1YnN5c3RlbToqKiBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIGZ1bmN0aW9uLCBlbnN1cmluZyB0aGF0IHRoZSBlbnRpcmUgY2F0ZWdvcnkgb2YgRXRoZXJuZXQgZHJpdmVycyBhbmQgdGhlIGFzc29jaWF0ZWQgaW5mcmFzdHJ1Y3R1cmUgY2FuIGJlIGJyb3VnaHQgaW50byB0aGUga2VybmVsIGJ1aWxkIG9yIGV4Y2x1ZGVkLiBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gYENPTkZJR19FVEhFUk5FVGAgb3B0aW9uIGRlY2xhcmVkIGhlcmUsIHBlcmhhcHMgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzLgoqICAgKipBZ2dyZWdhdGlvbiBvZiBEZXBlbmRlbmNpZXM6KiogQmVjYXVzZSB0aGUgZHJpdmVycyBhcmUgbGlrZWx5IHZlcnkgZGl2ZXJzZSwgdGhpcyBpcyB3aGVyZSBkZXBlbmRlbmNpZXMgYW5kIHByZXJlcXVpc2l0ZXMgYXJlIGRlZmluZWQgdG8gcHJvdmlkZSBhIHVzZWZ1bCB1c2VyIGV4cGVyaWVuY2UuCiogICAqKk1ldGEtQ29uZmlndXJhdGlvbjoqKiBPcHRpb25zIGFmZmVjdGluZyB0aGUgYnJvYWRlciBFdGhlcm5ldCBsYW5kc2NhcGUsIG5vdCB0aWVkIHRvIGEgc2luZ2xlIHBoeXNpY2FsIGRldmljZSwgYXJlIGRlZmluZWQgaGVyZS4gVGhpcyBtaWdodCBpbmNsdWRlIGNob2ljZXMgYWJvdXQgd2hpY2ggRXRoZXJuZXQgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQsIHdoZXRoZXIgc3BlY2lmaWMgZmVhdHVyZXMgKGxpa2UgVkxBTiBzdXBwb3J0LCBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQpIGFyZSBidWlsdCBpbiwgYW5kIHBlcmhhcHMgZXZlbiBzZWxlY3Rpb24gb2YgYmFzaWMsIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgRXRoZXJuZXQgZHJpdmVycyBkZXBlbmQgb24uIEl0IGNvdWxkIGFsc28gcHJvdmlkZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgYmV0d2VlbiBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdGllcyAoZS5nLiBjaG9pY2Ugb2YgZGlmZmVyZW50IFBIWSBkcml2ZXJzKS4KKiAgICoqT3JnYW5pemF0aW9uIGFuZCBTdHJ1Y3R1cmU6KiogVGhpcyBpcyBhbHNvIGEgZ29vZCBwbGFjZSB0byBjcmVhdGUgc3VibWVudXMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB0aGF0IHByb3ZpZGUgYSBsb2dpY2FsIGdyb3VwaW5nIGZvciBzcGVjaWZpYyB0eXBlcyBvZiBFdGhlcm5ldCBkZXZpY2VzLiBUaGlzIGhlbHBzIHRoZSB1c2VyIGJ5IHByb3ZpZGluZyBhbiBvcmdhbml6ZWQgdmlldyBvZiBhbGwgYXZhaWxhYmxlIEV0aGVybmV0IG9wdGlvbnMuIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciBmb3IgdGhlIHBlcnNvbiBjb25maWd1cmluZyB0aGUga2VybmVsIHRvIGxvY2F0ZSBvcHRpb25zIG9mIGludGVyZXN0LgoqICAgKipEcml2ZXIgU2VsZWN0aW9uOioqIFRoaXMgS2NvbmZpZyBjb3VsZCBhbHNvIGluY2x1ZGUgb3B0aW9ucyB0byBzZWxlY3QgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBkcml2ZXJzLiBQZXJoYXBzIGEgZ2VuZXJpYyBkcml2ZXIgY2FuIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQsIG9yIHNwZWNpZmljIGRyaXZlcnMgYmFzZWQgb24gZGV2aWNlIG1hbnVmYWN0dXJlcnMgY2FuIGJlIHNlbGVjdGVkLgoqICAgKipEZXBlbmRlbmN5IG9uIENvcmUgTmV0d29ya2luZzoqKiBBdCB0aGUgdmVyeSBsZWFzdCwgaXQmIzM5O3MgZ29pbmcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFzIGEgcHJlcmVxdWlzaXRlIGZvciBhbnkgRXRoZXJuZXQgZHJpdmVyIHRvIGZ1bmN0aW9uLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYGNvbmZpZ2AgZGVjbGFyYXRpb25zLCBgbWVudWNvbmZpZ2AgYmxvY2tzIChhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyksIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGBkZWZhdWx0YCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgaGVscGAgdGV4dCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIG9wdGlvbnMuIFRoZSBmaWxlIHdpbGwgdGVsbCB0aGUgdXNlciBob3cgdGhlIEV0aGVybmV0IHN1YnN5c3RlbSBmaXRzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgc3lzdGVtLCB3aGF0IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBtZXQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGRvY3VtZW50YXRpb24sIGVzc2VudGlhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ldGEgUGxhdGZvcm1zIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxuICAgNzpcdFx0Ym9vbCBcJiMzNDtNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBkZXNpZ25lZCBieSBNZXRhLCBzYXkgWS5cbiAgMTE6XHRcdCAgVGhhdCYjMzk7cyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE0Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTU6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBNZXRhIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxNjpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE3Olx0XG4gIDE4Olx0aWYgTkVUX1ZFTkRPUl9NRVRBXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEZCTklDXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8IENPTVBJTEVfVEVTVFxuICAyMzpcdFx0ZGVwZW5kcyBvbiAhUzM5MFxuICAyNDpcdFx0ZGVwZW5kcyBvbiBNQVhfU0tCX0ZSQUdTIFx1MDAzYyAyMlxuICAyNTpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDI2Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDI3Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMjg6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjk6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICAzMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMzE6XHRcdHNlbGVjdCBQTERNRldcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cbiAgMzQ6XHRcbiAgMzU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAzNjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuICAzNzpcdFxuICAzODpcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBRdWVyeSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBmaWJlci1vcHRpYyBuZXR3b3JrIGludGVyZmFjZSBjYXJkcyAoZmJuaWMpIOKAkyBlc3NlbnRpYWxseSwgY29uZmlybWluZyB0aGF0IHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCByZXNwb25kaW5nLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggYXQgdGhpcyBwb2ludCBpcyB0byBjaGVjayBkZXZpY2UgSURzIGFuZCBpbml0aWF0ZSBhIHByb2JlLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB1dGlsaXppbmcgYSBzcGVjaWZpYyBjb21tYW5kIG9yIHV0aWxpdHkgdGFpbG9yZWQgdG8gdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgcGVyaGFwcyBgbHNwY2lgLCBgbHNod2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiBjcm9zcy1yZWZlcmVuY2luZyB0aGUgb3V0cHV0IHdpdGggZXhwZWN0ZWQgb3Iga25vd24gZmJuaWMgaWRlbnRpZmllcnMuIEEgJiMzOTtwcm9iZSYjMzk7LCBpbiB0aGlzIGNvbnRleHQsIHN1Z2dlc3RzIGEgYmFzaWMgaGFyZHdhcmUtbGV2ZWwgdGVzdCB0byBjb25maXJtIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYWxsb3dzIG1lIHRvIGltbWVkaWF0ZWx5IGlzb2xhdGUgaGFyZHdhcmUtbGV2ZWwgaXNzdWVzLCByYXRoZXIgdGhhbiB3YXN0aW5nIHRpbWUgY2hhc2luZyBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIGVycm9ycyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IGV2ZW4gYmVpbmcgcmVjb2duaXplZC4gVGhpcyBwcm92aWRlcyB0aGUgbW9zdCBmb3VuZGF0aW9uYWwgaW5mb3JtYXRpb24gdG8gd29yayB3aXRoLCB0byBtb3ZlIGZvcndhcmQgd2l0aCBkaWFnbm9zdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZC4qZmJuaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYz0yNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX2luZm8gKmZibmljX2luZm9fdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MzA6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZibmljX3BjaV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMzEtXHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBGQk5JQ19BU0lDLCBmYm5pY19ib2FyZF9hc2ljKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZCTklDIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGBmYm5pY2AgcGFydCBqdW1wcyBvdXQuIFJpZ2h0IGF3YXksIEkga25vdyBgZmJuaWNgIGlzIE1ldGEmIzM5O3MgcGh5c2ljYWwgQVNJQyBuZXR3b3JrIGludGVyZmFjZSBjYXJkIOKAkyBlc3NlbnRpYWxseSwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMuIFRoZSBraWNrZXIgaXMgdGhhdCBpdCBuZWVkcyBhY3R1YWwgQVNJQyBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIHBsYXkgbmljZSBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIFRoYXQmIzM5O3MgYSBtYWpvciByZWQgZmxhZyBmb3IgZnV6emluZyBmZWFzaWJpbGl0eS4KCk5vdywgbGV0JiMzOTtzIGNhcmVmdWxseSBnbyBvdmVyIHRoZSBkaWZmIGFuZCBtYWtlIHN1cmU6CgpUaGUgZG9jdW1lbnRhdGlvbiBJJiMzOTttIHJlYWRpbmcgbWVudGlvbnMgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0Oy4gVGhpcyBjb3ZlcnMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIGFuIEFTSUMuIEdpdmVuIHRoYXQsIGBmYm5pY2AgaXMgcHJlY2lzZWx5IHRoZSB0eXBlIG9mIGhhcmR3YXJlIHRoZSBkb2N1bWVudGF0aW9uIGlzIHNheWluZyAqbm90KiB0byBmdXp6IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGVtdWxhdGVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNoYW5nZXMuIFRoZSBkaWZmIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYC4gSG1tLCBhbGwgb2YgdGhlc2UgYXJlIGRlZGljYXRlZCB0byBgZmJuaWNgLCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlbiwgdGhlcmUmIzM5O3MgYSBjb3VwbGUgb2YgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGFuZCBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGNoYW5nZSBpbiBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGludHJvZHVjZXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gTG9va3MgbGlrZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmVlZGluZyB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXRsaW5rKSB3aGVuIGRlYWxpbmcgd2l0aCBgbmV0aWZfb3BlbigpYCBhbmQgYG5ldGlmX2Nsb3NlKClgIG9wZXJhdGlvbnMuIEluIGBuZXQvZXRodG9vbC9jb21tb24uaGAsIHRoZXJlJiMzOTtzIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB0aGF0IGNoZWNrcyB0aGlzIGZsYWcsIHNwZWNpZmljYWxseSB3aGVuIGBldGhjbWRgIGlzIGBFVEhUT09MX1RFU1RgLgoKQnV0IHdhaXQsIGlzIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgICpldmVyKiBjYWxsZWQgZm9yIGEgdmlydHVhbCBvciBlbXVsYXRlZCBuZXRkZXY/IFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIGl0ICppcyosIHRoZW4gbWF5YmUgdGhpcyBwYXRjaCBpcyByZWxldmFudCB0byBtb3JlIHRoYW4ganVzdCB0aGUgYGZibmljYCBkcml2ZXIuIFRpbWUgdG8gY2hlY2shIEkgZGlkIGEgZ3JlcCBmb3IgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gVGhlIHJlc3VsdHMgYXJlIGluLiBBbmQgYXMgSSBzdXNwZWN0ZWQsIG9ubHkgYGZibmljX2V0aHRvb2wuY2Agc2V0cyB0aGlzIGZsYWcuIE5vIG90aGVyIGRyaXZlciBkb2VzIGluIHRoZSBlbnRpcmUga2VybmVsLgoKU28sIGZvciBldmVyeSBvdGhlciBuZXQgZGV2aWNlLCB3aGVuIGBldGhjbWRgIGlzIGBFVEhUT09MX1RFU1RgLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB3aWxsIGNoZWNrIGlmIHRoYXQgZGV2aWNlJiMzOTtzIGBvcHMtJmd0O29wX25lZWRzX3J0bmxgIGhhcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHNldC4gU2luY2Ugb3RoZXIgZHJpdmVycyYjMzk7IGBvcHMtJmd0O29wX25lZWRzX3J0bmxgIGlzIHplcm8sIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgICphbHdheXMqIHJldHVybnMgYGZhbHNlYC4KCk5vdywgYmVmb3JlIHRoaXMgcGF0Y2gsIHdoYXQgZGlkIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHJldHVybiB3aGVuIGBldGhjbWRgIHdhcyBgRVRIVE9PTF9URVNUYD8gR290dGEgY2hlY2sgdGhlIGhpc3RvcnkgYXJvdW5kIGxpbmUgMTYwIG9mIGBuZXQvZXRodG9vbC9jb21tb24uaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvY29tbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4gMTQxOlx0XG4gMTQyOlx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuIDE0MzpcdFx0Y2FzZSBFVEhUT09MX0dMSU5LU0VUVElOR1M6XG4gMTQ0Olx0XHRjYXNlIEVUSFRPT0xfR1NFVDpcbiAxNDU6XHRcdGNhc2UgRVRIVE9PTF9TTElOS1NFVFRJTkdTOlxuIDE0NjpcdFx0Y2FzZSBFVEhUT09MX1NTRVQ6XG4gMTQ3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcbiAxNDg6XHRcdGNhc2UgRVRIVE9PTF9TUEZMQUdTOlxuIDE0OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTO1xuIDE1MDpcdFx0Y2FzZSBFVEhUT09MX1NSSU5HUEFSQU06XG4gMTUxOlx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU07XG4gMTUyOlx0XHRjYXNlIEVUSFRPT0xfU0NIQU5ORUxTOlxuIDE1MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG4gMTU0Olx0XHRjYXNlIEVUSFRPT0xfU0NPQUxFU0NFOlxuIDE1NTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XG4gMTU2Olx0XHRjYXNlIEVUSFRPT0xfR1BBVVNFUEFSQU06XG4gMTU3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xuIDE1ODpcdFx0Y2FzZSBFVEhUT09MX1NQQVVTRVBBUkFNOlxuIDE1OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcbiAxNjA6XHRcdGNhc2UgRVRIVE9PTF9TUlNTSDpcbiAxNjE6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSDpcbiAxNjI6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxuIDE2MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG4gMTY0Olx0XHRjYXNlIEVUSFRPT0xfR0xJTks6XG4gMTY1Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xuIDE2NjpcdFx0Y2FzZSBFVEhUT09MX1RFU1Q6XG4gMTY3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gMTY4Olx0XHR9XG4gMTY5Olx0XHRyZXR1cm4gZmFsc2U7XG4gMTcwOlx0fVxuIDE3MTpcdFxuIDE3MjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19FVEhUT09MX05FVExJTkspXG4gMTczOlx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XG4gMTc0Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV0aHRvb2wgUGF0Y2gqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbCB3aXRoIHRoaXMgZXRodG9vbCBwYXRjaC4gQmVmb3JlIHRoaXMgdXBkYXRlLCB0aGUgYEVUSFRPT0xfVEVTVGAgaW9jdGwgY2FsbCB3YXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5IHdpdGhpbiB0aGUgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpYCBmdW5jdGlvbiYjMzk7cyBzd2l0Y2ggc3RhdGVtZW50LiBJdCBqdXN0IHNsaXBwZWQgdGhyb3VnaCBhbmQgcmV0dXJuZWQgYGZhbHNlYCwgd2hpY2ggaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBOb3csIHdpdGggdGhlIHBhdGNoLCB0aGUgY29kZSBmaXJzdCBjaGVja3MgaWYgdGhlIGRyaXZlciBleHBsaWNpdGx5ICpkb2VzbiYjMzk7dCogcmVxdWlyZSBSVE5MIGZvciB0aGUgdGVzdCBvcGVyYXRpb24gYnkgY2hlY2tpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gSWYgaXQgKmRvZXNuJiMzOTt0KiB0aGVuIGl0IGZhbGxzIHRocm91Z2ggdG8gY2hlY2tpbmcgYG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdoaWNoIGVmZmVjdGl2ZWx5IGV2YWx1YXRlcyB0byBgZmFsc2VgIGJlY2F1c2Ugb2YgdGhlIGJpdG1hc2ssIG1lYW5pbmcgUlROTCBpcyBub3QgYWNxdWlyZWQuCgpUaGUgb25seSBkcml2ZXIgSSBjYW4gc2VlIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHNldCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGlzIHRoZSBgZmJuaWNgIGRyaXZlciwgYW5kIHRoYXQmIzM5O3MgYSBwaHlzaWNhbCBBU0lDIE5JQyBkcml2ZXIuIFNvLCB3aXRoIHRoaXMgcGF0Y2gsIHRoZSBgRVRIVE9PTF9URVNUYCBjYWxsIGZvciBgZmJuaWNgIHdpbGwgY29ycmVjdGx5IGdyYWIgdGhlIGBydG5sX2xvY2tgIGJlZm9yZSBleGVjdXRpbmcgdGhlIGBzZWxmX3Rlc3RgIG9wZXJhdGlvbiwgd2hpY2ggaXQgbmVlZHMgYmVjYXVzZSB0aGUgYGZibmljYCBzZWxmLXRlc3Qgb3BzIGFyZSBSVE5MLXByb3RlY3RlZC4gTWFrZXMgc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBubyB2aXJ0dWFsIGRldmljZXMgYXJlIGltcGFjdGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlYmFzZSB0byBzZWUgaWYgYW55IG9mIHRoZSB2aXJ0dWFsIGRldmljZXPigJR0dW4sIHRhcCwgZHVtbXksIHZldGgsIGxvb3BiYWNrLCB2aXJ0aW9fbmV0LCB0aGUgdXN1YWwgc3VzcGVjdHPigJRhcmUgc2V0dGluZyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFueXdoZXJlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGluIHRob3NlIGVudmlyb25tZW50cy4gSSYjMzk7bGwgc2VhcmNoIGZvciBgb3BfbmVlZHNfcnRubGAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcF9uZWVkc19ydG5sJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXYtZmVhdHVyZXMucnN0PTgxPW9wdCBiYWNrIGludG8gcnRubF9sb2NrIGJ5IHNldHRpbmcgdGhlIG1hdGNoaW5nIEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdDo4MjpiaXQgaW4gYGBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubGBgLiBUaGUgZXRodG9vbCBjb3JlIHRoZW4ga2VlcHNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXYtZmVhdHVyZXMucnN0LTgzLXJ0bmxfbG9jayBoZWxkIGFjcm9zcyB0aG9zZSBTRVQgY2FsbGJhY2tzIHNvIHRoZSBjb250cmFjdCBhYm92ZSBzdGlsbFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zNzg9aXMgaGVsZCBhcm91bmQgc3BlY2lmaWMgb3BlcmF0aW9ucyAoYm90aCBTRVQgYW5kIEdFVCkgYnkgc2V0dGluZ1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjM3OTphcHByb3ByaWF0ZSBiaXRzIGluIGBgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxgYCAoaWYgdGhlIG5lY2Vzc2FyeVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTM4MC1gYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYGAgYml0IGRvZXNuJiMzOTt0IGV4aXN0LCBqdXN0IGFkZCBpdCkuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczMi1cdC5yeGZoX3ByaXZfc2l6ZVx0XHRcdD0gc2l6ZW9mKHN0cnVjdCBibnh0X3Jzc19jdHgpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYzo1NzMzOlx0Lm9wX25lZWRzX3J0bmxcdFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYy01NzM0LVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9OTgyPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBndmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk4NS1cdFx0XHRcdCBFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2Olx0Lm9wX25lZWRzX3J0bmwgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODctXHRcdFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jPTE4NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpYXZmX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMtMTg1Ny1cdC5zdXBwb3J0ZWRfaW5wdXRfeGZybVx0PSBSWEhfWEZSTV9TWU1fWE9SLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYzoxODU4Olx0Lm9wX25lZWRzX3J0bmxcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jLTE4NTktXHQuZ2V0X2RydmluZm9cdFx0PSBpYXZmX2dldF9kcnZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcxNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzIxLVx0LnJ4ZmhfbWF4X251bV9jb250ZXh0c1x0PSBNTFg1RV9NQVhfTlVNX1JTUyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyMjpcdC5vcF9uZWVkc19ydG5sXHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MjMtXHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfcmVwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYy00MjAtXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jOjQyMTpcdC5vcF9uZWVkc19ydG5sXHQgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQyMi1cdFx0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jPTI4ND1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWlfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yODctXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyODg6XHQub3BfbmVlZHNfcnRubFx0ICAgID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTI4OS1cdFx0XHQgICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0zMTI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX3BrZXlfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjMxMzpcdC5vcF9uZWVkc19ydG5sXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTMxNC1cdC5nZXRfZHJ2aW5mbyAgICAgICAgPSBtbHg1aV9nZXRfZHJ2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4c3dfc3BfcG9ydF9ldGh0b29sX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY0LVx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZFx0PSB0cnVlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jOjEyNjU6XHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY2LVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyMi1cdC5yeGZoX21heF9udW1fY29udGV4dHNcdFx0PSBGQk5JQ19SUENfUlNTX1RCTF9DT1VOVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjM6XHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDI0LVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTSB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmM9ODYzPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jLTg3MC1cdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkVfVFgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzE6XHQub3BfbmVlZHNfcnRubFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMtODcyLVx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYz0yMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuc2ltX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjExLVx0XHRcdFx0XHQgIEVUSFRPT0xfUklOR19VU0VfSERTX1RIUlMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jOjIxMjpcdC5vcF9uZWVkc19ydG5sXHRcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTMtXHQuZ2V0X3BhdXNlX3N0YXRzXHQgICAgICAgID0gbnNpbV9nZXRfcGF1c2Vfc3RhdHMsXG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg9OTIzPXN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05MzMtXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5MzQ6LyogQml0cyBmb3IgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTkzNS0gKiBMSU5LU0VUVElOR1MgY292ZXIgYSBudW1iZXIgb2YgY29tbWFuZHMsIGJ1dCBpbiBtb3N0IGNhc2VzIHdlIHdhbnQgdG8ga2VlcFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3NC0gKiBAc3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM6IGJpdGZpZWxkIG9mIHN1cHBvcnRlZCBod3RzdGFtcCBxdWFsaWZpZXIuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NzU6ICogQG9wX25lZWRzX3J0bmw6IG1hc2sgb2YgJUVUSFRPT0xfT1BfTkVFRFNfUlROTF8qIGJpdHMuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NzYtICpcdEZvciB1c2Ugd2l0aCBvcHMtbG9ja2VkIGRyaXZlcnMgKGlnbm9yZWQgb3RoZXJ3aXNlKS4gU2VsZWN0cyB3aGljaFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTEtICogdGhlIGRyaXZlciBvcHRzIGluIHZpYSB0aGUgbWF0Y2hpbmcgYGBFVEhUT09MX09QX05FRURTX1JUTkxfKmBgIGJpdFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTE5MjogKiBpbiBAb3BfbmVlZHNfcnRubC5cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTMtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0xMjAyPXN0cnVjdCBldGh0b29sX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTIxNC1cdHUzMlx0c3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM7XG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMjE1Olx0dTMyXHRvcF9uZWVkc19ydG5sO1xuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTIxNi1cdHZvaWRcdCgqZ2V0X2RydmluZm8pKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9ODE9Ym9vbCBfX2V0aHRvb2xfZGV2X21tX3N1cHBvcnRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC04OC0gKiBSZXR1cm46IHRydWUgaWYgQGNtZCBpcyBhIGNvbW1hbmQgZm9yIHdoaWNoIEBkZXYgaGFzIG9wdGVkLWluIHRvXG5uZXQvZXRodG9vbC9jb21tb24uaDo4OTogKiBrZWVwaW5nIHJ0bmxfbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbCAodmlhIG9wX25lZWRzX3J0bmwpLlxubmV0L2V0aHRvb2wvY29tbW9uLmgtOTAtICovXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9OTI9ZXRodG9vbF9ubF9tc2dfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjbWQpXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTAwLVx0Y2FzZSBFVEhUT09MX01TR19MSU5LTU9ERVNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAxOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDItXHRjYXNlIEVUSFRPT0xfTVNHX1BSSVZGTEFHU19TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMDM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDQtXHRjYXNlIEVUSFRPT0xfTVNHX1JJTkdTX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwNi1cdGNhc2UgRVRIVE9PTF9NU0dfQ0hBTk5FTFNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDgtXHRjYXNlIEVUSFRPT0xfTVNHX0NPQUxFU0NFX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwOTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEwLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTE6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEyLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE0LVx0Y2FzZSBFVEhUT09MX01TR19SU1NfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTE1Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTYtXHRjYXNlIEVUSFRPT0xfTVNHX0xJTktTVEFURV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTc6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE4LVx0Y2FzZSBFVEhUT09MX01TR19UU0NPTkZJR19HRVQ6XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM0LSAqIFJldHVybjogdHJ1ZSBpZiBAZXRoY21kIGlzIGEgY29tbWFuZCBmb3Igd2hpY2ggQGRldiBoYXMgb3B0ZWQtaW4gdG9cbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzNTogKiBrZWVwaW5nIHJ0bmxfbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbCAodmlhIG9wX25lZWRzX3J0bmwpLlxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM2LSAqL1xuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDYtXHRjYXNlIEVUSFRPT0xfU1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE0NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTQ4LVx0Y2FzZSBFVEhUT09MX1NQRkxBR1M6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNDk6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTAtXHRjYXNlIEVUSFRPT0xfU1JJTkdQQVJBTTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1MTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Mi1cdGNhc2UgRVRIVE9PTF9TQ0hBTk5FTFM6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUztcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1NC1cdGNhc2UgRVRIVE9PTF9TQ09BTEVTQ0U6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTU6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Ni1cdGNhc2UgRVRIVE9PTF9HUEFVU0VQQVJBTTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR1BBVVNFUEFSQU07XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTgtXHRjYXNlIEVUSFRPT0xfU1BBVVNFUEFSQU06XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTk6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTYwLVx0Y2FzZSBFVEhUT09MX1NSU1NIOlxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Mi1cdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTYzOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjQtXHRjYXNlIEVUSFRPT0xfR0xJTks6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjU6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY2LVx0Y2FzZSBFVEhUT09MX1RFU1Q6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDY1CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvKmAgZGlyZWN0b3J5LiBBaCwgdGhhdCYjMzk7cyB0aGUgZmJuaWMgZHJpdmVyIOKAkyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS4gSXQmIzM5O3MgYSBQQ0kgZHJpdmVyIGZvciB0aGVpciBwaHlzaWNhbCBNZXRhIEFTSUMgTklDcy4gQW5kIHJpZ2h0IGF3YXksIGEgcmVkIGZsYWcg4oCTIHRoaXMgaGFyZHdhcmUgKmNhbiYjMzk7dCogYmUgZW11bGF0ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY29uc3RyYWludC4KCk5leHQsIEkgc2VlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gVGhleSYjMzk7cmUgYWRkaW5nIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdoaWNoIGlzIEJJVCg5KSwgYW5kIHVwZGF0aW5nIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHRvIGNoZWNrIGZvciB0aGlzIGZsYWcgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYEVUSFRPT0xfVEVTVGAgY2FzZS4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogbm8gZHJpdmVycyB0aGF0IHdlIGNhbiBhY3R1YWxseSAqcmVhY2gqIG9yIGVtdWxhdGUg4oCTIHRoZSB0eXBpY2FsIFFFTVUvR0NFIGRldmljZXMg4oCTIGFyZSBzZXR0aW5nIHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnLiBPbmx5IHRoZSBmYm5pYyBkcml2ZXIgc2V0cyBpdC4gU28sIGVzc2VudGlhbGx5LCB0aGlzIGNoYW5nZSBoYXMgbm8gb3BlcmF0aW9uYWwgaW1wYWN0IG9uIGFueSByZWFjaGFibGUgZGV2aWNlLiBJdCYjMzk7cyBqdXN0IGdvaW5nIHRvIHJldHVybiAwL2ZhbHNlLCBzYW1lIGFzIGJlZm9yZSwgZXZlcnl3aGVyZSBleGNlcHQgb24gdGhlIGZibmljIGhhcmR3YXJlLCB3aGljaCB3ZSBjYW4mIzM5O3QgdGVzdCBhbnl3YXkuIEFuZCB0aGUgZmJuaWMgZHJpdmVyICppdHNlbGYqIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEFTSUMuCgpOb3csIGNvbnNpZGVyaW5nIHRoYXQsIGFuZCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBkZWZpbml0aW9uIG9mIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSAod2hpY2ggaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMgbGlrZSBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSwgZXRjLiksIGFsbCBvZiB3aGljaCByZXF1aXJlIGFjdHVhbCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gUUVNVSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuCgpXb3J0aEZ1enppbmc/IE5vLiBGb2N1c1N5bWJvbHM/IEVtcHR5LiBFbmFibGVDb25maWdzPyBFbXB0eS4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGp1c3QgdG8gYmUgc3VyZSwgYW5kIHRoZW4gZm9ybXVsYXRlIGEgY29uY2lzZSwgcHJlY2lzZSBSZWFzb25pbmcuIFRoZW4sIEkmIzM5O2xsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSAoZmJuaWMpIGRyaXZlciBhbmQgYWRkcyB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyB0byB0aGUgY29yZSBldGh0b29sIGluZnJhc3RydWN0dXJlIHNwZWNpZmljYWxseSBmb3IgZmJuaWMuIFRoZSBmYm5pYyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSBwaHlzaWNhbCBBU0lDIG5ldHdvcmsgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIG5vIHJlYWNoYWJsZSB2aXJ0dWFsL2VtdWxhdGVkIGRyaXZlcnMgc2V0IHRoZSBuZXcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NDguOTQzMjA4MDcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMTIxMzI2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UgKGZibmljKSBkcml2ZXIgYW5kIGFkZHMgdGhlIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcgdG8gdGhlIGNvcmUgZXRodG9vbCBpbmZyYXN0cnVjdHVyZSBzcGVjaWZpY2FsbHkgZm9yIGZibmljLiBUaGUgZmJuaWMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkcml2ZXIgZm9yIE1ldGEgcGh5c2ljYWwgQVNJQyBuZXR3b3JrIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCBubyByZWFjaGFibGUgdmlydHVhbC9lbXVsYXRlZCBkcml2ZXJzIHNldCB0aGUgbmV3IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NDguOTQzMjE1MDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzNDU0NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjA2OTAyNzdmNjdhMjdlNDk5YTBlNjgxNGY5Yjg1YjkxNWUyOTM0OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIyOjQxOjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XFxuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEZCTklDX0NTUl9TVEFSVF9QVUxfVVNFUlxcdDB4MzEwMDBcXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdcXHQweDMxMDNkXFx0XFx0LyogMHhjNDBmNCAqL1xcbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXFx0Q1NSX0JJVCgyMClcXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcXHRDU1JfQklUKDE5KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19CTUVcXHRcXHRDU1JfQklUKDE4KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19SREVfQVRUUlxcdENTUl9HRU5NQVNLKDE3LCAxNSlcXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19MRU5fTUFTS1xcdERFU0NfR0VOTUFTSyg2MywgNDgpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVxcdFxcdERFU0NfQklUKDQ2KVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcXHRERVNDX0dFTk1BU0soNDUsIDMpXFxuKy8qIFNldCB3aXRoIEZXX0NNUEwgd2hlbiB0aGUgRlcgY29tcGxldGVkIGEgZGVzY3JpcHRvciB3aXRob3V0IHN1Y2Nlc3NmdWxseVxcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cXG4rICovXFxuKyNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUlxcdERFU0NfQklUKDIpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcXHRERVNDX0JJVCgxKVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcXHRERVNDX0JJVCgwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjQ1ODFmZDhjOGVkZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbkBAIC01MzksOCArNTM5LDggQEAgc3RhdGljIHZvaWQgZmJuaWNfZGJnX2Z3X21ieF9kaXNwbGF5KHN0cnVjdCBzZXFfZmlsZSAqcyxcXG4gXFx0LyogR2VuZXJhdGUgaGVhZGVyICovXFxuIFxcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcXFwiUnhcXFxcblxcXCIgOiBcXFwiVHhcXFxcblxcXCIpO1xcbiBcXG4tXFx0c2VxX3ByaW50ZihzLCBcXFwiUmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgbWJ4LVxcdTAwM2VyZWFkeSwgbWJ4LVxcdTAwM2VoZWFkLCBtYngtXFx1MDAzZXRhaWwpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbGRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIG1ieC1cXHUwMDNlcmVhZHksIG1ieC1cXHUwMDNlaGVhZCwgbWJ4LVxcdTAwM2V0YWlsLCBtYngtXFx1MDAzZXJlc3BfZXJyb3IpO1xcbiBcXG4gXFx0c25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgXFxcIiUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXFxcblxcXCIsXFxuIFxcdFxcdCBcXFwiSWR4XFxcIiwgXFxcIkxlblxcXCIsIFxcXCJFXFxcIiwgXFxcIkFkZHJcXFwiLCBcXFwiRlxcXCIsIFxcXCJIXFxcIiwgXFxcIlJhd1xcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuaW5kZXggMGU0NzA4OGVjNDRiYS4uNDIzZjE3OWM5ZDQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuQEAgLTIwMjUsNyArMjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuIFxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbitcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXFxuIFxcdC5nZXRfZHJ2aW5mb1xcdFxcdFxcdD0gZmJuaWNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfcmVnc19sZW5cXHRcXHRcXHQ9IGZibmljX2dldF9yZWdzX2xlbixcXG4gXFx0LmdldF9yZWdzXFx0XFx0XFx0PSBmYm5pY19nZXRfcmVncyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uOGY0YTE5NWJiOGVkMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNjAsOCArNjAsMTQgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Jlc2V0X2Rlc2NfcmluZyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBtYnhfaWR4KVxcbiBcXHQgKi9cXG4gXFx0c3dpdGNoIChtYnhfaWR4KSB7XFxuIFxcdGNhc2UgRkJOSUNfSVBDX01CWF9SWF9JRFg6XFxuK1xcdFxcdC8qIFRoZSB3cml0ZSBwYXRoIG9ubHkgdGVybWluYXRlcyBvdXRzdGFuZGluZyByZXF1ZXN0cyB3aGVuXFxuK1xcdFxcdCAqIGJvdGggRkxVU0ggYW5kIEZMVVNIX01PREUgYXJlIHNldC4gV2l0aCBGTFVTSCBhbG9uZSB0aGVcXG4rXFx0XFx0ICogd3JpdGVzIHN0aWxsIG9iZXkgdGhlIGhhbHQgYXNzZXJ0ZWQgYnkgY2xlYXJpbmcgQk1FLCBzb1xcbitcXHRcXHQgKiBub3RoaW5nIGRyYWlucyBhbmQgQVdfRkxVU0hfRE9ORSBuZXZlciBhc3NlcnRzLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRyxcXG4tXFx0XFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpO1xcbitcXHRcXHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8XFxuK1xcdFxcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREUpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDpcXG4gXFx0XFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRyxcXG5AQCAtMjg1LDYgKzI5MSwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4gXFx0XFx0aWYgKCEoZGVzYyBcXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHRcXHRpZiAoZGVzYyBcXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHtcXG4rXFx0XFx0XFx0dHhfbWJ4LVxcdTAwM2VyZXNwX2Vycm9yKys7XFxuK1xcdFxcdFxcdGRldl93YXJuKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcIkZXIGNvbXBsZXRlZCBhIFR4IG1haWxib3ggcmVxdWVzdCB3aXRoIGFuIGVycm9yXFxcXG5cXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0ZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTtcXG4gXFxuIFxcdFxcdGhlYWQrKztcXG5AQCAtMTY2Niw2ICsxNjc4LDEzIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3J4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiBcXHRcXHRpZiAoIShkZXNjIFxcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdGlmIChkZXNjIFxcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xcbitcXHRcXHRcXHRyeF9tYngtXFx1MDAzZXJlc3BfZXJyb3IrKztcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRlcgcmVwb3J0ZWQgYW4gZXJyb3Igb24gYW4gUnggbWFpbGJveCBtZXNzYWdlOyBkcm9wcGluZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9wYWdlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShmYmQtXFx1MDAzZWRldiwgcnhfbWJ4LVxcdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuIFxcbkBAIC0xNzM0LDYgKzE3NTMsNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19md19tYnggKnR4X21ieCA9IFxcdTAwMjZmYmQtXFx1MDAzZW1ieFtGQk5JQ19JUENfTUJYX1RYX0lEWF07XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMCAqIEhaICsgMTtcXG4rXFx0dTY0IHJlc3BfZXJyb3I7XFxuIFxcdGludCBlcnIsIGk7XFxuIFxcbiBcXHRkbyB7XFxuQEAgLTE3NjQsNiArMTc4NCw4IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuIFxcdCAqIG1nbXQudmVyc2lvbiBvbmNlIHdlIGdldCB0aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZmlybXdhcmVcXG4gXFx0ICogaW4gdGhlIGNhcGFiaWxpdGllcyByZXF1ZXN0IG1lc3NhZ2UuXFxuIFxcdCAqL1xcbitzZW5kX2NhcF9yZXE6XFxuK1xcdHJlc3BfZXJyb3IgPSB0eF9tYngtXFx1MDAzZXJlc3BfZXJyb3I7XFxuIFxcdGVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBjbGVhbl9tYng7XFxuQEAgLTE3ODIsOCArMTgwNCwxNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiBcXHRcXHRmYm5pY19tYnhfcG9sbChmYmQpO1xcbiBcXG4gXFx0XFx0Lyogc2V0IGVyciwgYnV0IHdhaXQgdGlsbCBtZ210LnZlcnNpb24gY2hlY2sgdG8gcmVwb3J0IGl0ICovXFxuLVxcdFxcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKVxcbitcXHRcXHRpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRVRJTUVET1VUO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSWYgdGhlIEZXIGNvbXBsZXRlZCBvdXIgY2FwYWJpbGl0aWVzIHJlcXVlc3Qgd2l0aCBhbiBlcnJvclxcbitcXHRcXHQgKiAoRldfRVJSKSBpdCBwcm9kdWNlZCBubyByZXNwb25zZTsgdGhlIHJpbmcgaXMgbm90IHdlZGdlZCwgc29cXG4rXFx0XFx0ICogcmUtaXNzdWUgdGhlIHJlcXVlc3QgaW5zdGVhZCBvZiB0aW1pbmcgb3V0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHR4X21ieC1cXHUwMDNlcmVzcF9lcnJvciAhPSByZXNwX2Vycm9yKVxcbitcXHRcXHRcXHRnb3RvIHNlbmRfY2FwX3JlcTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXFxuQEAgLTEzLDYgKzEzLDcgQEAgc3RydWN0IGZibmljX3Rsdl9tc2c7XFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHtcXG4gXFx0dTggcmVhZHksIGhlYWQsIHRhaWw7XFxuK1xcdHU2NCByZXNwX2Vycm9yO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmJuaWNfdGx2X21zZ1xcdCptc2c7XFxuIFxcdFxcdGRtYV9hZGRyX3RcXHRcXHRhZGRyO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xcbmluZGV4IDhiOWJjOWU4ZWE1NmMuLmM2Njk4ZTMwMDJhMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcXG5AQCAtNDM0LDYgKzQzNCw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtXFx1MDAzZW5ldGRldjtcXG4rXFx0c3RydWN0IGZibmljX25ldCAqZmJuO1xcbiBcXG4gXFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxcbiBcXHRcXHRnb3RvIG51bGxfdWNfYWRkcjtcXG5AQCAtNDQxLDExICs0NDIsMTYgQEAgc3RhdGljIGludCBmYm5pY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cnRubF9sb2NrKCk7XFxuIFxcdG5ldGRldl9sb2NrKG5ldGRldik7XFxuIFxcbitcXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4gXFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xcbiBcXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xcbiBcXG4rXFx0LyogVGhlIElSUXMgYXJlIGFib3V0IHRvIGJlIGZyZWVkLCBzbyBkcm9wIHRoZSBuYXBpIHZlY3RvciBjb3VudCAqL1xcbitcXHRmYm4tXFx1MDAzZW51bV9uYXBpID0gMDtcXG4rXFxuIFxcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gXFxuQEAgLTUwOCwxNiArNTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGRldl9sb2NrKG5ldGRldik7XFxuK1xcbiBcXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4gXFx0LyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi9cXG4gXFx0ZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLVxcdTAwM2VudW1fdHhfcXVldWVzLCBmYm4tXFx1MDAzZW51bV9yeF9xdWV1ZXMpO1xcbiBcXG4tXFx0cnRubF9sb2NrKCk7XFxuLVxcdG5ldGRldl9sb2NrKG5ldGRldik7XFxuLVxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuIFxcdFxcdGVyciA9IF9fZmJuaWNfb3BlbihmYm4pO1xcbitcXHRcXHQvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi9cXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0ZmJuLVxcdTAwM2VudW1fbmFwaSA9IDA7XFxuK1xcdH1cXG4gXFxuIFxcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcXG4gXFx0cnRubF91bmxvY2soKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDEyNjgzYjVkMTI1ZTQuLjk3YTFhZGJkOWVhZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbkBAIC05NDQsNiArOTQ0LDcgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVxcdEJJVCg2KVxcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1NcXHRcXHRCSVQoNylcXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbiBcXG4gLyoqXFxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXFxuQEAgLTk4MSw2ICs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuICAqXFx0IC0gbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpXFxuICAqXFx0IC0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcygpXFxuICAqXFx0IC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaylcXG4rICpcXHQgLSBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpXFxuICAqXFxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXFxuICAqXFx0bG9uZ2VyIGhhdmUgdG8gaW1wbGVtZW50IHRoaXMgY2FsbGJhY2suIE1vc3QgZmllbGRzIGFyZVxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXFxuaW5kZXggNGU1MzU2ZTI2ZjQwMC4uYWUzMmU3ZmRiNTYzYyAxMDA2NDRcXG4tLS0gYS9uZXQvZXRodG9vbC9jb21tb24uaFxcbisrKyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXFxuQEAgLTE2Myw2ICsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4gXFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XFxuIFxcdGNhc2UgRVRIVE9PTF9HTElOSzpcXG4gXFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG4rXFx0Y2FzZSBFVEhUT09MX1RFU1Q6XFxuK1xcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NTAuNDk3NjI0NDA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1Njc1NzcwNDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA2OTAyNzdmNjdhMjdlNDk5YTBlNjgxNGY5Yjg1YjkxNWUyOTM0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjI6NDE6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XG4gLyogUFVMIFVzZXIgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBGQk5JQ19DU1JfU1RBUlRfUFVMX1VTRVJcdDB4MzEwMDBcdC8qIENTUiBzZWN0aW9uIGRlbGltaXRlciAqL1xuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHXHQweDMxMDNkXHRcdC8qIDB4YzQwZjQgKi9cbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXHRDU1JfQklUKDIwKVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIXHRDU1JfQklUKDE5KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0JNRVx0XHRDU1JfQklUKDE4KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX1JERV9BVFRSXHRDU1JfR0VOTUFTSygxNywgMTUpXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbisvKiBTZXQgd2l0aCBGV19DTVBMIHdoZW4gdGhlIEZXIGNvbXBsZXRlZCBhIGRlc2NyaXB0b3Igd2l0aG91dCBzdWNjZXNzZnVsbHlcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cbisgKi9cbisjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlJcdERFU0NfQklUKDIpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTFx0REVTQ19CSVQoMSlcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcdERFU0NfQklUKDApXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuaW5kZXggM2M0NTYzYzhmNDAzZi4uNDU4MWZkOGM4ZWRmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuQEAgLTUzOSw4ICs1MzksOCBAQCBzdGF0aWMgdm9pZCBmYm5pY19kYmdfZndfbWJ4X2Rpc3BsYXkoc3RydWN0IHNlcV9maWxlICpzLFxuIFx0LyogR2VuZXJhdGUgaGVhZGVyICovXG4gXHRzZXFfcHV0cyhzLCBtYnhfaWR4ID09IEZCTklDX0lQQ19NQlhfUlhfSURYID8gXCJSeFxcblwiIDogXCJUeFxcblwiKTtcbiBcbi1cdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkXFxuXCIsXG4tXHRcdCAgIG1ieC1cdTAwM2VyZWFkeSwgbWJ4LVx1MDAzZWhlYWQsIG1ieC1cdTAwM2V0YWlsKTtcbitcdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbGRcXG5cIixcbitcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwiJTNzICUtNHMgJXMgJS0xMnMgJXMgJS0zcyAlLTE2c1xcblwiLFxuIFx0XHQgXCJJZHhcIiwgXCJMZW5cIiwgXCJFXCIsIFwiQWRkclwiLCBcIkZcIiwgXCJIXCIsIFwiUmF3XCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbmluZGV4IDBlNDcwODhlYzQ0YmEuLjQyM2YxNzljOWQ0NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbkBAIC0yMDI1LDcgKzIwMjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuIFx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTSB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxuIFx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfcmVnc19sZW5cdFx0XHQ9IGZibmljX2dldF9yZWdzX2xlbixcbiBcdC5nZXRfcmVnc1x0XHRcdD0gZmJuaWNfZ2V0X3JlZ3MsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3Li44ZjRhMTk1YmI4ZWQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbkBAIC02MCw4ICs2MCwxNCBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcmVzZXRfZGVzY19yaW5nKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IG1ieF9pZHgpXG4gXHQgKi9cbiBcdHN3aXRjaCAobWJ4X2lkeCkge1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1JYX0lEWDpcbitcdFx0LyogVGhlIHdyaXRlIHBhdGggb25seSB0ZXJtaW5hdGVzIG91dHN0YW5kaW5nIHJlcXVlc3RzIHdoZW5cbitcdFx0ICogYm90aCBGTFVTSCBhbmQgRkxVU0hfTU9ERSBhcmUgc2V0LiBXaXRoIEZMVVNIIGFsb25lIHRoZVxuK1x0XHQgKiB3cml0ZXMgc3RpbGwgb2JleSB0aGUgaGFsdCBhc3NlcnRlZCBieSBjbGVhcmluZyBCTUUsIHNvXG4rXHRcdCAqIG5vdGhpbmcgZHJhaW5zIGFuZCBBV19GTFVTSF9ET05FIG5ldmVyIGFzc2VydHMuXG4rXHRcdCAqL1xuIFx0XHR3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHLFxuLVx0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCk7XG4rXHRcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIIHxcbitcdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDpcbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRyxcbkBAIC0yODUsNiArMjkxLDEyIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3R4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRpZiAoIShkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4rXHRcdGlmIChkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XG4rXHRcdFx0dHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IrKztcbitcdFx0XHRkZXZfd2FybihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFx0IFwiRlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcXG5cIik7XG4rXHRcdH1cbitcbiBcdFx0ZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTtcbiBcbiBcdFx0aGVhZCsrO1xuQEAgLTE2NjYsNiArMTY3OCwxMyBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc19yeF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdFx0aWYgKCEoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuK1x0XHRcdHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yKys7XG4rXHRcdFx0ZGV2X3dhcm4oZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkZXIHJlcG9ydGVkIGFuIGVycm9yIG9uIGFuIFJ4IG1haWxib3ggbWVzc2FnZTsgZHJvcHBpbmdcXG5cIik7XG4rXHRcdFx0Z290byBuZXh0X3BhZ2U7XG4rXHRcdH1cbitcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZmJkLVx1MDAzZWRldiwgcnhfbWJ4LVx1MDAzZWJ1Zl9pbmZvW2hlYWRdLmFkZHIsXG4gXHRcdFx0XHRcdEZCTklDX1JYX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbiBcbkBAIC0xNzM0LDYgKzE3NTMsNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIHtcbiBcdHN0cnVjdCBmYm5pY19md19tYnggKnR4X21ieCA9IFx1MDAyNmZiZC1cdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9UWF9JRFhdO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFogKyAxO1xuK1x0dTY0IHJlc3BfZXJyb3I7XG4gXHRpbnQgZXJyLCBpO1xuIFxuIFx0ZG8ge1xuQEAgLTE3NjQsNiArMTc4NCw4IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXG4gXHQgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS5cbiBcdCAqL1xuK3NlbmRfY2FwX3JlcTpcbitcdHJlc3BfZXJyb3IgPSB0eF9tYngtXHUwMDNlcmVzcF9lcnJvcjtcbiBcdGVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gY2xlYW5fbWJ4O1xuQEAgLTE3ODIsOCArMTgwNCwxNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuIFx0XHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cbi1cdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXG4rXHRcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKSB7XG4gXHRcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBJZiB0aGUgRlcgY29tcGxldGVkIG91ciBjYXBhYmlsaXRpZXMgcmVxdWVzdCB3aXRoIGFuIGVycm9yXG4rXHRcdCAqIChGV19FUlIpIGl0IHByb2R1Y2VkIG5vIHJlc3BvbnNlOyB0aGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzb1xuK1x0XHQgKiByZS1pc3N1ZSB0aGUgcmVxdWVzdCBpbnN0ZWFkIG9mIHRpbWluZyBvdXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IgIT0gcmVzcF9lcnJvcilcbitcdFx0XHRnb3RvIHNlbmRfY2FwX3JlcTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuaW5kZXggZDg0NzIzZTRjZmEzNi4uNWY5OTY5MjQ3ZTMwNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG5AQCAtMTMsNiArMTMsNyBAQCBzdHJ1Y3QgZmJuaWNfdGx2X21zZztcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHtcbiBcdHU4IHJlYWR5LCBoZWFkLCB0YWlsO1xuK1x0dTY0IHJlc3BfZXJyb3I7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfdGx2X21zZ1x0Km1zZztcbiBcdFx0ZG1hX2FkZHJfdFx0XHRhZGRyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jXG5pbmRleCA4YjliYzllOGVhNTZjLi5jNjY5OGUzMDAyYTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuQEAgLTQzNCw2ICs0MzQsNyBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZiZC1cdTAwM2VuZXRkZXY7XG4rXHRzdHJ1Y3QgZmJuaWNfbmV0ICpmYm47XG4gXG4gXHRpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpXG4gXHRcdGdvdG8gbnVsbF91Y19hZGRyO1xuQEAgLTQ0MSwxMSArNDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRydG5sX2xvY2soKTtcbiBcdG5ldGRldl9sb2NrKG5ldGRldik7XG4gXG4rXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuIFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbitcdC8qIFRoZSBJUlFzIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgc28gZHJvcCB0aGUgbmFwaSB2ZWN0b3IgY291bnQgKi9cbitcdGZibi1cdTAwM2VudW1fbmFwaSA9IDA7XG4rXG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuQEAgLTUwOCwxNiArNTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbitcbiBcdGZibiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4gXHQvKiBSZXNldCB0aGUgcXVldWVzIGlmIG5lZWRlZCAqL1xuIFx0ZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLVx1MDAzZW51bV90eF9xdWV1ZXMsIGZibi1cdTAwM2VudW1fcnhfcXVldWVzKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuLVx0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbi1cbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4gXHRcdGVyciA9IF9fZmJuaWNfb3BlbihmYm4pO1xuK1x0XHQvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi9cbitcdFx0aWYgKGVycilcbitcdFx0XHRmYm4tXHUwMDNlbnVtX25hcGkgPSAwO1xuK1x0fVxuIFxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5pbmRleCAxMjY4M2I1ZDEyNWU0Li45N2ExYWRiZDllYWVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5AQCAtOTQ0LDYgKzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVx0QklUKDYpXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTXHRcdEJJVCg3KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuKyNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RcdFx0QklUKDkpXG4gXG4gLyoqXG4gICogc3RydWN0IGV0aHRvb2xfb3BzIC0gb3B0aW9uYWwgbmV0ZGV2IG9wZXJhdGlvbnNcbkBAIC05ODEsNiArOTgyLDcgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xuICAqXHQgLSBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKClcbiAgKlx0IC0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcygpXG4gICpcdCAtIGV0aHRvb2xfb3BfZ2V0X2xpbmsoKSAoc3luY3MgbGluayB3YXRjaCB1bmRlciBydG5sX2xvY2spXG4rICpcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcbiAgKlxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXG4gICpcdGxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmVcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmhcbisrKyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5AQCAtMTYzLDYgKzE2Myw4IEBAIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG4gXHRjYXNlIEVUSFRPT0xfR0xJTks6XG4gXHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xuK1x0Y2FzZSBFVEhUT09MX1RFU1Q6XG4rXHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NTAuNDk3NjI2NzI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNDUzNjA2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuQWxyaWdodCwgSSBzZWUgYSBsaXN0IG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNgLCBhbmQgc28gb24uIFdhaXQgYSBzZWNvbmQuLi4gYGZibmljYCEgVGhhdCdzIE1ldGEncyBBU0lDIE5JQyBkcml2ZXIsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyLCByaWdodD8gSW50ZXJlc3RpbmcuXG5cbkJ1dCBob2xkIG9uLCB0aGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFRoYXQncyBhIGJpdCBtb3JlIHNpZ25pZmljYW50LiBJdCBtYWtlcyBtZSB3b25kZXI6IEFyZSB0aGVzZSBjaGFuZ2VzIHNwZWNpZmljIHRvIHRoZSBgZmJuaWNgIGRyaXZlciwgb3IgYXJlIHRoZXkgbW9yZSBnZW5lcmFsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpb2N0bCBoYW5kbGluZyB3b3JrcywgYW5kIHdoZXRoZXIgdGhvc2UgZXRodG9vbCBjaGFuZ2VzIGFyZSBldmVuIHJlYWNoYWJsZSBpbiBhIGJyb2FkZXIgY29udGV4dC4gSXMgYGZibmljYCB0aGUgb25seSBkcml2ZXIgdXRpbGl6aW5nIHRoZW0/IEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBob3cgYEVUSFRPT0xfVEVTVGAgYW5kIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2V0aHRvb2wvYC5cblxuT2theSwgSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byBmaXJlIHVwIGBncmVwcGVyYCBvciBhbm90aGVyIHN1aXRhYmxlIHRvb2wgdG8gc2VhcmNoIHRoZSByZXBvc2l0b3J5IGFuZCBkZXRlcm1pbmUgdGhlIHJlYWNoIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MDQuNTQzMDAyOTYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTYzMzYzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyOC1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyOTpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMzAtXFx0LmdldF9kcnZpbmZvXFx0XFx0XFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NDYtI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDc6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0OC1cXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjA2Ljc5OTM0NTQ0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTU2MzY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIHBpbnBvaW50aW5nIGV2ZXJ5IHNpbmdsZSBjYWxsIHNpdGUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UsIHNlZSBwcmVjaXNlbHkgd2hlcmUgaXQncyBiZWluZyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nICp3aHkqIHRoZSBmdW5jdGlvbiBleGlzdHMsICp3aGVuKiBpdCdzIG5lZWRlZCwgYW5kLCB1bHRpbWF0ZWx5LCBpZiBpdHMgYmVoYXZpb3IgaXMgY29ycmVjdCBvciBpZiB0aGVyZSBtYXkgYmUgb3Bwb3J0dW5pdGllcyB0byBzdHJlYW1saW5lIGl0cyBpbXBsZW1lbnRhdGlvbiBvciBpdHMgdXNhZ2UgaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuIERpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UgdG8gZmluZCB0aG9zZSBjYWxscyB3aWxsIGdpdmUgbWUgbXkgZmlyc3QgY2x1ZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aWxsIGluZm9ybSB0aGUgZGlyZWN0aW9uIG9mIG15IG5leHQgc3RlcHMuIEknbSBob3BpbmcgdGhlIGNvZGUgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYW5kIGVhc2lseSB1bmRlcnN0b29kLCBidXQgSSBhbSByZWFkeSB0byBkZWx2ZSBmdXJ0aGVyIGlmIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk0MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjA4LjcxNDk4NjI2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwMjM1NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEyOS0vKipcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzA6ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzEtICogQGRldjogdGFyZ2V0IGRldmljZVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzODpldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzkte1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNTkxOiAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkyLSAqL1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjEwPV9fZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVxcdFxcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2MjQ6XFx0XFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI1LVxcdGlmIChuZWVkX3J0bmwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjEwLjk4NTIzMDgwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzE5MjQ2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGV0aHRvb2xgJ3MgSU9DVEwgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAzNjEwLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBwdWxsIHRoYXQgY29kZSBkaXJlY3RseSBpbnRvIG15IHZpZXcuIEknbSBndWVzc2luZyB0aGF0IHNwZWNpZmljIGxvY2F0aW9uIHdpbGwgaG9sZCBzb21lIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgSSdtIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUgYGV0aHRvb2xgIGZyYW1ld29yay4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIHRoZSBJT0NUTCBoYW5kbGluZyBsb2dpYyB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjEyLjgxNzE2MDg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzYwMDpcXHRcXHRjYXNlIEVUSFRPT0xfU1NHOlxcbjM2MDE6XFx0XFx0Y2FzZSBFVEhUT09MX1NUU086XFxuMzYwMjpcXHRcXHRjYXNlIEVUSFRPT0xfU0dTTzpcXG4zNjAzOlxcdFxcdGNhc2UgRVRIVE9PTF9TR1JPOlxcbjM2MDQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzYwNTpcXHRcXHR9XFxuMzYwNjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzYwNzpcXHR9XFxuMzYwODpcXHRcXG4zNjA5OlxcdHN0YXRpYyBpbnRcXG4zNjEwOlxcdF9fZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxcbjM2MTE6XFx0XFx0ICAgICAgdTMyIGV0aGNtZCwgc3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKmRldmxpbmtfc3RhdGUpXFxuMzYxMjpcXHR7XFxuMzYxMzpcXHRcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4zNjE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMzYxNTpcXHRcXHRib29sIG5lZWRfcnRubDtcXG4zNjE2OlxcdFxcdGludCByYztcXG4zNjE3OlxcdFxcbjM2MTg6XFx0XFx0ZGV2ID0gbmV0ZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLVxcdTAwM2VpZnJfbmFtZSwgXFx1MDAyNmRldl90cmFja2VyLCBHRlBfS0VSTkVMKTtcXG4zNjE5OlxcdFxcdGlmICghZGV2KVxcbjM2MjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMzYyMTpcXHRcXG4zNjIyOlxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8XFxuMzYyMzpcXHRcXHRcXHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XFxuMzYyNDpcXHRcXHRcXHQgICAgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGRldiwgZXRoY21kKTtcXG4zNjI1OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuMzYyNjpcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4zNjI3OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjM2Mjg6XFx0XFx0aWYgKGRldi1cXHUwMDNlcmVnX3N0YXRlIFxcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4zNjI5OlxcdFxcdCAgICBkZXYtXFx1MDAzZW1vdmluZ19ucyB8fCAhbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkge1xcbjM2MzA6XFx0XFx0XFx0cmMgPSAtRU5PREVWO1xcbjM2MzE6XFx0XFx0XFx0Z290byBleGl0X29wc191bmxvY2s7XFxuMzYzMjpcXHRcXHR9XFxuMzYzMzpcXHRcXG4zNjM0OlxcdFxcdHJjID0gZGV2X2V0aHRvb2xfbG9ja2VkKG5ldCwgZGV2LCB1c2VyYWRkciwgZXRoY21kLCBkZXZsaW5rX3N0YXRlLFxcbjM2MzU6XFx0XFx0XFx0XFx0XFx0bmVlZF9ydG5sKTtcXG4zNjM2OlxcdFxcbjM2Mzc6XFx0ZXhpdF9vcHNfdW5sb2NrOlxcbjM2Mzg6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4zNjM5OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuMzY0MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjM2NDE6XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXZfdHJhY2tlcik7XFxuMzY0MjpcXHRcXG4zNjQzOlxcdFxcdHJldHVybiByYztcXG4zNjQ0OlxcdH1cXG4zNjQ1OlxcdFxcbjM2NDY6XFx0aW50IGRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcilcXG4zNjQ3OlxcdHtcXG4zNjQ4OlxcdFxcdHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpzdGF0ZTtcXG4zNjQ5OlxcdFxcdHUzMiBldGhjbWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjEyLjgxNzM2Nzc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2NjQ2OTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLiBTcGVjaWZpY2FsbHksIHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBgRVRIVE9PTF9URVNUYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBldGh0b29sIG9wZXJhdGlvbiBuZWVkcyB0aGUgcm91dGluZy90cmFmZmljIGNvbnRyb2wgbGF5ZXIgKFJUTkwpLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIGNoZWNraW5nIGBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubGAgYW5kIGlmIGl0IGhhcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoaWNoIGRyaXZlcnMgYWN0dWFsbHkgKnVzZSogYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYD8gTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBrZXJuZWwgc291cmNlIHRvIGZpbmQgYWxsIGluc3RhbmNlcyBvZiB0aGF0IHNwZWNpZmljIGZsYWcuIExvb2tzIGxpa2UgdGhlIG9ubHkgZHJpdmVyIHVzaW5nIGl0IGlzIGBmYm5pY2AuIEhtbS4uLlxuXG5Ob3csIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LiBXaGF0IGV4YWN0bHkgKmlzKiBgZmJuaWNgPyBSaWdodCwgdGhhdCdzIE1ldGEncyBob3N0IG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgUENJIGRyaXZlci4gVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGZibmljYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSB0aGlzIGlzIHRhcmdldGVkIGZvci4gVGhlIEtjb25maWcgc2hvdWxkIHRlbGwgbWUgd2hhdCBzb3J0IG9mIHBsYXRmb3JtcyBvciBkZXZpY2VzIGFyZSB1c2luZyB0aGlzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHNwZWNpZmljIHVzZSBjYXNlIGlzIGZvciB0aGlzIFJUTkwgZGVwZW5kZW5jeSwgd2hpY2ggaXMgb25seSBzZXQgZm9yIHRlc3Qgb3BlcmF0aW9ucyBpbiBgZmJuaWNgLiBUaGlzIGNvdWxkIGdpdmUgc29tZSBpbnNpZ2h0cyB0byBzb21lIHVuaXF1ZSBoYXJkd2FyZSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MjcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0MjoxNS45ODM4Mzk2NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODY5ODAwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZCTklDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MTguMTcwODI1MzI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTkzNzg5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlOiBEcml2ZXJzL05ldC9FdGhlcm5ldC9NZXRhKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGEgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBFdGhlcm5ldCBkcml2ZXIgc3Vic3lzdGVtLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvYCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbiB0byBpdHMgcHVycG9zZS4gVGhpcyBsaWtlbHkgaXNuJ3QgYSAqc3BlY2lmaWMqIGRldmljZSBkcml2ZXIncyBjb25maWd1cmF0aW9uLCBidXQgbW9yZSBsaWtlbHkgYSB0b3AtbGV2ZWwsIG9yZ2FuaXphdGlvbmFsIEtjb25maWcgZmlsZS4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgb3ZlcmFyY2hpbmcgZnJhbWV3b3JrIGZvciBFdGhlcm5ldCBzdXBwb3J0LCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhpbmdzIGxpa2U6XG5cbiogICAqKk9wdGlvbnMgZm9yIEVuYWJsaW5nL0Rpc2FibGluZyB0aGUgRXRoZXJuZXQgU3Vic3lzdGVtOioqIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgZnVuY3Rpb24sIGVuc3VyaW5nIHRoYXQgdGhlIGVudGlyZSBjYXRlZ29yeSBvZiBFdGhlcm5ldCBkcml2ZXJzIGFuZCB0aGUgYXNzb2NpYXRlZCBpbmZyYXN0cnVjdHVyZSBjYW4gYmUgYnJvdWdodCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgb3IgZXhjbHVkZWQuIEknZCBleHBlY3QgdG8gc2VlIHRoZSBtYWluIGBDT05GSUdfRVRIRVJORVRgIG9wdGlvbiBkZWNsYXJlZCBoZXJlLCBwZXJoYXBzIHdpdGggZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcy5cbiogICAqKkFnZ3JlZ2F0aW9uIG9mIERlcGVuZGVuY2llczoqKiBCZWNhdXNlIHRoZSBkcml2ZXJzIGFyZSBsaWtlbHkgdmVyeSBkaXZlcnNlLCB0aGlzIGlzIHdoZXJlIGRlcGVuZGVuY2llcyBhbmQgcHJlcmVxdWlzaXRlcyBhcmUgZGVmaW5lZCB0byBwcm92aWRlIGEgdXNlZnVsIHVzZXIgZXhwZXJpZW5jZS5cbiogICAqKk1ldGEtQ29uZmlndXJhdGlvbjoqKiBPcHRpb25zIGFmZmVjdGluZyB0aGUgYnJvYWRlciBFdGhlcm5ldCBsYW5kc2NhcGUsIG5vdCB0aWVkIHRvIGEgc2luZ2xlIHBoeXNpY2FsIGRldmljZSwgYXJlIGRlZmluZWQgaGVyZS4gVGhpcyBtaWdodCBpbmNsdWRlIGNob2ljZXMgYWJvdXQgd2hpY2ggRXRoZXJuZXQgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQsIHdoZXRoZXIgc3BlY2lmaWMgZmVhdHVyZXMgKGxpa2UgVkxBTiBzdXBwb3J0LCBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQpIGFyZSBidWlsdCBpbiwgYW5kIHBlcmhhcHMgZXZlbiBzZWxlY3Rpb24gb2YgYmFzaWMsIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgRXRoZXJuZXQgZHJpdmVycyBkZXBlbmQgb24uIEl0IGNvdWxkIGFsc28gcHJvdmlkZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgYmV0d2VlbiBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdGllcyAoZS5nLiBjaG9pY2Ugb2YgZGlmZmVyZW50IFBIWSBkcml2ZXJzKS5cbiogICAqKk9yZ2FuaXphdGlvbiBhbmQgU3RydWN0dXJlOioqIFRoaXMgaXMgYWxzbyBhIGdvb2QgcGxhY2UgdG8gY3JlYXRlIHN1Ym1lbnVzIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gdGhhdCBwcm92aWRlIGEgbG9naWNhbCBncm91cGluZyBmb3Igc3BlY2lmaWMgdHlwZXMgb2YgRXRoZXJuZXQgZGV2aWNlcy4gVGhpcyBoZWxwcyB0aGUgdXNlciBieSBwcm92aWRpbmcgYW4gb3JnYW5pemVkIHZpZXcgb2YgYWxsIGF2YWlsYWJsZSBFdGhlcm5ldCBvcHRpb25zLiBUaGlzIHdpbGwgbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBwZXJzb24gY29uZmlndXJpbmcgdGhlIGtlcm5lbCB0byBsb2NhdGUgb3B0aW9ucyBvZiBpbnRlcmVzdC5cbiogICAqKkRyaXZlciBTZWxlY3Rpb246KiogVGhpcyBLY29uZmlnIGNvdWxkIGFsc28gaW5jbHVkZSBvcHRpb25zIHRvIHNlbGVjdCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGRyaXZlcnMuIFBlcmhhcHMgYSBnZW5lcmljIGRyaXZlciBjYW4gYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdCwgb3Igc3BlY2lmaWMgZHJpdmVycyBiYXNlZCBvbiBkZXZpY2UgbWFudWZhY3R1cmVycyBjYW4gYmUgc2VsZWN0ZWQuXG4qICAgKipEZXBlbmRlbmN5IG9uIENvcmUgTmV0d29ya2luZzoqKiBBdCB0aGUgdmVyeSBsZWFzdCwgaXQncyBnb2luZyB0byBlbnN1cmUgdGhhdCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYXMgYSBwcmVyZXF1aXNpdGUgZm9yIGFueSBFdGhlcm5ldCBkcml2ZXIgdG8gZnVuY3Rpb24uXG5cbkknbGwgYmUgbG9va2luZyBmb3IgYGNvbmZpZ2AgZGVjbGFyYXRpb25zLCBgbWVudWNvbmZpZ2AgYmxvY2tzIChhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyksIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGBkZWZhdWx0YCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgaGVscGAgdGV4dCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIG9wdGlvbnMuIFRoZSBmaWxlIHdpbGwgdGVsbCB0aGUgdXNlciBob3cgdGhlIEV0aGVybmV0IHN1YnN5c3RlbSBmaXRzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgc3lzdGVtLCB3aGF0IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBtZXQuIEl0J3MgYSBrZXkgcGllY2Ugb2YgZG9jdW1lbnRhdGlvbiwgZXNzZW50aWFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MjIuMzMwMjA4NDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWV0YSBQbGF0Zm9ybXMgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9NRVRBXFxuICAgNzpcXHRcXHRib29sIFxcXCJNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZGVzaWduZWQgYnkgTWV0YSwgc2F5IFkuXFxuICAxMTpcXHRcXHQgIFRoYXQncyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTQ6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgTWV0YSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDE2OlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX01FVEFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEZCTklDXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgQ09NUElMRV9URVNUXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIE1BWF9TS0JfRlJBR1MgXFx1MDAzYyAyMlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDI4OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDI5OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgMzA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDMxOlxcdFxcdHNlbGVjdCBQTERNRldcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAzNjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGZibmljLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWQuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjIyLjMzMDMxMTI5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU5MjAyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljIFF1ZXJ5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBmaWJlci1vcHRpYyBuZXR3b3JrIGludGVyZmFjZSBjYXJkcyAoZmJuaWMpIOKAkyBlc3NlbnRpYWxseSwgY29uZmlybWluZyB0aGF0IHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCByZXNwb25kaW5nLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggYXQgdGhpcyBwb2ludCBpcyB0byBjaGVjayBkZXZpY2UgSURzIGFuZCBpbml0aWF0ZSBhIHByb2JlLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB1dGlsaXppbmcgYSBzcGVjaWZpYyBjb21tYW5kIG9yIHV0aWxpdHkgdGFpbG9yZWQgdG8gdGhlIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoLCBwZXJoYXBzIGBsc3BjaWAsIGBsc2h3YCwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCB0aGVuIGNyb3NzLXJlZmVyZW5jaW5nIHRoZSBvdXRwdXQgd2l0aCBleHBlY3RlZCBvciBrbm93biBmYm5pYyBpZGVudGlmaWVycy4gQSAncHJvYmUnLCBpbiB0aGlzIGNvbnRleHQsIHN1Z2dlc3RzIGEgYmFzaWMgaGFyZHdhcmUtbGV2ZWwgdGVzdCB0byBjb25maXJtIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYWxsb3dzIG1lIHRvIGltbWVkaWF0ZWx5IGlzb2xhdGUgaGFyZHdhcmUtbGV2ZWwgaXNzdWVzLCByYXRoZXIgdGhhbiB3YXN0aW5nIHRpbWUgY2hhc2luZyBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIGVycm9ycyBpZiB0aGUgaGFyZHdhcmUgaXNuJ3QgZXZlbiBiZWluZyByZWNvZ25pemVkLiBUaGlzIHByb3ZpZGVzIHRoZSBtb3N0IGZvdW5kYXRpb25hbCBpbmZvcm1hdGlvbiB0byB3b3JrIHdpdGgsIHRvIG1vdmUgZm9yd2FyZCB3aXRoIGRpYWdub3N0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MjUuMDg5NTE3NjI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4Njk5NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWQuKmZibmljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19pbmZvICpmYm5pY19pbmZvX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjMwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmYm5pY19wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zMS1cXHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBGQk5JQ19BU0lDLCBmYm5pY19ib2FyZF9hc2ljKSB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0MjoyNy40MDgyMjI2NjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk5OTk2NTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZCTklDIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBgZmJuaWNgIHBhcnQganVtcHMgb3V0LiBSaWdodCBhd2F5LCBJIGtub3cgYGZibmljYCBpcyBNZXRhJ3MgcGh5c2ljYWwgQVNJQyBuZXR3b3JrIGludGVyZmFjZSBjYXJkIOKAkyBlc3NlbnRpYWxseSwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMuIFRoZSBraWNrZXIgaXMgdGhhdCBpdCBuZWVkcyBhY3R1YWwgQVNJQyBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgaXQncyBub3QgZ29pbmcgdG8gcGxheSBuaWNlIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gVGhhdCdzIGEgbWFqb3IgcmVkIGZsYWcgZm9yIGZ1enppbmcgZmVhc2liaWxpdHkuXG5cbk5vdywgbGV0J3MgY2FyZWZ1bGx5IGdvIG92ZXIgdGhlIGRpZmYgYW5kIG1ha2Ugc3VyZTpcblxuVGhlIGRvY3VtZW50YXRpb24gSSdtIHJlYWRpbmcgbWVudGlvbnMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIi4gVGhpcyBjb3ZlcnMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIGFuIEFTSUMuIEdpdmVuIHRoYXQsIGBmYm5pY2AgaXMgcHJlY2lzZWx5IHRoZSB0eXBlIG9mIGhhcmR3YXJlIHRoZSBkb2N1bWVudGF0aW9uIGlzIHNheWluZyAqbm90KiB0byBmdXp6IGJlY2F1c2UgaXQncyBub3QgZW11bGF0ZWQuXG5cbkFscmlnaHQsIGxldCdzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNoYW5nZXMuIFRoZSBkaWZmIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYC4gSG1tLCBhbGwgb2YgdGhlc2UgYXJlIGRlZGljYXRlZCB0byBgZmJuaWNgLCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlbiwgdGhlcmUncyBhIGNvdXBsZSBvZiBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIExldCdzIGRpZyBpbi5cblxuVGhlIGNoYW5nZSBpbiBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGludHJvZHVjZXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gTG9va3MgbGlrZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmVlZGluZyB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXRsaW5rKSB3aGVuIGRlYWxpbmcgd2l0aCBgbmV0aWZfb3BlbigpYCBhbmQgYG5ldGlmX2Nsb3NlKClgIG9wZXJhdGlvbnMuIEluIGBuZXQvZXRodG9vbC9jb21tb24uaGAsIHRoZXJlJ3MgYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHRoYXQgY2hlY2tzIHRoaXMgZmxhZywgc3BlY2lmaWNhbGx5IHdoZW4gYGV0aGNtZGAgaXMgYEVUSFRPT0xfVEVTVGAuXG5cbkJ1dCB3YWl0LCBpcyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCAqZXZlciogY2FsbGVkIGZvciBhIHZpcnR1YWwgb3IgZW11bGF0ZWQgbmV0ZGV2PyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIGl0ICppcyosIHRoZW4gbWF5YmUgdGhpcyBwYXRjaCBpcyByZWxldmFudCB0byBtb3JlIHRoYW4ganVzdCB0aGUgYGZibmljYCBkcml2ZXIuIFRpbWUgdG8gY2hlY2shIEkgZGlkIGEgZ3JlcCBmb3IgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gVGhlIHJlc3VsdHMgYXJlIGluLiBBbmQgYXMgSSBzdXNwZWN0ZWQsIG9ubHkgYGZibmljX2V0aHRvb2wuY2Agc2V0cyB0aGlzIGZsYWcuIE5vIG90aGVyIGRyaXZlciBkb2VzIGluIHRoZSBlbnRpcmUga2VybmVsLlxuXG5TbywgZm9yIGV2ZXJ5IG90aGVyIG5ldCBkZXZpY2UsIHdoZW4gYGV0aGNtZGAgaXMgYEVUSFRPT0xfVEVTVGAsIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHdpbGwgY2hlY2sgaWYgdGhhdCBkZXZpY2UncyBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmxgIGhhcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHNldC4gU2luY2Ugb3RoZXIgZHJpdmVycycgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sYCBpcyB6ZXJvLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCAqYWx3YXlzKiByZXR1cm5zIGBmYWxzZWAuXG5cbk5vdywgYmVmb3JlIHRoaXMgcGF0Y2gsIHdoYXQgZGlkIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHJldHVybiB3aGVuIGBldGhjbWRgIHdhcyBgRVRIVE9PTF9URVNUYD8gR290dGEgY2hlY2sgdGhlIGhpc3RvcnkgYXJvdW5kIGxpbmUgMTYwIG9mIGBuZXQvZXRodG9vbC9jb21tb24uaGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjMzLjQwODE5MTAxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LVxcdTAwM2VldGh0b29sX29wcztcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4gMTQzOlxcdFxcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxcbiAxNDQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dTRVQ6XFxuIDE0NTpcXHRcXHRjYXNlIEVUSFRPT0xfU0xJTktTRVRUSU5HUzpcXG4gMTQ2OlxcdFxcdGNhc2UgRVRIVE9PTF9TU0VUOlxcbiAxNDc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XFxuIDE0ODpcXHRcXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcXG4gMTQ5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG4gMTUwOlxcdFxcdGNhc2UgRVRIVE9PTF9TUklOR1BBUkFNOlxcbiAxNTE6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xcbiAxNTI6XFx0XFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG4gMTUzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xcbiAxNTQ6XFx0XFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcXG4gMTU1OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbiAxNTY6XFx0XFx0Y2FzZSBFVEhUT09MX0dQQVVTRVBBUkFNOlxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG4gMTU4OlxcdFxcdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XFxuIDE2MDpcXHRcXHRjYXNlIEVUSFRPT0xfU1JTU0g6XFxuIDE2MTpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkg6XFxuIDE2MjpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkhJTkRJUjpcXG4gMTYzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xcbiAxNjQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbiAxNjU6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG4gMTY2OlxcdFxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbiAxNjc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbiAxNjg6XFx0XFx0fVxcbiAxNjk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNzA6XFx0fVxcbiAxNzE6XFx0XFxuIDE3MjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRVRIVE9PTF9ORVRMSU5LKVxcbiAxNzM6XFx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XFxuIDE3NDpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0MjozMy40MDgyOTY0NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA0NjY4OTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXRodG9vbCBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbCB3aXRoIHRoaXMgZXRodG9vbCBwYXRjaC4gQmVmb3JlIHRoaXMgdXBkYXRlLCB0aGUgYEVUSFRPT0xfVEVTVGAgaW9jdGwgY2FsbCB3YXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGZ1bmN0aW9uJ3Mgc3dpdGNoIHN0YXRlbWVudC4gSXQganVzdCBzbGlwcGVkIHRocm91Z2ggYW5kIHJldHVybmVkIGBmYWxzZWAsIHdoaWNoIGlzIG5vdCB0aGUgZGVzaXJlZCBiZWhhdmlvci4gTm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIGlmIHRoZSBkcml2ZXIgZXhwbGljaXRseSAqZG9lc24ndCogcmVxdWlyZSBSVE5MIGZvciB0aGUgdGVzdCBvcGVyYXRpb24gYnkgY2hlY2tpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gSWYgaXQgKmRvZXNuJ3QqIHRoZW4gaXQgZmFsbHMgdGhyb3VnaCB0byBjaGVja2luZyBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCwgd2hpY2ggZWZmZWN0aXZlbHkgZXZhbHVhdGVzIHRvIGBmYWxzZWAgYmVjYXVzZSBvZiB0aGUgYml0bWFzaywgbWVhbmluZyBSVE5MIGlzIG5vdCBhY3F1aXJlZC5cblxuVGhlIG9ubHkgZHJpdmVyIEkgY2FuIHNlZSB0aGF0IGFjdHVhbGx5ICpkb2VzKiBzZXQgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBpcyB0aGUgYGZibmljYCBkcml2ZXIsIGFuZCB0aGF0J3MgYSBwaHlzaWNhbCBBU0lDIE5JQyBkcml2ZXIuIFNvLCB3aXRoIHRoaXMgcGF0Y2gsIHRoZSBgRVRIVE9PTF9URVNUYCBjYWxsIGZvciBgZmJuaWNgIHdpbGwgY29ycmVjdGx5IGdyYWIgdGhlIGBydG5sX2xvY2tgIGJlZm9yZSBleGVjdXRpbmcgdGhlIGBzZWxmX3Rlc3RgIG9wZXJhdGlvbiwgd2hpY2ggaXQgbmVlZHMgYmVjYXVzZSB0aGUgYGZibmljYCBzZWxmLXRlc3Qgb3BzIGFyZSBSVE5MLXByb3RlY3RlZC4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIG5vIHZpcnR1YWwgZGV2aWNlcyBhcmUgaW1wYWN0ZWQgaGVyZS4gSSdtIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZWJhc2UgdG8gc2VlIGlmIGFueSBvZiB0aGUgdmlydHVhbCBkZXZpY2Vz4oCUdHVuLCB0YXAsIGR1bW15LCB2ZXRoLCBsb29wYmFjaywgdmlydGlvX25ldCwgdGhlIHVzdWFsIHN1c3BlY3Rz4oCUYXJlIHNldHRpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBhbnl3aGVyZSwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGluIHRob3NlIGVudmlyb25tZW50cy4gSSdsbCBzZWFyY2ggZm9yIGBvcF9uZWVkc19ydG5sYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MzguNDU0OTg4NDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYyNzEwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wX25lZWRzX3J0bmxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q9ODE9b3B0IGJhY2sgaW50byBydG5sX2xvY2sgYnkgc2V0dGluZyB0aGUgbWF0Y2hpbmcgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdDo4MjpiaXQgaW4gYGBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubGBgLiBUaGUgZXRodG9vbCBjb3JlIHRoZW4ga2VlcHNcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdC04My1ydG5sX2xvY2sgaGVsZCBhY3Jvc3MgdGhvc2UgU0VUIGNhbGxiYWNrcyBzbyB0aGUgY29udHJhY3QgYWJvdmUgc3RpbGxcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zNzg9aXMgaGVsZCBhcm91bmQgc3BlY2lmaWMgb3BlcmF0aW9ucyAoYm90aCBTRVQgYW5kIEdFVCkgYnkgc2V0dGluZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozNzk6YXBwcm9wcmlhdGUgYml0cyBpbiBgYGV0aHRvb2xfb3BzOjpvcF9uZWVkc19ydG5sYGAgKGlmIHRoZSBuZWNlc3NhcnlcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzgwLWBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXQgZG9lc24ndCBleGlzdCwganVzdCBhZGQgaXQpLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYy01NzMyLVxcdC5yeGZoX3ByaXZfc2l6ZVxcdFxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBibnh0X3Jzc19jdHgpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczMzpcXHQub3BfbmVlZHNfcnRubFxcdFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYy01NzM0LVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTk4Mj1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ3ZlX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk4NS1cXHRcXHRcXHRcXHQgRVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODY6XFx0Lm9wX25lZWRzX3J0bmwgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg3LVxcdFxcdFxcdCBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jPTE4NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpYXZmX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYy0xODU3LVxcdC5zdXBwb3J0ZWRfaW5wdXRfeGZybVxcdD0gUlhIX1hGUk1fU1lNX1hPUixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jOjE4NTg6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jLTE4NTktXFx0LmdldF9kcnZpbmZvXFx0XFx0PSBpYXZmX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYz0yNzE3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1ZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcyMS1cXHQucnhmaF9tYXhfbnVtX2NvbnRleHRzXFx0PSBNTFg1RV9NQVhfTlVNX1JTUyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MjI6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcyMy1cXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYz00MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1ZV9yZXBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtNDIwLVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jOjQyMTpcXHQub3BfbmVlZHNfcnRubFxcdCAgID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQyMi1cXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmM9Mjg0PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1aV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmMtMjg3LVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyODg6XFx0Lm9wX25lZWRzX3J0bmxcXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTI4OS1cXHRcXHRcXHQgICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jPTMxMj1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWlfcGtleV9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjMxMzpcXHQub3BfbmVlZHNfcnRubFxcdCAgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTMxNC1cXHQuZ2V0X2RydmluZm8gICAgICAgID0gbWx4NWlfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4c3dfc3BfcG9ydF9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmMtMTI2NC1cXHQuY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkXFx0PSB0cnVlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYzoxMjY1OlxcdC5vcF9uZWVkc19ydG5sXFx0XFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY2LVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyMi1cXHQucnhmaF9tYXhfbnVtX2NvbnRleHRzXFx0XFx0PSBGQk5JQ19SUENfUlNTX1RCTF9DT1VOVCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDIzOlxcdC5vcF9uZWVkc19ydG5sXFx0XFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDI0LVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jPTg2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFuYV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jLTg3MC1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFX1RYLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MTpcXHQub3BfbmVlZHNfcnRubFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMtODcyLVxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYz0yMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuc2ltX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTEtXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MjEyOlxcdC5vcF9uZWVkc19ydG5sXFx0XFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjEzLVxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQgICAgICAgID0gbnNpbV9nZXRfcGF1c2Vfc3RhdHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD05MjM9c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTMzLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjkzNDovKiBCaXRzIGZvciBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubFxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTkzNS0gKiBMSU5LU0VUVElOR1MgY292ZXIgYSBudW1iZXIgb2YgY29tbWFuZHMsIGJ1dCBpbiBtb3N0IGNhc2VzIHdlIHdhbnQgdG8ga2VlcFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTc0LSAqIEBzdXBwb3J0ZWRfaHd0c3RhbXBfcXVhbGlmaWVyczogYml0ZmllbGQgb2Ygc3VwcG9ydGVkIGh3dHN0YW1wIHF1YWxpZmllci5cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NzU6ICogQG9wX25lZWRzX3J0bmw6IG1hc2sgb2YgJUVUSFRPT0xfT1BfTkVFRFNfUlROTF8qIGJpdHMuXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTc2LSAqXFx0Rm9yIHVzZSB3aXRoIG9wcy1sb2NrZWQgZHJpdmVycyAoaWdub3JlZCBvdGhlcndpc2UpLiBTZWxlY3RzIHdoaWNoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0xMTkxLSAqIHRoZSBkcml2ZXIgb3B0cyBpbiB2aWEgdGhlIG1hdGNoaW5nIGBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXRcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMTkyOiAqIGluIEBvcF9uZWVkc19ydG5sLlxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTMtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTEyMDI9c3RydWN0IGV0aHRvb2xfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTEyMTQtXFx0dTMyXFx0c3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM7XFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTIxNTpcXHR1MzJcXHRvcF9uZWVkc19ydG5sO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTEyMTYtXFx0dm9pZFxcdCgqZ2V0X2RydmluZm8pKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaD04MT1ib29sIF9fZXRodG9vbF9kZXZfbW1fc3VwcG9ydGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtODgtICogUmV0dXJuOiB0cnVlIGlmIEBjbWQgaXMgYSBjb21tYW5kIGZvciB3aGljaCBAZGV2IGhhcyBvcHRlZC1pbiB0b1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjg5OiAqIGtlZXBpbmcgcnRubF9sb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsICh2aWEgb3BfbmVlZHNfcnRubCkuXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtOTAtICovXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwMC1cXHRjYXNlIEVUSFRPT0xfTVNHX0xJTktNT0RFU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAxOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwMi1cXHRjYXNlIEVUSFRPT0xfTVNHX1BSSVZGTEFHU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAzOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDQtXFx0Y2FzZSBFVEhUT09MX01TR19SSU5HU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA1OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDYtXFx0Y2FzZSBFVEhUT09MX01TR19DSEFOTkVMU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA3OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwOC1cXHRjYXNlIEVUSFRPT0xfTVNHX0NPQUxFU0NFX1NFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMDk6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEwLVxcdGNhc2UgRVRIVE9PTF9NU0dfUEFVU0VfR0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjExMTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTExMi1cXHRjYXNlIEVUSFRPT0xfTVNHX1BBVVNFX1NFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTM6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTQtXFx0Y2FzZSBFVEhUT09MX01TR19SU1NfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjExNTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTYtXFx0Y2FzZSBFVEhUT09MX01TR19MSU5LU1RBVEVfR0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjExNzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTExOC1cXHRjYXNlIEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVDpcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEzNC0gKiBSZXR1cm46IHRydWUgaWYgQGV0aGNtZCBpcyBhIGNvbW1hbmQgZm9yIHdoaWNoIEBkZXYgaGFzIG9wdGVkLWluIHRvXFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTM1OiAqIGtlZXBpbmcgcnRubF9sb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsICh2aWEgb3BfbmVlZHNfcnRubCkuXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM2LSAqL1xcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM4PWV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTQ2LVxcdGNhc2UgRVRIVE9PTF9TU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE0NzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDgtXFx0Y2FzZSBFVEhUT09MX1NQRkxBR1M6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTQ5OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTAtXFx0Y2FzZSBFVEhUT09MX1NSSU5HUEFSQU06XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTUxOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTItXFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTM6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU0LVxcdGNhc2UgRVRIVE9PTF9TQ09BTEVTQ0U6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTU1OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Ni1cXHRjYXNlIEVUSFRPT0xfR1BBVVNFUEFSQU06XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTU3OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR1BBVVNFUEFSQU07XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU4LVxcdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTk6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjAtXFx0Y2FzZSBFVEhUT09MX1NSU1NIOlxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTYyLVxcdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2MzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjQtXFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjQwLjcxNzcwNTY2N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTM3NTk4NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvKmAgZGlyZWN0b3J5LiBBaCwgdGhhdCdzIHRoZSBmYm5pYyBkcml2ZXIg4oCTIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLiBJdCdzIGEgUENJIGRyaXZlciBmb3IgdGhlaXIgcGh5c2ljYWwgTWV0YSBBU0lDIE5JQ3MuIEFuZCByaWdodCBhd2F5LCBhIHJlZCBmbGFnIOKAkyB0aGlzIGhhcmR3YXJlICpjYW4ndCogYmUgZW11bGF0ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBUaGF0J3MgYSBzaWduaWZpY2FudCBjb25zdHJhaW50LlxuXG5OZXh0LCBJIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFRoZXkncmUgYWRkaW5nIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdoaWNoIGlzIEJJVCg5KSwgYW5kIHVwZGF0aW5nIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHRvIGNoZWNrIGZvciB0aGlzIGZsYWcgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYEVUSFRPT0xfVEVTVGAgY2FzZS4gQnV0IGhlcmUncyB0aGUga2lja2VyOiBubyBkcml2ZXJzIHRoYXQgd2UgY2FuIGFjdHVhbGx5ICpyZWFjaCogb3IgZW11bGF0ZSDigJMgdGhlIHR5cGljYWwgUUVNVS9HQ0UgZGV2aWNlcyDigJMgYXJlIHNldHRpbmcgdGhpcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcuIE9ubHkgdGhlIGZibmljIGRyaXZlciBzZXRzIGl0LiBTbywgZXNzZW50aWFsbHksIHRoaXMgY2hhbmdlIGhhcyBubyBvcGVyYXRpb25hbCBpbXBhY3Qgb24gYW55IHJlYWNoYWJsZSBkZXZpY2UuIEl0J3MganVzdCBnb2luZyB0byByZXR1cm4gMC9mYWxzZSwgc2FtZSBhcyBiZWZvcmUsIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIHRoZSBmYm5pYyBoYXJkd2FyZSwgd2hpY2ggd2UgY2FuJ3QgdGVzdCBhbnl3YXkuIEFuZCB0aGUgZmJuaWMgZHJpdmVyICppdHNlbGYqIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEFTSUMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhhdCwgYW5kIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGRlZmluaXRpb24gb2Ygc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlICh3aGljaCBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyBsaWtlIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1LCBldGMuKSwgYWxsIG9mIHdoaWNoIHJlcXVpcmUgYWN0dWFsIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyB0aGF0IGFyZSAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci5cblxuV29ydGhGdXp6aW5nPyBOby4gRm9jdXNTeW1ib2xzPyBFbXB0eS4gRW5hYmxlQ29uZmlncz8gRW1wdHkuXG5cbkknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZywganVzdCB0byBiZSBzdXJlLCBhbmQgdGhlbiBmb3JtdWxhdGUgYSBjb25jaXNlLCBwcmVjaXNlIFJlYXNvbmluZy4gVGhlbiwgSSdsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA2NSwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6NDcuMjU1MzA2Mzg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSAoZmJuaWMpIGRyaXZlciBhbmQgYWRkcyB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyB0byB0aGUgY29yZSBldGh0b29sIGluZnJhc3RydWN0dXJlIHNwZWNpZmljYWxseSBmb3IgZmJuaWMuIFRoZSBmYm5pYyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSBwaHlzaWNhbCBBU0lDIG5ldHdvcmsgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIG5vIHJlYWNoYWJsZSB2aXJ0dWFsL2VtdWxhdGVkIGRyaXZlcnMgc2V0IHRoZSBuZXcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Mjo0Ny4yNTUzMzA3MjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxrjj2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 22:00:27 +0000 UTC FinishedAt: 2026-09-03 22:42:49 +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+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMDY5MDI3N2Y2N2EyN2U0OTlhMGU2ODE0ZjliODViOTE1ZTI5MzQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMjo0MTo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiAmIzQzOzk3NCw3IEBAIGVudW0ge1xuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xuICNkZWZpbmUgRkJOSUNfQ1NSX1NUQVJUX1BVTF9VU0VSXHQweDMxMDAwXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR1x0MHgzMTAzZFx0XHQvKiAweGM0MGY0ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREVcdENTUl9CSVQoMjApXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcdENTUl9CSVQoMTkpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfQk1FXHRcdENTUl9CSVQoMTgpXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfUkRFX0FUVFJcdENTUl9HRU5NQVNLKDE3LCAxNSlcbkBAIC0xMjE1LDYgJiM0MzsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbiYjNDM7LyogU2V0IHdpdGggRldfQ01QTCB3aGVuIHRoZSBGVyBjb21wbGV0ZWQgYSBkZXNjcmlwdG9yIHdpdGhvdXQgc3VjY2Vzc2Z1bGx5XG4mIzQzOyAqIHByb2Nlc3NpbmcgaXQgKGUuZy4gYSBtYWlsYm94IERNQSBlcnJvcik7IHRoZSBjb21wbGV0aW9uIGhhcyBubyB2YWxpZCBkYXRhLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSXHRERVNDX0JJVCgyKVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcdERFU0NfQklUKDEpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfSE9TVF9DTVBMXHRERVNDX0JJVCgwKVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjQ1ODFmZDhjOGVkZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcbkBAIC01MzksOCAmIzQzOzUzOSw4IEBAIHN0YXRpYyB2b2lkIGZibmljX2RiZ19md19tYnhfZGlzcGxheShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsXG4gXHQvKiBHZW5lcmF0ZSBoZWFkZXIgKi9cbiBcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcJiMzNDtSeFxcblwmIzM0OyA6IFwmIzM0O1R4XFxuXCYjMzQ7KTtcbiBcbi1cdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcblwmIzM0Oyxcbi1cdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwpO1xuJiM0MztcdHNlcV9wcmludGYocywgXCYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZCByZXNwX2Vycm9yOiAlbGxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwmIzM0OyUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXG5cJiMzNDssXG4gXHRcdCBcJiMzNDtJZHhcJiMzNDssIFwmIzM0O0xlblwmIzM0OywgXCYjMzQ7RVwmIzM0OywgXCYjMzQ7QWRkclwmIzM0OywgXCYjMzQ7RlwmIzM0OywgXCYjMzQ7SFwmIzM0OywgXCYjMzQ7UmF3XCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5pbmRleCAwZTQ3MDg4ZWM0NGJhLi40MjNmMTc5YzlkNDc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXG5AQCAtMjAyNSw3ICYjNDM7MjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbiBcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbiBcdC5nZXRfZHJ2aW5mb1x0XHRcdD0gZmJuaWNfZ2V0X2RydmluZm8sXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdFx0PSBmYm5pY19nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0XHQ9IGZibmljX2dldF9yZWdzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuaW5kZXggMjgzZDI1ZmFlNzllNy4uOGY0YTE5NWJiOGVkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNjAsOCAmIzQzOzYwLDE0IEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9yZXNldF9kZXNjX3Jpbmcoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgbWJ4X2lkeClcbiBcdCAqL1xuIFx0c3dpdGNoIChtYnhfaWR4KSB7XG4gXHRjYXNlIEZCTklDX0lQQ19NQlhfUlhfSURYOlxuJiM0MztcdFx0LyogVGhlIHdyaXRlIHBhdGggb25seSB0ZXJtaW5hdGVzIG91dHN0YW5kaW5nIHJlcXVlc3RzIHdoZW5cbiYjNDM7XHRcdCAqIGJvdGggRkxVU0ggYW5kIEZMVVNIX01PREUgYXJlIHNldC4gV2l0aCBGTFVTSCBhbG9uZSB0aGVcbiYjNDM7XHRcdCAqIHdyaXRlcyBzdGlsbCBvYmV5IHRoZSBoYWx0IGFzc2VydGVkIGJ5IGNsZWFyaW5nIEJNRSwgc29cbiYjNDM7XHRcdCAqIG5vdGhpbmcgZHJhaW5zIGFuZCBBV19GTFVTSF9ET05FIG5ldmVyIGFzc2VydHMuXG4mIzQzO1x0XHQgKi9cbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRyxcbi1cdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpO1xuJiM0MztcdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0ggfFxuJiM0MztcdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDpcbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRyxcbkBAIC0yODUsNiAmIzQzOzI5MSwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdFx0aWYgKCEoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0aWYgKGRlc2MgXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHtcbiYjNDM7XHRcdFx0dHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3ImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRkZXZfd2FybihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtGVyBjb21wbGV0ZWQgYSBUeCBtYWlsYm94IHJlcXVlc3Qgd2l0aCBhbiBlcnJvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRmYm5pY19tYnhfdW5tYXBfYW5kX2ZyZWVfbXNnKGZiZCwgRkJOSUNfSVBDX01CWF9UWF9JRFgsIGhlYWQpO1xuIFxuIFx0XHRoZWFkJiM0MzsmIzQzOztcbkBAIC0xNjY2LDYgJiM0MzsxNjc4LDEzIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3J4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRpZiAoIShkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4mIzQzO1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuJiM0MztcdFx0XHRyeF9tYngtXHUwMDNlcmVzcF9lcnJvciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRldl93YXJuKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZXIHJlcG9ydGVkIGFuIGVycm9yIG9uIGFuIFJ4IG1haWxib3ggbWVzc2FnZTsgZHJvcHBpbmdcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIG5leHRfcGFnZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGZiZC1cdTAwM2VkZXYsIHJ4X21ieC1cdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxuIFx0XHRcdFx0XHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG5AQCAtMTczNCw2ICYjNDM7MTc1Myw3IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuIFx0c3RydWN0IGZibmljX2Z3X21ieCAqdHhfbWJ4ID0gXHUwMDI2ZmJkLVx1MDAzZW1ieFtGQk5JQ19JUENfTUJYX1RYX0lEWF07XG4gXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IDEwICogSFogJiM0MzsgMTtcbiYjNDM7XHR1NjQgcmVzcF9lcnJvcjtcbiBcdGludCBlcnIsIGk7XG4gXG4gXHRkbyB7XG5AQCAtMTc2NCw2ICYjNDM7MTc4NCw4IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXG4gXHQgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS5cbiBcdCAqL1xuJiM0MztzZW5kX2NhcF9yZXE6XG4mIzQzO1x0cmVzcF9lcnJvciA9IHR4X21ieC1cdTAwM2VyZXNwX2Vycm9yO1xuIFx0ZXJyID0gZmJuaWNfZndfeG1pdF9zaW1wbGVfbXNnKGZiZCwgRkJOSUNfVExWX01TR19JRF9IT1NUX0NBUF9SRVEpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBjbGVhbl9tYng7XG5AQCAtMTc4Miw4ICYjNDM7MTgwNCwxNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuIFx0XHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cbi1cdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXG4mIzQzO1x0XHRpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkge1xuIFx0XHRcdGVyciA9IC1FVElNRURPVVQ7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIElmIHRoZSBGVyBjb21wbGV0ZWQgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IHdpdGggYW4gZXJyb3JcbiYjNDM7XHRcdCAqIChGV19FUlIpIGl0IHByb2R1Y2VkIG5vIHJlc3BvbnNlOyB0aGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzb1xuJiM0MztcdFx0ICogcmUtaXNzdWUgdGhlIHJlcXVlc3QgaW5zdGVhZCBvZiB0aW1pbmcgb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IgIT0gcmVzcF9lcnJvcilcbiYjNDM7XHRcdFx0Z290byBzZW5kX2NhcF9yZXE7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTEzLDYgJiM0MzsxMyw3IEBAIHN0cnVjdCBmYm5pY190bHZfbXNnO1xuIFxuIHN0cnVjdCBmYm5pY19md19tYngge1xuIFx0dTggcmVhZHksIGhlYWQsIHRhaWw7XG4mIzQzO1x0dTY0IHJlc3BfZXJyb3I7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfdGx2X21zZ1x0Km1zZztcbiBcdFx0ZG1hX2FkZHJfdFx0XHRhZGRyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jXG5pbmRleCA4YjliYzllOGVhNTZjLi5jNjY5OGUzMDAyYTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuQEAgLTQzNCw2ICYjNDM7NDM0LDcgQEAgc3RhdGljIGludCBmYm5pY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdHN0cnVjdCBmYm5pY19uZXQgKmZibjtcbiBcbiBcdGlmIChmYm5pY19pbml0X2ZhaWx1cmUoZmJkKSlcbiBcdFx0Z290byBudWxsX3VjX2FkZHI7XG5AQCAtNDQxLDExICYjNDM7NDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRydG5sX2xvY2soKTtcbiBcdG5ldGRldl9sb2NrKG5ldGRldik7XG4gXG4mIzQzO1x0ZmJuID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4gXHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7XG4gXG4gXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuIFx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuIFxuJiM0MztcdC8qIFRoZSBJUlFzIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgc28gZHJvcCB0aGUgbmFwaSB2ZWN0b3IgY291bnQgKi9cbiYjNDM7XHRmYm4tXHUwMDNlbnVtX25hcGkgPSAwO1xuJiM0MztcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG5AQCAtNTA4LDE2ICYjNDM7NTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRuZXRkZXZfbG9jayhuZXRkZXYpO1xuJiM0MztcbiBcdGZibiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4gXHQvKiBSZXNldCB0aGUgcXVldWVzIGlmIG5lZWRlZCAqL1xuIFx0ZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLVx1MDAzZW51bV90eF9xdWV1ZXMsIGZibi1cdTAwM2VudW1fcnhfcXVldWVzKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuLVx0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbi1cbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuIFx0XHRlcnIgPSBfX2ZibmljX29wZW4oZmJuKTtcbiYjNDM7XHRcdC8qIE9uIGZhaWx1cmUgdGhlIHZlY3RvcnMgYXJlIGZyZWVkLCBzbyBkcm9wIHRoZSBjb3VudCAqL1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0ZmJuLVx1MDAzZW51bV9uYXBpID0gMDtcbiYjNDM7XHR9XG4gXG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbmluZGV4IDEyNjgzYjVkMTI1ZTQuLjk3YTFhZGJkOWVhZWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbkBAIC05NDQsNiAmIzQzOzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVx0QklUKDYpXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTXHRcdEJJVCg3KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUXHRcdEJJVCg5KVxuIFxuIC8qKlxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXG5AQCAtOTgxLDYgJiM0Mzs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICpcdCAtIG5ldGRldl91cGRhdGVfZmVhdHVyZXMoKVxuICAqXHQgLSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKClcbiAgKlx0IC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaylcbiYjNDM7ICpcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcbiAgKlxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXG4gICpcdGxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmVcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5AQCAtMTYzLDYgJiM0MzsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbiBcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xuIFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcbiYjNDM7XHRjYXNlIEVUSFRPT0xfVEVTVDpcbiYjNDM7XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSAoZmJuaWMpIGRyaXZlciBhbmQgYWRkcyB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyB0byB0aGUgY29yZSBldGh0b29sIGluZnJhc3RydWN0dXJlIHNwZWNpZmljYWxseSBmb3IgZmJuaWMuIFRoZSBmYm5pYyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSBwaHlzaWNhbCBBU0lDIG5ldHdvcmsgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIG5vIHJlYWNoYWJsZSB2aXJ0dWFsL2VtdWxhdGVkIGRyaXZlcnMgc2V0IHRoZSBuZXcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjA2OTAyNzdmNjdhMjdlNDk5YTBlNjgxNGY5Yjg1YjkxNWUyOTM0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMjI6NDE6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaAppbmRleCA2NGI5NThkZjc3NzQ0Li5iYWJhMzQ3MWJmNWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmgKQEAgLTk3NCw2ICYjNDM7OTc0LDcgQEAgZW51bSB7CiAvKiBQVUwgVXNlciBSZWdpc3RlcnMgKi8KICNkZWZpbmUgRkJOSUNfQ1NSX1NUQVJUX1BVTF9VU0VSCTB4MzEwMDAJLyogQ1NSIHNlY3Rpb24gZGVsaW1pdGVyICovCiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRwkweDMxMDNkCQkvKiAweGM0MGY0ICovCiYjNDM7I2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERQlDU1JfQklUKDIwKQogI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gJQ1NSX0JJVCgxOSkKICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0JNRQkJQ1NSX0JJVCgxOCkKICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX1JERV9BVFRSCUNTUl9HRU5NQVNLKDE3LCAxNSkKQEAgLTEyMTUsNiAmIzQzOzEyMTYsMTAgQEAgZW51bSB7CiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19MRU5fTUFTSwlERVNDX0dFTk1BU0soNjMsIDQ4KQogI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRU9NCQlERVNDX0JJVCg0NikKICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0FERFJfTUFTSwlERVNDX0dFTk1BU0soNDUsIDMpCiYjNDM7LyogU2V0IHdpdGggRldfQ01QTCB3aGVuIHRoZSBGVyBjb21wbGV0ZWQgYSBkZXNjcmlwdG9yIHdpdGhvdXQgc3VjY2Vzc2Z1bGx5CiYjNDM7ICogcHJvY2Vzc2luZyBpdCAoZS5nLiBhIG1haWxib3ggRE1BIGVycm9yKTsgdGhlIGNvbXBsZXRpb24gaGFzIG5vIHZhbGlkIGRhdGEuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSCURFU0NfQklUKDIpCiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMCURFU0NfQklUKDEpCiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUEwJREVTQ19CSVQoMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYwppbmRleCAzYzQ1NjNjOGY0MDNmLi40NTgxZmQ4YzhlZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuYwpAQCAtNTM5LDggJiM0Mzs1MzksOCBAQCBzdGF0aWMgdm9pZCBmYm5pY19kYmdfZndfbWJ4X2Rpc3BsYXkoc3RydWN0IHNlcV9maWxlICpzLAogCS8qIEdlbmVyYXRlIGhlYWRlciAqLwogCXNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyAmIzM0O1J4XG4mIzM0OyA6ICYjMzQ7VHhcbiYjMzQ7KTsKIAotCXNlcV9wcmludGYocywgJiMzNDtSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkXG4mIzM0OywKLQkJICAgbWJ4LSZndDtyZWFkeSwgbWJ4LSZndDtoZWFkLCBtYngtJmd0O3RhaWwpOwomIzQzOwlzZXFfcHJpbnRmKHMsICYjMzQ7UmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZCByZXNwX2Vycm9yOiAlbGxkXG4mIzM0OywKJiM0MzsJCSAgIG1ieC0mZ3Q7cmVhZHksIG1ieC0mZ3Q7aGVhZCwgbWJ4LSZndDt0YWlsLCBtYngtJmd0O3Jlc3BfZXJyb3IpOwogCiAJc25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgJiMzNDslM3MgJS00cyAlcyAlLTEycyAlcyAlLTNzICUtMTZzXG4mIzM0OywKIAkJICYjMzQ7SWR4JiMzNDssICYjMzQ7TGVuJiMzNDssICYjMzQ7RSYjMzQ7LCAmIzM0O0FkZHImIzM0OywgJiMzNDtGJiMzNDssICYjMzQ7SCYjMzQ7LCAmIzM0O1JhdyYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMKaW5kZXggMGU0NzA4OGVjNDRiYS4uNDIzZjE3OWM5ZDQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMKQEAgLTIwMjUsNyAmIzQzOzIwMjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0gewogCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTSB8CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8CiAJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfAotCQkJCQkgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSywKJiM0MzsJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LIHwKJiM0MzsJCQkJCSAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsCiAJLmdldF9kcnZpbmZvCQkJPSBmYm5pY19nZXRfZHJ2aW5mbywKIAkuZ2V0X3JlZ3NfbGVuCQkJPSBmYm5pY19nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzCQkJPSBmYm5pY19nZXRfcmVncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwppbmRleCAyODNkMjVmYWU3OWU3Li44ZjRhMTk1YmI4ZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCkBAIC02MCw4ICYjNDM7NjAsMTQgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Jlc2V0X2Rlc2NfcmluZyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBtYnhfaWR4KQogCSAqLwogCXN3aXRjaCAobWJ4X2lkeCkgewogCWNhc2UgRkJOSUNfSVBDX01CWF9SWF9JRFg6CiYjNDM7CQkvKiBUaGUgd3JpdGUgcGF0aCBvbmx5IHRlcm1pbmF0ZXMgb3V0c3RhbmRpbmcgcmVxdWVzdHMgd2hlbgomIzQzOwkJICogYm90aCBGTFVTSCBhbmQgRkxVU0hfTU9ERSBhcmUgc2V0LiBXaXRoIEZMVVNIIGFsb25lIHRoZQomIzQzOwkJICogd3JpdGVzIHN0aWxsIG9iZXkgdGhlIGhhbHQgYXNzZXJ0ZWQgYnkgY2xlYXJpbmcgQk1FLCBzbwomIzQzOwkJICogbm90aGluZyBkcmFpbnMgYW5kIEFXX0ZMVVNIX0RPTkUgbmV2ZXIgYXNzZXJ0cy4KJiM0MzsJCSAqLwogCQl3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHLAotCQkgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCk7CiYjNDM7CQkgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8CiYjNDM7CQkgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFKTsKIAkJYnJlYWs7CiAJY2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDoKIAkJd3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRywKQEAgLTI4NSw2ICYjNDM7MjkxLDEyIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3R4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKQogCQlpZiAoIShkZXNjICZhbXA7IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSkKIAkJCWJyZWFrOwogCiYjNDM7CQlpZiAoZGVzYyAmYW1wOyBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7CiYjNDM7CQkJdHhfbWJ4LSZndDtyZXNwX2Vycm9yJiM0MzsmIzQzOzsKJiM0MzsJCQlkZXZfd2FybihmYmQtJmd0O2RldiwKJiM0MzsJCQkJICYjMzQ7RlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCX0KJiM0MzsKIAkJZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTsKIAogCQloZWFkJiM0MzsmIzQzOzsKQEAgLTE2NjYsNiAmIzQzOzE2NzgsMTMgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Byb2Nlc3NfcnhfbXNncyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiAJCWlmICghKGRlc2MgJmFtcDsgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChkZXNjICZhbXA7IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHsKJiM0MzsJCQlyeF9tYngtJmd0O3Jlc3BfZXJyb3ImIzQzOyYjNDM7OwomIzQzOwkJCWRldl93YXJuKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtGVyByZXBvcnRlZCBhbiBlcnJvciBvbiBhbiBSeCBtYWlsYm94IG1lc3NhZ2U7IGRyb3BwaW5nXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBuZXh0X3BhZ2U7CiYjNDM7CQl9CiYjNDM7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGZiZC0mZ3Q7ZGV2LCByeF9tYngtJmd0O2J1Zl9pbmZvW2hlYWRdLmFkZHIsCiAJCQkJCUZCTklDX1JYX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIApAQCAtMTczNCw2ICYjNDM7MTc1Myw3IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiB7CiAJc3RydWN0IGZibmljX2Z3X21ieCAqdHhfbWJ4ID0gJmFtcDtmYmQtJmd0O21ieFtGQk5JQ19JUENfTUJYX1RYX0lEWF07CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAmIzQzOyAxMCAqIEhaICYjNDM7IDE7CiYjNDM7CXU2NCByZXNwX2Vycm9yOwogCWludCBlcnIsIGk7CiAKIAlkbyB7CkBAIC0xNzY0LDYgJiM0MzsxNzg0LDggQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIAkgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlCiAJICogaW4gdGhlIGNhcGFiaWxpdGllcyByZXF1ZXN0IG1lc3NhZ2UuCiAJICovCiYjNDM7c2VuZF9jYXBfcmVxOgomIzQzOwlyZXNwX2Vycm9yID0gdHhfbWJ4LSZndDtyZXNwX2Vycm9yOwogCWVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTsKIAlpZiAoZXJyKQogCQlnb3RvIGNsZWFuX21ieDsKQEAgLTE3ODIsOCAmIzQzOzE4MDQsMTcgQEAgaW50IGZibmljX21ieF9wb2xsX3R4X3JlYWR5KHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIAkJZmJuaWNfbWJ4X3BvbGwoZmJkKTsKIAogCQkvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi8KLQkJaWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpCiYjNDM7CQlpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkgewogCQkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIElmIHRoZSBGVyBjb21wbGV0ZWQgb3VyIGNhcGFiaWxpdGllcyByZXF1ZXN0IHdpdGggYW4gZXJyb3IKJiM0MzsJCSAqIChGV19FUlIpIGl0IHByb2R1Y2VkIG5vIHJlc3BvbnNlOyB0aGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzbwomIzQzOwkJICogcmUtaXNzdWUgdGhlIHJlcXVlc3QgaW5zdGVhZCBvZiB0aW1pbmcgb3V0LgomIzQzOwkJICovCiYjNDM7CQlpZiAodHhfbWJ4LSZndDtyZXNwX2Vycm9yICE9IHJlc3BfZXJyb3IpCiYjNDM7CQkJZ290byBzZW5kX2NhcF9yZXE7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKaW5kZXggZDg0NzIzZTRjZmEzNi4uNWY5OTY5MjQ3ZTMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaApAQCAtMTMsNiAmIzQzOzEzLDcgQEAgc3RydWN0IGZibmljX3Rsdl9tc2c7CiAKIHN0cnVjdCBmYm5pY19md19tYnggewogCXU4IHJlYWR5LCBoZWFkLCB0YWlsOwomIzQzOwl1NjQgcmVzcF9lcnJvcjsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZmJuaWNfdGx2X21zZwkqbXNnOwogCQlkbWFfYWRkcl90CQlhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMKaW5kZXggOGI5YmM5ZThlYTU2Yy4uYzY2OThlMzAwMmExMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jCkBAIC00MzQsNiAmIzQzOzQzNCw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZiZC0mZ3Q7bmV0ZGV2OwomIzQzOwlzdHJ1Y3QgZmJuaWNfbmV0ICpmYm47CiAKIAlpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpCiAJCWdvdG8gbnVsbF91Y19hZGRyOwpAQCAtNDQxLDExICYjNDM7NDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJcnRubF9sb2NrKCk7CiAJbmV0ZGV2X2xvY2sobmV0ZGV2KTsKIAomIzQzOwlmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCW5ldGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKIAomIzQzOwkvKiBUaGUgSVJRcyBhcmUgYWJvdXQgdG8gYmUgZnJlZWQsIHNvIGRyb3AgdGhlIG5hcGkgdmVjdG9yIGNvdW50ICovCiYjNDM7CWZibi0mZ3Q7bnVtX25hcGkgPSAwOwomIzQzOwogCW5ldGRldl91bmxvY2sobmV0ZGV2KTsKIAlydG5sX3VubG9jaygpOwogCkBAIC01MDgsMTYgJiM0Mzs1MTQsMjAgQEAgc3RhdGljIGludCBfX2ZibmljX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJaWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsJbmV0ZGV2X2xvY2sobmV0ZGV2KTsKJiM0MzsKIAlmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJLyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi8KIAlmYm5pY19yZXNldF9xdWV1ZXMoZmJuLCBmYm4tJmd0O251bV90eF9xdWV1ZXMsIGZibi0mZ3Q7bnVtX3J4X3F1ZXVlcyk7CiAKLQlydG5sX2xvY2soKTsKLQluZXRkZXZfbG9jayhuZXRkZXYpOwotCi0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQllcnIgPSBfX2ZibmljX29wZW4oZmJuKTsKJiM0MzsJCS8qIE9uIGZhaWx1cmUgdGhlIHZlY3RvcnMgYXJlIGZyZWVkLCBzbyBkcm9wIHRoZSBjb3VudCAqLwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlmYm4tJmd0O251bV9uYXBpID0gMDsKJiM0MzsJfQogCiAJbmV0ZGV2X3VubG9jayhuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDEyNjgzYjVkMTI1ZTQuLjk3YTFhZGJkOWVhZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC05NDQsNiAmIzQzOzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHsKICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNCUJJVCg2KQogI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTCQlCSVQoNykKICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUCQlCSVQoOSkKIAogLyoqCiAgKiBzdHJ1Y3QgZXRodG9vbF9vcHMgLSBvcHRpb25hbCBuZXRkZXYgb3BlcmF0aW9ucwpAQCAtOTgxLDYgJiM0Mzs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7CiAgKgkgLSBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKCkKICAqCSAtIG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMoKQogICoJIC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaykKJiM0MzsgKgkgLSBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpCiAgKgogICogQGdldF9kcnZpbmZvOiBSZXBvcnQgZHJpdmVyL2RldmljZSBpbmZvcm1hdGlvbi4gTW9kZXJuIGRyaXZlcnMgbm8KICAqCWxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmUKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2NvbW1vbi5oIGIvbmV0L2V0aHRvb2wvY29tbW9uLmgKaW5kZXggNGU1MzU2ZTI2ZjQwMC4uYWUzMmU3ZmRiNTYzYyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvY29tbW9uLmgKQEAgLTE2Myw2ICYjNDM7MTYzLDggQEAgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBldGhjbWQpCiAJCXJldHVybiBvcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUzsKIAljYXNlIEVUSFRPT0xfR0xJTks6CiAJCXJldHVybiBvcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LOwomIzQzOwljYXNlIEVUSFRPT0xfVEVTVDoKJiM0MzsJCXJldHVybiBvcHMtJmd0O29wX25lZWRzX3J0bmwgJmFtcDsgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7CiAJfQogCXJldHVybiBmYWxzZTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjczNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTeXprYWxsZXIgUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpBbHJpZ2h0LCBJIHNlZSBhIGxpc3Qgb2YgZmlsZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY2AsIGFuZCBzbyBvbi4gV2FpdCBhIHNlY29uZC4uLiBgZmJuaWNgISBUaGF0JiMzOTtzIE1ldGEmIzM5O3MgQVNJQyBOSUMgZHJpdmVyLCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciwgcmlnaHQ/IEludGVyZXN0aW5nLgoKQnV0IGhvbGQgb24sIHRoZXJlIGFyZSBhbHNvIG1vZGlmaWNhdGlvbnMgdG8gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gVGhhdCYjMzk7cyBhIGJpdCBtb3JlIHNpZ25pZmljYW50LiBJdCBtYWtlcyBtZSB3b25kZXI6IEFyZSB0aGVzZSBjaGFuZ2VzIHNwZWNpZmljIHRvIHRoZSBgZmJuaWNgIGRyaXZlciwgb3IgYXJlIHRoZXkgbW9yZSBnZW5lcmFsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpb2N0bCBoYW5kbGluZyB3b3JrcywgYW5kIHdoZXRoZXIgdGhvc2UgZXRodG9vbCBjaGFuZ2VzIGFyZSBldmVuIHJlYWNoYWJsZSBpbiBhIGJyb2FkZXIgY29udGV4dC4gSXMgYGZibmljYCB0aGUgb25seSBkcml2ZXIgdXRpbGl6aW5nIHRoZW0/IEkmIzM5O20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgaG93IGBFVEhUT09MX1RFU1RgIGFuZCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC9ldGh0b29sL2AuCgpPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYW5vdGhlciBzdWl0YWJsZSB0b29sIHRvIHNlYXJjaCB0aGUgcmVwb3NpdG9yeSBhbmQgZGV0ZXJtaW5lIHRoZSByZWFjaCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBhY3QgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyOC1cdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyOTpcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMzAtXHQuZ2V0X2RydmluZm9cdFx0XHQ9IGZibmljX2dldF9kcnZpbmZvLFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTQ2LSNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6OTQ3OiNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RcdFx0QklUKDkpXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NDgtXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM4PWV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cdGNhc2UgRVRIVE9PTF9URVNUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTY3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgVXNhZ2UqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgZnVuY3Rpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgcGlucG9pbnRpbmcgZXZlcnkgc2luZ2xlIGNhbGwgc2l0ZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgc2VlIHByZWNpc2VseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nICp3aHkqIHRoZSBmdW5jdGlvbiBleGlzdHMsICp3aGVuKiBpdCYjMzk7cyBuZWVkZWQsIGFuZCwgdWx0aW1hdGVseSwgaWYgaXRzIGJlaGF2aW9yIGlzIGNvcnJlY3Qgb3IgaWYgdGhlcmUgbWF5IGJlIG9wcG9ydHVuaXRpZXMgdG8gc3RyZWFtbGluZSBpdHMgaW1wbGVtZW50YXRpb24gb3IgaXRzIHVzYWdlIGluIG15IGFyZWEgb2YgZXhwZXJ0aXNlLiBEaWdnaW5nIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIGZpbmQgdGhvc2UgY2FsbHMgd2lsbCBnaXZlIG1lIG15IGZpcnN0IGNsdWVzLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2lsbCBpbmZvcm0gdGhlIGRpcmVjdGlvbiBvZiBteSBuZXh0IHN0ZXBzLiBJJiMzOTttIGhvcGluZyB0aGUgY29kZSBpcyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWFzaWx5IHVuZGVyc3Rvb2QsIGJ1dCBJIGFtIHJlYWR5IHRvIGRlbHZlIGZ1cnRoZXIgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMjktLyoqXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzA6ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEzMS0gKiBAZGV2OiB0YXJnZXQgZGV2aWNlXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTM4OmV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM5LXtcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTMyNzI9ZGV2X2V0aHRvb2xfbG9ja2VkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM1OTE6ICogY292ZXJlZCBieSBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoKS9FVEhUT09MX09QX05FRURTX1JUTkxfKi5cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzU5Mi0gKi9cbi0tXG5uZXQvZXRodG9vbC9pb2N0bC5jPTM2MTA9X19kZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIsXG4tLVxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVx0XHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2MjQ6XHRcdCAgICBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpO1xubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI1LVx0aWYgKG5lZWRfcnRubClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjU2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgZXRodG9vbGAmIzM5O3MgSU9DVEwgSGFuZGxpbmcqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmV0L2V0aHRvb2wvaW9jdGwuY2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMzYxMC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIHB1bGwgdGhhdCBjb2RlIGRpcmVjdGx5IGludG8gbXkgdmlldy4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHNwZWNpZmljIGxvY2F0aW9uIHdpbGwgaG9sZCBzb21lIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGBldGh0b29sYCBmcmFtZXdvcmsuIEkgZXhwZWN0IHRvIGJlIGRpZ2dpbmcgaW50byB0aGUgSU9DVEwgaGFuZGxpbmcgbG9naWMgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBidXJpZWQgd2l0aGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvaW9jdGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzYwMDpcdFx0Y2FzZSBFVEhUT09MX1NTRzpcbjM2MDE6XHRcdGNhc2UgRVRIVE9PTF9TVFNPOlxuMzYwMjpcdFx0Y2FzZSBFVEhUT09MX1NHU086XG4zNjAzOlx0XHRjYXNlIEVUSFRPT0xfU0dSTzpcbjM2MDQ6XHRcdFx0cmV0dXJuIHRydWU7XG4zNjA1Olx0XHR9XG4zNjA2Olx0XHRyZXR1cm4gZmFsc2U7XG4zNjA3Olx0fVxuMzYwODpcdFxuMzYwOTpcdHN0YXRpYyBpbnRcbjM2MTA6XHRfX2Rldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcixcbjM2MTE6XHRcdCAgICAgIHUzMiBldGhjbWQsIHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpkZXZsaW5rX3N0YXRlKVxuMzYxMjpcdHtcbjM2MTM6XHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuMzYxNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjM2MTU6XHRcdGJvb2wgbmVlZF9ydG5sO1xuMzYxNjpcdFx0aW50IHJjO1xuMzYxNzpcdFxuMzYxODpcdFx0ZGV2ID0gbmV0ZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLVx1MDAzZWlmcl9uYW1lLCBcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XG4zNjE5Olx0XHRpZiAoIWRldilcbjM2MjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zNjIxOlx0XG4zNjIyOlx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxuMzYyMzpcdFx0XHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XG4zNjI0Olx0XHRcdCAgICBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoZGV2LCBldGhjbWQpO1xuMzYyNTpcdFx0aWYgKG5lZWRfcnRubClcbjM2MjY6XHRcdFx0cnRubF9sb2NrKCk7XG4zNjI3Olx0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbjM2Mjg6XHRcdGlmIChkZXYtXHUwMDNlcmVnX3N0YXRlIFx1MDAzZSBORVRSRUdfUkVHSVNURVJFRCB8fFxuMzYyOTpcdFx0ICAgIGRldi1cdTAwM2Vtb3ZpbmdfbnMgfHwgIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpIHtcbjM2MzA6XHRcdFx0cmMgPSAtRU5PREVWO1xuMzYzMTpcdFx0XHRnb3RvIGV4aXRfb3BzX3VubG9jaztcbjM2MzI6XHRcdH1cbjM2MzM6XHRcbjM2MzQ6XHRcdHJjID0gZGV2X2V0aHRvb2xfbG9ja2VkKG5ldCwgZGV2LCB1c2VyYWRkciwgZXRoY21kLCBkZXZsaW5rX3N0YXRlLFxuMzYzNTpcdFx0XHRcdFx0bmVlZF9ydG5sKTtcbjM2MzY6XHRcbjM2Mzc6XHRleGl0X29wc191bmxvY2s6XG4zNjM4Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuMzYzOTpcdFx0aWYgKG5lZWRfcnRubClcbjM2NDA6XHRcdFx0cnRubF91bmxvY2soKTtcbjM2NDE6XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4zNjQyOlx0XG4zNjQzOlx0XHRyZXR1cm4gcmM7XG4zNjQ0Olx0fVxuMzY0NTpcdFxuMzY0NjpcdGludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXG4zNjQ3Olx0e1xuMzY0ODpcdFx0c3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKnN0YXRlO1xuMzY0OTpcdFx0dTMyIGV0aGNtZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjI3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubGAgaW4gYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgcGFydCB0aGF0IGhhbmRsZXMgYEVUSFRPT0xfVEVTVGAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgZXRodG9vbCBvcGVyYXRpb24gbmVlZHMgdGhlIHJvdXRpbmcvdHJhZmZpYyBjb250cm9sIGxheWVyIChSVE5MKS4gVGhlIGNydWNpYWwgcGFydCBpcyBjaGVja2luZyBgb3BzLSZndDtvcF9uZWVkc19ydG5sYCBhbmQgaWYgaXQgaGFzIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAuCgpNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoaWNoIGRyaXZlcnMgYWN0dWFsbHkgKnVzZSogYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYD8gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUga2VybmVsIHNvdXJjZSB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBzcGVjaWZpYyBmbGFnLiBMb29rcyBsaWtlIHRoZSBvbmx5IGRyaXZlciB1c2luZyBpdCBpcyBgZmJuaWNgLiBIbW0uLi4KCk5vdywgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkuIFdoYXQgZXhhY3RseSAqaXMqIGBmYm5pY2A/IFJpZ2h0LCB0aGF0JiMzOTtzIE1ldGEmIzM5O3MgaG9zdCBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIFBDSSBkcml2ZXIuIFRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgZm9yIGBmYm5pY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgdGhpcyBpcyB0YXJnZXRlZCBmb3IuIFRoZSBLY29uZmlnIHNob3VsZCB0ZWxsIG1lIHdoYXQgc29ydCBvZiBwbGF0Zm9ybXMgb3IgZGV2aWNlcyBhcmUgdXNpbmcgdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgc3BlY2lmaWMgdXNlIGNhc2UgaXMgZm9yIHRoaXMgUlROTCBkZXBlbmRlbmN5LCB3aGljaCBpcyBvbmx5IHNldCBmb3IgdGVzdCBvcGVyYXRpb25zIGluIGBmYm5pY2AuIFRoaXMgY291bGQgZ2l2ZSBzb21lIGluc2lnaHRzIHRvIHNvbWUgdW5pcXVlIGhhcmR3YXJlIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZCTklDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyMDpjb25maWcgRkJOSUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O01ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRoZSBwcm9tcHQsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZTogRHJpdmVycy9OZXQvRXRoZXJuZXQvTWV0YSoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgYSBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEV0aGVybmV0IGRyaXZlciBzdWJzeXN0ZW0uIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvYCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbiB0byBpdHMgcHVycG9zZS4gVGhpcyBsaWtlbHkgaXNuJiMzOTt0IGEgKnNwZWNpZmljKiBkZXZpY2UgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24sIGJ1dCBtb3JlIGxpa2VseSBhIHRvcC1sZXZlbCwgb3JnYW5pemF0aW9uYWwgS2NvbmZpZyBmaWxlLiBJdCYjMzk7cyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgb3ZlcmFyY2hpbmcgZnJhbWV3b3JrIGZvciBFdGhlcm5ldCBzdXBwb3J0LCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhpbmdzIGxpa2U6CgoqICAgKipPcHRpb25zIGZvciBFbmFibGluZy9EaXNhYmxpbmcgdGhlIEV0aGVybmV0IFN1YnN5c3RlbToqKiBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIGZ1bmN0aW9uLCBlbnN1cmluZyB0aGF0IHRoZSBlbnRpcmUgY2F0ZWdvcnkgb2YgRXRoZXJuZXQgZHJpdmVycyBhbmQgdGhlIGFzc29jaWF0ZWQgaW5mcmFzdHJ1Y3R1cmUgY2FuIGJlIGJyb3VnaHQgaW50byB0aGUga2VybmVsIGJ1aWxkIG9yIGV4Y2x1ZGVkLiBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIG1haW4gYENPTkZJR19FVEhFUk5FVGAgb3B0aW9uIGRlY2xhcmVkIGhlcmUsIHBlcmhhcHMgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgdmFsdWVzLgoqICAgKipBZ2dyZWdhdGlvbiBvZiBEZXBlbmRlbmNpZXM6KiogQmVjYXVzZSB0aGUgZHJpdmVycyBhcmUgbGlrZWx5IHZlcnkgZGl2ZXJzZSwgdGhpcyBpcyB3aGVyZSBkZXBlbmRlbmNpZXMgYW5kIHByZXJlcXVpc2l0ZXMgYXJlIGRlZmluZWQgdG8gcHJvdmlkZSBhIHVzZWZ1bCB1c2VyIGV4cGVyaWVuY2UuCiogICAqKk1ldGEtQ29uZmlndXJhdGlvbjoqKiBPcHRpb25zIGFmZmVjdGluZyB0aGUgYnJvYWRlciBFdGhlcm5ldCBsYW5kc2NhcGUsIG5vdCB0aWVkIHRvIGEgc2luZ2xlIHBoeXNpY2FsIGRldmljZSwgYXJlIGRlZmluZWQgaGVyZS4gVGhpcyBtaWdodCBpbmNsdWRlIGNob2ljZXMgYWJvdXQgd2hpY2ggRXRoZXJuZXQgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQsIHdoZXRoZXIgc3BlY2lmaWMgZmVhdHVyZXMgKGxpa2UgVkxBTiBzdXBwb3J0LCBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQpIGFyZSBidWlsdCBpbiwgYW5kIHBlcmhhcHMgZXZlbiBzZWxlY3Rpb24gb2YgYmFzaWMsIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgRXRoZXJuZXQgZHJpdmVycyBkZXBlbmQgb24uIEl0IGNvdWxkIGFsc28gcHJvdmlkZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgYmV0d2VlbiBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdGllcyAoZS5nLiBjaG9pY2Ugb2YgZGlmZmVyZW50IFBIWSBkcml2ZXJzKS4KKiAgICoqT3JnYW5pemF0aW9uIGFuZCBTdHJ1Y3R1cmU6KiogVGhpcyBpcyBhbHNvIGEgZ29vZCBwbGFjZSB0byBjcmVhdGUgc3VibWVudXMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB0aGF0IHByb3ZpZGUgYSBsb2dpY2FsIGdyb3VwaW5nIGZvciBzcGVjaWZpYyB0eXBlcyBvZiBFdGhlcm5ldCBkZXZpY2VzLiBUaGlzIGhlbHBzIHRoZSB1c2VyIGJ5IHByb3ZpZGluZyBhbiBvcmdhbml6ZWQgdmlldyBvZiBhbGwgYXZhaWxhYmxlIEV0aGVybmV0IG9wdGlvbnMuIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciBmb3IgdGhlIHBlcnNvbiBjb25maWd1cmluZyB0aGUga2VybmVsIHRvIGxvY2F0ZSBvcHRpb25zIG9mIGludGVyZXN0LgoqICAgKipEcml2ZXIgU2VsZWN0aW9uOioqIFRoaXMgS2NvbmZpZyBjb3VsZCBhbHNvIGluY2x1ZGUgb3B0aW9ucyB0byBzZWxlY3QgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBkcml2ZXJzLiBQZXJoYXBzIGEgZ2VuZXJpYyBkcml2ZXIgY2FuIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQsIG9yIHNwZWNpZmljIGRyaXZlcnMgYmFzZWQgb24gZGV2aWNlIG1hbnVmYWN0dXJlcnMgY2FuIGJlIHNlbGVjdGVkLgoqICAgKipEZXBlbmRlbmN5IG9uIENvcmUgTmV0d29ya2luZzoqKiBBdCB0aGUgdmVyeSBsZWFzdCwgaXQmIzM5O3MgZ29pbmcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFzIGEgcHJlcmVxdWlzaXRlIGZvciBhbnkgRXRoZXJuZXQgZHJpdmVyIHRvIGZ1bmN0aW9uLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYGNvbmZpZ2AgZGVjbGFyYXRpb25zLCBgbWVudWNvbmZpZ2AgYmxvY2tzIChhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyksIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGBkZWZhdWx0YCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgaGVscGAgdGV4dCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIG9wdGlvbnMuIFRoZSBmaWxlIHdpbGwgdGVsbCB0aGUgdXNlciBob3cgdGhlIEV0aGVybmV0IHN1YnN5c3RlbSBmaXRzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgc3lzdGVtLCB3aGF0IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBtZXQuIEl0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGRvY3VtZW50YXRpb24sIGVzc2VudGlhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ldGEgUGxhdGZvcm1zIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxuICAgNzpcdFx0Ym9vbCBcJiMzNDtNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBkZXNpZ25lZCBieSBNZXRhLCBzYXkgWS5cbiAgMTE6XHRcdCAgVGhhdCYjMzk7cyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE0Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTU6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBNZXRhIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxNjpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE3Olx0XG4gIDE4Olx0aWYgTkVUX1ZFTkRPUl9NRVRBXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEZCTklDXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8IENPTVBJTEVfVEVTVFxuICAyMzpcdFx0ZGVwZW5kcyBvbiAhUzM5MFxuICAyNDpcdFx0ZGVwZW5kcyBvbiBNQVhfU0tCX0ZSQUdTIFx1MDAzYyAyMlxuICAyNTpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDI2Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDI3Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMjg6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjk6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICAzMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMzE6XHRcdHNlbGVjdCBQTERNRldcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cbiAgMzQ6XHRcbiAgMzU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAzNjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuICAzNzpcdFxuICAzODpcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgRGlhZ25vc3RpYyBRdWVyeSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBmaWJlci1vcHRpYyBuZXR3b3JrIGludGVyZmFjZSBjYXJkcyAoZmJuaWMpIOKAkyBlc3NlbnRpYWxseSwgY29uZmlybWluZyB0aGF0IHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCByZXNwb25kaW5nLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggYXQgdGhpcyBwb2ludCBpcyB0byBjaGVjayBkZXZpY2UgSURzIGFuZCBpbml0aWF0ZSBhIHByb2JlLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB1dGlsaXppbmcgYSBzcGVjaWZpYyBjb21tYW5kIG9yIHV0aWxpdHkgdGFpbG9yZWQgdG8gdGhlIHN5c3RlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgcGVyaGFwcyBgbHNwY2lgLCBgbHNod2AsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlbiBjcm9zcy1yZWZlcmVuY2luZyB0aGUgb3V0cHV0IHdpdGggZXhwZWN0ZWQgb3Iga25vd24gZmJuaWMgaWRlbnRpZmllcnMuIEEgJiMzOTtwcm9iZSYjMzk7LCBpbiB0aGlzIGNvbnRleHQsIHN1Z2dlc3RzIGEgYmFzaWMgaGFyZHdhcmUtbGV2ZWwgdGVzdCB0byBjb25maXJtIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYWxsb3dzIG1lIHRvIGltbWVkaWF0ZWx5IGlzb2xhdGUgaGFyZHdhcmUtbGV2ZWwgaXNzdWVzLCByYXRoZXIgdGhhbiB3YXN0aW5nIHRpbWUgY2hhc2luZyBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIGVycm9ycyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IGV2ZW4gYmVpbmcgcmVjb2duaXplZC4gVGhpcyBwcm92aWRlcyB0aGUgbW9zdCBmb3VuZGF0aW9uYWwgaW5mb3JtYXRpb24gdG8gd29yayB3aXRoLCB0byBtb3ZlIGZvcndhcmQgd2l0aCBkaWFnbm9zdGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZC4qZmJuaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYz0yNj1zdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX2luZm8gKmZibmljX2luZm9fdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MzA6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZibmljX3BjaV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMzEtXHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBGQk5JQ19BU0lDLCBmYm5pY19ib2FyZF9hc2ljKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZCTklDIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIGBmYm5pY2AgcGFydCBqdW1wcyBvdXQuIFJpZ2h0IGF3YXksIEkga25vdyBgZmJuaWNgIGlzIE1ldGEmIzM5O3MgcGh5c2ljYWwgQVNJQyBuZXR3b3JrIGludGVyZmFjZSBjYXJkIOKAkyBlc3NlbnRpYWxseSwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMuIFRoZSBraWNrZXIgaXMgdGhhdCBpdCBuZWVkcyBhY3R1YWwgQVNJQyBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIHBsYXkgbmljZSBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIFRoYXQmIzM5O3MgYSBtYWpvciByZWQgZmxhZyBmb3IgZnV6emluZyBmZWFzaWJpbGl0eS4KCk5vdywgbGV0JiMzOTtzIGNhcmVmdWxseSBnbyBvdmVyIHRoZSBkaWZmIGFuZCBtYWtlIHN1cmU6CgpUaGUgZG9jdW1lbnRhdGlvbiBJJiMzOTttIHJlYWRpbmcgbWVudGlvbnMgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0Oy4gVGhpcyBjb3ZlcnMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIGFuIEFTSUMuIEdpdmVuIHRoYXQsIGBmYm5pY2AgaXMgcHJlY2lzZWx5IHRoZSB0eXBlIG9mIGhhcmR3YXJlIHRoZSBkb2N1bWVudGF0aW9uIGlzIHNheWluZyAqbm90KiB0byBmdXp6IGJlY2F1c2UgaXQmIzM5O3Mgbm90IGVtdWxhdGVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNoYW5nZXMuIFRoZSBkaWZmIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYC4gSG1tLCBhbGwgb2YgdGhlc2UgYXJlIGRlZGljYXRlZCB0byBgZmJuaWNgLCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlbiwgdGhlcmUmIzM5O3MgYSBjb3VwbGUgb2YgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGFuZCBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLiBMZXQmIzM5O3MgZGlnIGluLgoKVGhlIGNoYW5nZSBpbiBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGludHJvZHVjZXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gTG9va3MgbGlrZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmVlZGluZyB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXRsaW5rKSB3aGVuIGRlYWxpbmcgd2l0aCBgbmV0aWZfb3BlbigpYCBhbmQgYG5ldGlmX2Nsb3NlKClgIG9wZXJhdGlvbnMuIEluIGBuZXQvZXRodG9vbC9jb21tb24uaGAsIHRoZXJlJiMzOTtzIGEgbmV3IGlubGluZSBmdW5jdGlvbiBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB0aGF0IGNoZWNrcyB0aGlzIGZsYWcsIHNwZWNpZmljYWxseSB3aGVuIGBldGhjbWRgIGlzIGBFVEhUT09MX1RFU1RgLgoKQnV0IHdhaXQsIGlzIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgICpldmVyKiBjYWxsZWQgZm9yIGEgdmlydHVhbCBvciBlbXVsYXRlZCBuZXRkZXY/IFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIGl0ICppcyosIHRoZW4gbWF5YmUgdGhpcyBwYXRjaCBpcyByZWxldmFudCB0byBtb3JlIHRoYW4ganVzdCB0aGUgYGZibmljYCBkcml2ZXIuIFRpbWUgdG8gY2hlY2shIEkgZGlkIGEgZ3JlcCBmb3IgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gVGhlIHJlc3VsdHMgYXJlIGluLiBBbmQgYXMgSSBzdXNwZWN0ZWQsIG9ubHkgYGZibmljX2V0aHRvb2wuY2Agc2V0cyB0aGlzIGZsYWcuIE5vIG90aGVyIGRyaXZlciBkb2VzIGluIHRoZSBlbnRpcmUga2VybmVsLgoKU28sIGZvciBldmVyeSBvdGhlciBuZXQgZGV2aWNlLCB3aGVuIGBldGhjbWRgIGlzIGBFVEhUT09MX1RFU1RgLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCB3aWxsIGNoZWNrIGlmIHRoYXQgZGV2aWNlJiMzOTtzIGBvcHMtJmd0O29wX25lZWRzX3J0bmxgIGhhcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHNldC4gU2luY2Ugb3RoZXIgZHJpdmVycyYjMzk7IGBvcHMtJmd0O29wX25lZWRzX3J0bmxgIGlzIHplcm8sIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgICphbHdheXMqIHJldHVybnMgYGZhbHNlYC4KCk5vdywgYmVmb3JlIHRoaXMgcGF0Y2gsIHdoYXQgZGlkIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHJldHVybiB3aGVuIGBldGhjbWRgIHdhcyBgRVRIVE9PTF9URVNUYD8gR290dGEgY2hlY2sgdGhlIGhpc3RvcnkgYXJvdW5kIGxpbmUgMTYwIG9mIGBuZXQvZXRodG9vbC9jb21tb24uaGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvY29tbW9uLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHM7XG4gMTQxOlx0XG4gMTQyOlx0XHRzd2l0Y2ggKGV0aGNtZCkge1xuIDE0MzpcdFx0Y2FzZSBFVEhUT09MX0dMSU5LU0VUVElOR1M6XG4gMTQ0Olx0XHRjYXNlIEVUSFRPT0xfR1NFVDpcbiAxNDU6XHRcdGNhc2UgRVRIVE9PTF9TTElOS1NFVFRJTkdTOlxuIDE0NjpcdFx0Y2FzZSBFVEhUT09MX1NTRVQ6XG4gMTQ3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcbiAxNDg6XHRcdGNhc2UgRVRIVE9PTF9TUEZMQUdTOlxuIDE0OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEZMQUdTO1xuIDE1MDpcdFx0Y2FzZSBFVEhUT09MX1NSSU5HUEFSQU06XG4gMTUxOlx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU07XG4gMTUyOlx0XHRjYXNlIEVUSFRPT0xfU0NIQU5ORUxTOlxuIDE1MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG4gMTU0Olx0XHRjYXNlIEVUSFRPT0xfU0NPQUxFU0NFOlxuIDE1NTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XG4gMTU2Olx0XHRjYXNlIEVUSFRPT0xfR1BBVVNFUEFSQU06XG4gMTU3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xuIDE1ODpcdFx0Y2FzZSBFVEhUT09MX1NQQVVTRVBBUkFNOlxuIDE1OTpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcbiAxNjA6XHRcdGNhc2UgRVRIVE9PTF9TUlNTSDpcbiAxNjE6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSDpcbiAxNjI6XHRcdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxuIDE2MzpcdFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG4gMTY0Olx0XHRjYXNlIEVUSFRPT0xfR0xJTks6XG4gMTY1Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xuIDE2NjpcdFx0Y2FzZSBFVEhUT09MX1RFU1Q6XG4gMTY3Olx0XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gMTY4Olx0XHR9XG4gMTY5Olx0XHRyZXR1cm4gZmFsc2U7XG4gMTcwOlx0fVxuIDE3MTpcdFxuIDE3MjpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19FVEhUT09MX05FVExJTkspXG4gMTczOlx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XG4gMTc0Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV0aHRvb2wgUGF0Y2gqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbCB3aXRoIHRoaXMgZXRodG9vbCBwYXRjaC4gQmVmb3JlIHRoaXMgdXBkYXRlLCB0aGUgYEVUSFRPT0xfVEVTVGAgaW9jdGwgY2FsbCB3YXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5IHdpdGhpbiB0aGUgYGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubCgpYCBmdW5jdGlvbiYjMzk7cyBzd2l0Y2ggc3RhdGVtZW50LiBJdCBqdXN0IHNsaXBwZWQgdGhyb3VnaCBhbmQgcmV0dXJuZWQgYGZhbHNlYCwgd2hpY2ggaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBOb3csIHdpdGggdGhlIHBhdGNoLCB0aGUgY29kZSBmaXJzdCBjaGVja3MgaWYgdGhlIGRyaXZlciBleHBsaWNpdGx5ICpkb2VzbiYjMzk7dCogcmVxdWlyZSBSVE5MIGZvciB0aGUgdGVzdCBvcGVyYXRpb24gYnkgY2hlY2tpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gSWYgaXQgKmRvZXNuJiMzOTt0KiB0aGVuIGl0IGZhbGxzIHRocm91Z2ggdG8gY2hlY2tpbmcgYG9wcy0mZ3Q7b3BfbmVlZHNfcnRubCAmYW1wOyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdoaWNoIGVmZmVjdGl2ZWx5IGV2YWx1YXRlcyB0byBgZmFsc2VgIGJlY2F1c2Ugb2YgdGhlIGJpdG1hc2ssIG1lYW5pbmcgUlROTCBpcyBub3QgYWNxdWlyZWQuCgpUaGUgb25seSBkcml2ZXIgSSBjYW4gc2VlIHRoYXQgYWN0dWFsbHkgKmRvZXMqIHNldCBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGlzIHRoZSBgZmJuaWNgIGRyaXZlciwgYW5kIHRoYXQmIzM5O3MgYSBwaHlzaWNhbCBBU0lDIE5JQyBkcml2ZXIuIFNvLCB3aXRoIHRoaXMgcGF0Y2gsIHRoZSBgRVRIVE9PTF9URVNUYCBjYWxsIGZvciBgZmJuaWNgIHdpbGwgY29ycmVjdGx5IGdyYWIgdGhlIGBydG5sX2xvY2tgIGJlZm9yZSBleGVjdXRpbmcgdGhlIGBzZWxmX3Rlc3RgIG9wZXJhdGlvbiwgd2hpY2ggaXQgbmVlZHMgYmVjYXVzZSB0aGUgYGZibmljYCBzZWxmLXRlc3Qgb3BzIGFyZSBSVE5MLXByb3RlY3RlZC4gTWFrZXMgc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBubyB2aXJ0dWFsIGRldmljZXMgYXJlIGltcGFjdGVkIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlYmFzZSB0byBzZWUgaWYgYW55IG9mIHRoZSB2aXJ0dWFsIGRldmljZXPigJR0dW4sIHRhcCwgZHVtbXksIHZldGgsIGxvb3BiYWNrLCB2aXJ0aW9fbmV0LCB0aGUgdXN1YWwgc3VzcGVjdHPigJRhcmUgc2V0dGluZyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGFueXdoZXJlLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGluIHRob3NlIGVudmlyb25tZW50cy4gSSYjMzk7bGwgc2VhcmNoIGZvciBgb3BfbmVlZHNfcnRubGAgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvcF9uZWVkc19ydG5sJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXYtZmVhdHVyZXMucnN0PTgxPW9wdCBiYWNrIGludG8gcnRubF9sb2NrIGJ5IHNldHRpbmcgdGhlIG1hdGNoaW5nIEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdDo4MjpiaXQgaW4gYGBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubGBgLiBUaGUgZXRodG9vbCBjb3JlIHRoZW4ga2VlcHNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXYtZmVhdHVyZXMucnN0LTgzLXJ0bmxfbG9jayBoZWxkIGFjcm9zcyB0aG9zZSBTRVQgY2FsbGJhY2tzIHNvIHRoZSBjb250cmFjdCBhYm92ZSBzdGlsbFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zNzg9aXMgaGVsZCBhcm91bmQgc3BlY2lmaWMgb3BlcmF0aW9ucyAoYm90aCBTRVQgYW5kIEdFVCkgYnkgc2V0dGluZ1xuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0OjM3OTphcHByb3ByaWF0ZSBiaXRzIGluIGBgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxgYCAoaWYgdGhlIG5lY2Vzc2FyeVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0LTM4MC1gYEVUSFRPT0xfT1BfTkVFRFNfUlROTF8qYGAgYml0IGRvZXNuJiMzOTt0IGV4aXN0LCBqdXN0IGFkZCBpdCkuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmMtNTczMi1cdC5yeGZoX3ByaXZfc2l6ZVx0XHRcdD0gc2l6ZW9mKHN0cnVjdCBibnh0X3Jzc19jdHgpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYzo1NzMzOlx0Lm9wX25lZWRzX3J0bmxcdFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYy01NzM0LVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM9OTgyPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBndmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk4NS1cdFx0XHRcdCBFVEhUT09MX1JJTkdfVVNFX1JYX0JVRl9MRU4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmM6OTg2Olx0Lm9wX25lZWRzX3J0bmwgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYy05ODctXHRcdFx0IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jPTE4NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpYXZmX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMtMTg1Ny1cdC5zdXBwb3J0ZWRfaW5wdXRfeGZybVx0PSBSWEhfWEZSTV9TWU1fWE9SLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYzoxODU4Olx0Lm9wX25lZWRzX3J0bmxcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jLTE4NTktXHQuZ2V0X2RydmluZm9cdFx0PSBpYXZmX2dldF9kcnZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM9MjcxNz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYy0yNzIxLVx0LnJ4ZmhfbWF4X251bV9jb250ZXh0c1x0PSBNTFg1RV9NQVhfTlVNX1JTUyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmM6MjcyMjpcdC5vcF9uZWVkc19ydG5sXHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jLTI3MjMtXHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmM9NDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWVfcmVwX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYy00MjAtXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jOjQyMTpcdC5vcF9uZWVkc19ydG5sXHQgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQyMi1cdFx0XHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jPTI4ND1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWlfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYy0yODctXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyODg6XHQub3BfbmVlZHNfcnRubFx0ICAgID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTI4OS1cdFx0XHQgICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYz0zMTI9Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1seDVpX3BrZXlfZXRodG9vbF9vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjMxMzpcdC5vcF9uZWVkc19ydG5sXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTkssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTMxNC1cdC5nZXRfZHJ2aW5mbyAgICAgICAgPSBtbHg1aV9nZXRfZHJ2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4c3dfc3BfcG9ydF9ldGh0b29sX29wcyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY0LVx0LmNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZFx0PSB0cnVlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fZXRodG9vbC5jOjEyNjU6XHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY2LVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYz0yMDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyMi1cdC5yeGZoX21heF9udW1fY29udGV4dHNcdFx0PSBGQk5JQ19SUENfUlNTX1RCTF9DT1VOVCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jOjIwMjM6XHQub3BfbmVlZHNfcnRubFx0XHRcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUyB8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDI0LVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTSB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmM9ODYzPWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYW5hX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jLTg3MC1cdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkVfVFgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2V0aHRvb2wuYzo4NzE6XHQub3BfbmVlZHNfcnRubFx0XHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMtODcyLVx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYz0yMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuc2ltX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjExLVx0XHRcdFx0XHQgIEVUSFRPT0xfUklOR19VU0VfSERTX1RIUlMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZXRodG9vbC5jOjIxMjpcdC5vcF9uZWVkc19ydG5sXHRcdFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTMtXHQuZ2V0X3BhdXNlX3N0YXRzXHQgICAgICAgID0gbnNpbV9nZXRfcGF1c2Vfc3RhdHMsXG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg9OTIzPXN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05MzMtXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5MzQ6LyogQml0cyBmb3IgZXRodG9vbF9vcHM6Om9wX25lZWRzX3J0bmxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTkzNS0gKiBMSU5LU0VUVElOR1MgY292ZXIgYSBudW1iZXIgb2YgY29tbWFuZHMsIGJ1dCBpbiBtb3N0IGNhc2VzIHdlIHdhbnQgdG8ga2VlcFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk3NC0gKiBAc3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM6IGJpdGZpZWxkIG9mIHN1cHBvcnRlZCBod3RzdGFtcCBxdWFsaWZpZXIuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NzU6ICogQG9wX25lZWRzX3J0bmw6IG1hc2sgb2YgJUVUSFRPT0xfT1BfTkVFRFNfUlROTF8qIGJpdHMuXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NzYtICpcdEZvciB1c2Ugd2l0aCBvcHMtbG9ja2VkIGRyaXZlcnMgKGlnbm9yZWQgb3RoZXJ3aXNlKS4gU2VsZWN0cyB3aGljaFxuLS1cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTEtICogdGhlIGRyaXZlciBvcHRzIGluIHZpYSB0aGUgbWF0Y2hpbmcgYGBFVEhUT09MX09QX05FRURTX1JUTkxfKmBgIGJpdFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTE5MjogKiBpbiBAb3BfbmVlZHNfcnRubC5cbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTMtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0xMjAyPXN0cnVjdCBldGh0b29sX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTIxNC1cdHUzMlx0c3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM7XG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMjE1Olx0dTMyXHRvcF9uZWVkc19ydG5sO1xuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTIxNi1cdHZvaWRcdCgqZ2V0X2RydmluZm8pKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9ODE9Ym9vbCBfX2V0aHRvb2xfZGV2X21tX3N1cHBvcnRlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC04OC0gKiBSZXR1cm46IHRydWUgaWYgQGNtZCBpcyBhIGNvbW1hbmQgZm9yIHdoaWNoIEBkZXYgaGFzIG9wdGVkLWluIHRvXG5uZXQvZXRodG9vbC9jb21tb24uaDo4OTogKiBrZWVwaW5nIHJ0bmxfbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbCAodmlhIG9wX25lZWRzX3J0bmwpLlxubmV0L2V0aHRvb2wvY29tbW9uLmgtOTAtICovXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmg9OTI9ZXRodG9vbF9ubF9tc2dfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjbWQpXG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTAwLVx0Y2FzZSBFVEhUT09MX01TR19MSU5LTU9ERVNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAxOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDItXHRjYXNlIEVUSFRPT0xfTVNHX1BSSVZGTEFHU19TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMDM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDQtXHRjYXNlIEVUSFRPT0xfTVNHX1JJTkdTX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwNTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwNi1cdGNhc2UgRVRIVE9PTF9NU0dfQ0hBTk5FTFNfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA3Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDgtXHRjYXNlIEVUSFRPT0xfTVNHX0NPQUxFU0NFX1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEwOTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEwLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTE6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEyLVx0Y2FzZSBFVEhUT09MX01TR19QQVVTRV9TRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE0LVx0Y2FzZSBFVEhUT09MX01TR19SU1NfU0VUOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTE1Olx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTYtXHRjYXNlIEVUSFRPT0xfTVNHX0xJTktTVEFURV9HRVQ6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTc6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTE4LVx0Y2FzZSBFVEhUT09MX01TR19UU0NPTkZJR19HRVQ6XG4tLVxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM0LSAqIFJldHVybjogdHJ1ZSBpZiBAZXRoY21kIGlzIGEgY29tbWFuZCBmb3Igd2hpY2ggQGRldiBoYXMgb3B0ZWQtaW4gdG9cbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzNTogKiBrZWVwaW5nIHJ0bmxfbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbCAodmlhIG9wX25lZWRzX3J0bmwpLlxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM2LSAqL1xuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcbi0tXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDYtXHRjYXNlIEVUSFRPT0xfU1NFVDpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE0NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTQ4LVx0Y2FzZSBFVEhUT09MX1NQRkxBR1M6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNDk6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQRkxBR1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTAtXHRjYXNlIEVUSFRPT0xfU1JJTkdQQVJBTTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1MTpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Mi1cdGNhc2UgRVRIVE9PTF9TQ0hBTk5FTFM6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTM6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUztcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1NC1cdGNhc2UgRVRIVE9PTF9TQ09BTEVTQ0U6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTU6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDT0FMRVNDRTtcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Ni1cdGNhc2UgRVRIVE9PTF9HUEFVU0VQQVJBTTpcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE1NzpcdFx0cmV0dXJuIG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sIFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR1BBVVNFUEFSQU07XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTgtXHRjYXNlIEVUSFRPT0xfU1BBVVNFUEFSQU06XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTk6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTYwLVx0Y2FzZSBFVEhUT09MX1NSU1NIOlxuLS1cbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Mi1cdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTYzOlx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjQtXHRjYXNlIEVUSFRPT0xfR0xJTks6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjU6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xubmV0L2V0aHRvb2wvY29tbW9uLmgtMTY2LVx0Y2FzZSBFVEhUT09MX1RFU1Q6XG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDY1CgkJCQkJCQlvdXRwdXQ6IDE0OAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvKmAgZGlyZWN0b3J5LiBBaCwgdGhhdCYjMzk7cyB0aGUgZmJuaWMgZHJpdmVyIOKAkyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS4gSXQmIzM5O3MgYSBQQ0kgZHJpdmVyIGZvciB0aGVpciBwaHlzaWNhbCBNZXRhIEFTSUMgTklDcy4gQW5kIHJpZ2h0IGF3YXksIGEgcmVkIGZsYWcg4oCTIHRoaXMgaGFyZHdhcmUgKmNhbiYjMzk7dCogYmUgZW11bGF0ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgY29uc3RyYWludC4KCk5leHQsIEkgc2VlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvZXRodG9vbC5oYCBhbmQgYG5ldC9ldGh0b29sL2NvbW1vbi5oYC4gVGhleSYjMzk7cmUgYWRkaW5nIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdoaWNoIGlzIEJJVCg5KSwgYW5kIHVwZGF0aW5nIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHRvIGNoZWNrIGZvciB0aGlzIGZsYWcgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYEVUSFRPT0xfVEVTVGAgY2FzZS4gQnV0IGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogbm8gZHJpdmVycyB0aGF0IHdlIGNhbiBhY3R1YWxseSAqcmVhY2gqIG9yIGVtdWxhdGUg4oCTIHRoZSB0eXBpY2FsIFFFTVUvR0NFIGRldmljZXMg4oCTIGFyZSBzZXR0aW5nIHRoaXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBmbGFnLiBPbmx5IHRoZSBmYm5pYyBkcml2ZXIgc2V0cyBpdC4gU28sIGVzc2VudGlhbGx5LCB0aGlzIGNoYW5nZSBoYXMgbm8gb3BlcmF0aW9uYWwgaW1wYWN0IG9uIGFueSByZWFjaGFibGUgZGV2aWNlLiBJdCYjMzk7cyBqdXN0IGdvaW5nIHRvIHJldHVybiAwL2ZhbHNlLCBzYW1lIGFzIGJlZm9yZSwgZXZlcnl3aGVyZSBleGNlcHQgb24gdGhlIGZibmljIGhhcmR3YXJlLCB3aGljaCB3ZSBjYW4mIzM5O3QgdGVzdCBhbnl3YXkuIEFuZCB0aGUgZmJuaWMgZHJpdmVyICppdHNlbGYqIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEFTSUMuCgpOb3csIGNvbnNpZGVyaW5nIHRoYXQsIGFuZCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBkZWZpbml0aW9uIG9mIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSAod2hpY2ggaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMgbGlrZSBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSwgZXRjLiksIGFsbCBvZiB3aGljaCByZXF1aXJlIGFjdHVhbCBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gUUVNVSwgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuCgpXb3J0aEZ1enppbmc/IE5vLiBGb2N1c1N5bWJvbHM/IEVtcHR5LiBFbmFibGVDb25maWdzPyBFbXB0eS4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIGp1c3QgdG8gYmUgc3VyZSwgYW5kIHRoZW4gZm9ybXVsYXRlIGEgY29uY2lzZSwgcHJlY2lzZSBSZWFzb25pbmcuIFRoZW4sIEkmIzM5O2xsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSAoZmJuaWMpIGRyaXZlciBhbmQgYWRkcyB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyB0byB0aGUgY29yZSBldGh0b29sIGluZnJhc3RydWN0dXJlIHNwZWNpZmljYWxseSBmb3IgZmJuaWMuIFRoZSBmYm5pYyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSBwaHlzaWNhbCBBU0lDIG5ldHdvcmsgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIG5vIHJlYWNoYWJsZSB2aXJ0dWFsL2VtdWxhdGVkIGRyaXZlcnMgc2V0IHRoZSBuZXcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NDguOTQzMjA4MDcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgzMTIxMzI2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UgKGZibmljKSBkcml2ZXIgYW5kIGFkZHMgdGhlIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcgdG8gdGhlIGNvcmUgZXRodG9vbCBpbmZyYXN0cnVjdHVyZSBzcGVjaWZpY2FsbHkgZm9yIGZibmljLiBUaGUgZmJuaWMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkcml2ZXIgZm9yIE1ldGEgcGh5c2ljYWwgQVNJQyBuZXR3b3JrIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCBubyByZWFjaGFibGUgdmlydHVhbC9lbXVsYXRlZCBkcml2ZXJzIHNldCB0aGUgbmV3IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGZsYWcuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NDguOTQzMjE1MDUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUzNDU0NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjA2OTAyNzdmNjdhMjdlNDk5YTBlNjgxNGY5Yjg1YjkxNWUyOTM0OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIyOjQxOjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XFxuIC8qIFBVTCBVc2VyIFJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIEZCTklDX0NTUl9TVEFSVF9QVUxfVVNFUlxcdDB4MzEwMDBcXHQvKiBDU1Igc2VjdGlvbiBkZWxpbWl0ZXIgKi9cXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdcXHQweDMxMDNkXFx0XFx0LyogMHhjNDBmNCAqL1xcbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXFx0Q1NSX0JJVCgyMClcXG4gI2RlZmluZSBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hcXHRDU1JfQklUKDE5KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19CTUVcXHRcXHRDU1JfQklUKDE4KVxcbiAjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19SREVfQVRUUlxcdENTUl9HRU5NQVNLKDE3LCAxNSlcXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19MRU5fTUFTS1xcdERFU0NfR0VOTUFTSyg2MywgNDgpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVxcdFxcdERFU0NfQklUKDQ2KVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcXHRERVNDX0dFTk1BU0soNDUsIDMpXFxuKy8qIFNldCB3aXRoIEZXX0NNUEwgd2hlbiB0aGUgRlcgY29tcGxldGVkIGEgZGVzY3JpcHRvciB3aXRob3V0IHN1Y2Nlc3NmdWxseVxcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cXG4rICovXFxuKyNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUlxcdERFU0NfQklUKDIpXFxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUExcXHRERVNDX0JJVCgxKVxcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcXHRERVNDX0JJVCgwKVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbmluZGV4IDNjNDU2M2M4ZjQwM2YuLjQ1ODFmZDhjOGVkZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xcbkBAIC01MzksOCArNTM5LDggQEAgc3RhdGljIHZvaWQgZmJuaWNfZGJnX2Z3X21ieF9kaXNwbGF5KHN0cnVjdCBzZXFfZmlsZSAqcyxcXG4gXFx0LyogR2VuZXJhdGUgaGVhZGVyICovXFxuIFxcdHNlcV9wdXRzKHMsIG1ieF9pZHggPT0gRkJOSUNfSVBDX01CWF9SWF9JRFggPyBcXFwiUnhcXFxcblxcXCIgOiBcXFwiVHhcXFxcblxcXCIpO1xcbiBcXG4tXFx0c2VxX3ByaW50ZihzLCBcXFwiUmR5OiAlZCBIZWFkOiAlZCBUYWlsOiAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgbWJ4LVxcdTAwM2VyZWFkeSwgbWJ4LVxcdTAwM2VoZWFkLCBtYngtXFx1MDAzZXRhaWwpO1xcbitcXHRzZXFfcHJpbnRmKHMsIFxcXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbGRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIG1ieC1cXHUwMDNlcmVhZHksIG1ieC1cXHUwMDNlaGVhZCwgbWJ4LVxcdTAwM2V0YWlsLCBtYngtXFx1MDAzZXJlc3BfZXJyb3IpO1xcbiBcXG4gXFx0c25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgXFxcIiUzcyAlLTRzICVzICUtMTJzICVzICUtM3MgJS0xNnNcXFxcblxcXCIsXFxuIFxcdFxcdCBcXFwiSWR4XFxcIiwgXFxcIkxlblxcXCIsIFxcXCJFXFxcIiwgXFxcIkFkZHJcXFwiLCBcXFwiRlxcXCIsIFxcXCJIXFxcIiwgXFxcIlJhd1xcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuaW5kZXggMGU0NzA4OGVjNDRiYS4uNDIzZjE3OWM5ZDQ3NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jXFxuQEAgLTIwMjUsNyArMjAyNSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmJuaWNfZXRodG9vbF9vcHMgPSB7XFxuIFxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NQQVVTRVBBUkFNIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG4gXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbitcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QsXFxuIFxcdC5nZXRfZHJ2aW5mb1xcdFxcdFxcdD0gZmJuaWNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfcmVnc19sZW5cXHRcXHRcXHQ9IGZibmljX2dldF9yZWdzX2xlbixcXG4gXFx0LmdldF9yZWdzXFx0XFx0XFx0PSBmYm5pY19nZXRfcmVncyxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uOGY0YTE5NWJiOGVkMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNjAsOCArNjAsMTQgQEAgc3RhdGljIHZvaWQgZmJuaWNfbWJ4X3Jlc2V0X2Rlc2NfcmluZyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBtYnhfaWR4KVxcbiBcXHQgKi9cXG4gXFx0c3dpdGNoIChtYnhfaWR4KSB7XFxuIFxcdGNhc2UgRkJOSUNfSVBDX01CWF9SWF9JRFg6XFxuK1xcdFxcdC8qIFRoZSB3cml0ZSBwYXRoIG9ubHkgdGVybWluYXRlcyBvdXRzdGFuZGluZyByZXF1ZXN0cyB3aGVuXFxuK1xcdFxcdCAqIGJvdGggRkxVU0ggYW5kIEZMVVNIX01PREUgYXJlIHNldC4gV2l0aCBGTFVTSCBhbG9uZSB0aGVcXG4rXFx0XFx0ICogd3JpdGVzIHN0aWxsIG9iZXkgdGhlIGhhbHQgYXNzZXJ0ZWQgYnkgY2xlYXJpbmcgQk1FLCBzb1xcbitcXHRcXHQgKiBub3RoaW5nIGRyYWlucyBhbmQgQVdfRkxVU0hfRE9ORSBuZXZlciBhc3NlcnRzLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGRyxcXG4tXFx0XFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0gpO1xcbitcXHRcXHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCB8XFxuK1xcdFxcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIX01PREUpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDpcXG4gXFx0XFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRyxcXG5AQCAtMjg1LDYgKzI5MSwxMiBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc190eF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4gXFx0XFx0aWYgKCEoZGVzYyBcXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19DTVBMKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHRcXHRpZiAoZGVzYyBcXHUwMDI2IEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlIpIHtcXG4rXFx0XFx0XFx0dHhfbWJ4LVxcdTAwM2VyZXNwX2Vycm9yKys7XFxuK1xcdFxcdFxcdGRldl93YXJuKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcIkZXIGNvbXBsZXRlZCBhIFR4IG1haWxib3ggcmVxdWVzdCB3aXRoIGFuIGVycm9yXFxcXG5cXFwiKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0ZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTtcXG4gXFxuIFxcdFxcdGhlYWQrKztcXG5AQCAtMTY2Niw2ICsxNjc4LDEzIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3J4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiBcXHRcXHRpZiAoIShkZXNjIFxcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdGlmIChkZXNjIFxcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xcbitcXHRcXHRcXHRyeF9tYngtXFx1MDAzZXJlc3BfZXJyb3IrKztcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRlcgcmVwb3J0ZWQgYW4gZXJyb3Igb24gYW4gUnggbWFpbGJveCBtZXNzYWdlOyBkcm9wcGluZ1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9wYWdlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShmYmQtXFx1MDAzZWRldiwgcnhfbWJ4LVxcdTAwM2VidWZfaW5mb1toZWFkXS5hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRGQk5JQ19SWF9QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuIFxcbkBAIC0xNzM0LDYgKzE3NTMsNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19md19tYnggKnR4X21ieCA9IFxcdTAwMjZmYmQtXFx1MDAzZW1ieFtGQk5JQ19JUENfTUJYX1RYX0lEWF07XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMCAqIEhaICsgMTtcXG4rXFx0dTY0IHJlc3BfZXJyb3I7XFxuIFxcdGludCBlcnIsIGk7XFxuIFxcbiBcXHRkbyB7XFxuQEAgLTE3NjQsNiArMTc4NCw4IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXFxuIFxcdCAqIG1nbXQudmVyc2lvbiBvbmNlIHdlIGdldCB0aGUgYWN0dWFsIHZlcnNpb24gZnJvbSB0aGUgZmlybXdhcmVcXG4gXFx0ICogaW4gdGhlIGNhcGFiaWxpdGllcyByZXF1ZXN0IG1lc3NhZ2UuXFxuIFxcdCAqL1xcbitzZW5kX2NhcF9yZXE6XFxuK1xcdHJlc3BfZXJyb3IgPSB0eF9tYngtXFx1MDAzZXJlc3BfZXJyb3I7XFxuIFxcdGVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBjbGVhbl9tYng7XFxuQEAgLTE3ODIsOCArMTgwNCwxNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiBcXHRcXHRmYm5pY19tYnhfcG9sbChmYmQpO1xcbiBcXG4gXFx0XFx0Lyogc2V0IGVyciwgYnV0IHdhaXQgdGlsbCBtZ210LnZlcnNpb24gY2hlY2sgdG8gcmVwb3J0IGl0ICovXFxuLVxcdFxcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKVxcbitcXHRcXHRpZiAoIXRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0aW1lb3V0KSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRVRJTUVET1VUO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogSWYgdGhlIEZXIGNvbXBsZXRlZCBvdXIgY2FwYWJpbGl0aWVzIHJlcXVlc3Qgd2l0aCBhbiBlcnJvclxcbitcXHRcXHQgKiAoRldfRVJSKSBpdCBwcm9kdWNlZCBubyByZXNwb25zZTsgdGhlIHJpbmcgaXMgbm90IHdlZGdlZCwgc29cXG4rXFx0XFx0ICogcmUtaXNzdWUgdGhlIHJlcXVlc3QgaW5zdGVhZCBvZiB0aW1pbmcgb3V0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHR4X21ieC1cXHUwMDNlcmVzcF9lcnJvciAhPSByZXNwX2Vycm9yKVxcbitcXHRcXHRcXHRnb3RvIHNlbmRfY2FwX3JlcTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjVmOTk2OTI0N2UzMDUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXFxuQEAgLTEzLDYgKzEzLDcgQEAgc3RydWN0IGZibmljX3Rsdl9tc2c7XFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHtcXG4gXFx0dTggcmVhZHksIGhlYWQsIHRhaWw7XFxuK1xcdHU2NCByZXNwX2Vycm9yO1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmJuaWNfdGx2X21zZ1xcdCptc2c7XFxuIFxcdFxcdGRtYV9hZGRyX3RcXHRcXHRhZGRyO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xcbmluZGV4IDhiOWJjOWU4ZWE1NmMuLmM2Njk4ZTMwMDJhMTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmNcXG5AQCAtNDM0LDYgKzQzNCw3IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBmYmQtXFx1MDAzZW5ldGRldjtcXG4rXFx0c3RydWN0IGZibmljX25ldCAqZmJuO1xcbiBcXG4gXFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxcbiBcXHRcXHRnb3RvIG51bGxfdWNfYWRkcjtcXG5AQCAtNDQxLDExICs0NDIsMTYgQEAgc3RhdGljIGludCBmYm5pY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cnRubF9sb2NrKCk7XFxuIFxcdG5ldGRldl9sb2NrKG5ldGRldik7XFxuIFxcbitcXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXG4gXFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xcbiBcXG4gXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcXG4gXFx0XFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xcbiBcXG4rXFx0LyogVGhlIElSUXMgYXJlIGFib3V0IHRvIGJlIGZyZWVkLCBzbyBkcm9wIHRoZSBuYXBpIHZlY3RvciBjb3VudCAqL1xcbitcXHRmYm4tXFx1MDAzZW51bV9uYXBpID0gMDtcXG4rXFxuIFxcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gXFxuQEAgLTUwOCwxNiArNTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0cnRubF9sb2NrKCk7XFxuK1xcdG5ldGRldl9sb2NrKG5ldGRldik7XFxuK1xcbiBcXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4gXFx0LyogUmVzZXQgdGhlIHF1ZXVlcyBpZiBuZWVkZWQgKi9cXG4gXFx0ZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLVxcdTAwM2VudW1fdHhfcXVldWVzLCBmYm4tXFx1MDAzZW51bV9yeF9xdWV1ZXMpO1xcbiBcXG4tXFx0cnRubF9sb2NrKCk7XFxuLVxcdG5ldGRldl9sb2NrKG5ldGRldik7XFxuLVxcbi1cXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxcbitcXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XFxuIFxcdFxcdGVyciA9IF9fZmJuaWNfb3BlbihmYm4pO1xcbitcXHRcXHQvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi9cXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0ZmJuLVxcdTAwM2VudW1fbmFwaSA9IDA7XFxuK1xcdH1cXG4gXFxuIFxcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcXG4gXFx0cnRubF91bmxvY2soKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDEyNjgzYjVkMTI1ZTQuLjk3YTFhZGJkOWVhZWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbkBAIC05NDQsNiArOTQ0LDcgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVxcdEJJVCg2KVxcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1NcXHRcXHRCSVQoNylcXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbiBcXG4gLyoqXFxuICAqIHN0cnVjdCBldGh0b29sX29wcyAtIG9wdGlvbmFsIG5ldGRldiBvcGVyYXRpb25zXFxuQEAgLTk4MSw2ICs5ODIsNyBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuICAqXFx0IC0gbmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcygpXFxuICAqXFx0IC0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcygpXFxuICAqXFx0IC0gZXRodG9vbF9vcF9nZXRfbGluaygpIChzeW5jcyBsaW5rIHdhdGNoIHVuZGVyIHJ0bmxfbG9jaylcXG4rICpcXHQgLSBuZXRpZl9vcGVuKCkgLyBuZXRpZl9jbG9zZSgpICh1c2VkIGJ5IEBzZWxmX3Rlc3QpXFxuICAqXFxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXFxuICAqXFx0bG9uZ2VyIGhhdmUgdG8gaW1wbGVtZW50IHRoaXMgY2FsbGJhY2suIE1vc3QgZmllbGRzIGFyZVxcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXFxuaW5kZXggNGU1MzU2ZTI2ZjQwMC4uYWUzMmU3ZmRiNTYzYyAxMDA2NDRcXG4tLS0gYS9uZXQvZXRodG9vbC9jb21tb24uaFxcbisrKyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXFxuQEAgLTE2Myw2ICsxNjMsOCBAQCBldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4gXFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XFxuIFxcdGNhc2UgRVRIVE9PTF9HTElOSzpcXG4gXFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG4rXFx0Y2FzZSBFVEhUT09MX1RFU1Q6XFxuK1xcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVDtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NTAuNDk3NjI0NDA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1Njc1NzcwNDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjA2OTAyNzdmNjdhMjdlNDk5YTBlNjgxNGY5Yjg1YjkxNWUyOTM0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjI6NDE6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Nzci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaFxuaW5kZXggNjRiOTU4ZGY3Nzc0NC4uYmFiYTM0NzFiZjVhNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfY3NyLmhcbkBAIC05NzQsNiArOTc0LDcgQEAgZW51bSB7XG4gLyogUFVMIFVzZXIgUmVnaXN0ZXJzICovXG4gI2RlZmluZSBGQk5JQ19DU1JfU1RBUlRfUFVMX1VTRVJcdDB4MzEwMDBcdC8qIENTUiBzZWN0aW9uIGRlbGltaXRlciAqL1xuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHXHQweDMxMDNkXHRcdC8qIDB4YzQwZjQgKi9cbisjZGVmaW5lIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSF9NT0RFXHRDU1JfQklUKDIwKVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIXHRDU1JfQklUKDE5KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0JNRVx0XHRDU1JfQklUKDE4KVxuICNkZWZpbmUgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX1JERV9BVFRSXHRDU1JfR0VOTUFTSygxNywgMTUpXG5AQCAtMTIxNSw2ICsxMjE2LDEwIEBAIGVudW0ge1xuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0xFTl9NQVNLXHRERVNDX0dFTk1BU0soNjMsIDQ4KVxuICNkZWZpbmUgRkJOSUNfSVBDX01CWF9ERVNDX0VPTVx0XHRERVNDX0JJVCg0NilcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19BRERSX01BU0tcdERFU0NfR0VOTUFTSyg0NSwgMylcbisvKiBTZXQgd2l0aCBGV19DTVBMIHdoZW4gdGhlIEZXIGNvbXBsZXRlZCBhIGRlc2NyaXB0b3Igd2l0aG91dCBzdWNjZXNzZnVsbHlcbisgKiBwcm9jZXNzaW5nIGl0IChlLmcuIGEgbWFpbGJveCBETUEgZXJyb3IpOyB0aGUgY29tcGxldGlvbiBoYXMgbm8gdmFsaWQgZGF0YS5cbisgKi9cbisjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19GV19FUlJcdERFU0NfQklUKDIpXG4gI2RlZmluZSBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTFx0REVTQ19CSVQoMSlcbiAjZGVmaW5lIEZCTklDX0lQQ19NQlhfREVTQ19IT1NUX0NNUExcdERFU0NfQklUKDApXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuaW5kZXggM2M0NTYzYzhmNDAzZi4uNDU4MWZkOGM4ZWRmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZGVidWdmcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY1xuQEAgLTUzOSw4ICs1MzksOCBAQCBzdGF0aWMgdm9pZCBmYm5pY19kYmdfZndfbWJ4X2Rpc3BsYXkoc3RydWN0IHNlcV9maWxlICpzLFxuIFx0LyogR2VuZXJhdGUgaGVhZGVyICovXG4gXHRzZXFfcHV0cyhzLCBtYnhfaWR4ID09IEZCTklDX0lQQ19NQlhfUlhfSURYID8gXCJSeFxcblwiIDogXCJUeFxcblwiKTtcbiBcbi1cdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkXFxuXCIsXG4tXHRcdCAgIG1ieC1cdTAwM2VyZWFkeSwgbWJ4LVx1MDAzZWhlYWQsIG1ieC1cdTAwM2V0YWlsKTtcbitcdHNlcV9wcmludGYocywgXCJSZHk6ICVkIEhlYWQ6ICVkIFRhaWw6ICVkIHJlc3BfZXJyb3I6ICVsbGRcXG5cIixcbitcdFx0ICAgbWJ4LVx1MDAzZXJlYWR5LCBtYngtXHUwMDNlaGVhZCwgbWJ4LVx1MDAzZXRhaWwsIG1ieC1cdTAwM2VyZXNwX2Vycm9yKTtcbiBcbiBcdHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksIFwiJTNzICUtNHMgJXMgJS0xMnMgJXMgJS0zcyAlLTE2c1xcblwiLFxuIFx0XHQgXCJJZHhcIiwgXCJMZW5cIiwgXCJFXCIsIFwiQWRkclwiLCBcIkZcIiwgXCJIXCIsIFwiUmF3XCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbmluZGV4IDBlNDcwODhlYzQ0YmEuLjQyM2YxNzljOWQ0NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmNcbkBAIC0yMDI1LDcgKzIwMjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xuIFx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTSB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XG4gXHRcdFx0XHRcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcbitcdFx0XHRcdFx0ICBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTksgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxuIFx0LmdldF9kcnZpbmZvXHRcdFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfcmVnc19sZW5cdFx0XHQ9IGZibmljX2dldF9yZWdzX2xlbixcbiBcdC5nZXRfcmVnc1x0XHRcdD0gZmJuaWNfZ2V0X3JlZ3MsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3Li44ZjRhMTk1YmI4ZWQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbkBAIC02MCw4ICs2MCwxNCBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcmVzZXRfZGVzY19yaW5nKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IG1ieF9pZHgpXG4gXHQgKi9cbiBcdHN3aXRjaCAobWJ4X2lkeCkge1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1JYX0lEWDpcbitcdFx0LyogVGhlIHdyaXRlIHBhdGggb25seSB0ZXJtaW5hdGVzIG91dHN0YW5kaW5nIHJlcXVlc3RzIHdoZW5cbitcdFx0ICogYm90aCBGTFVTSCBhbmQgRkxVU0hfTU9ERSBhcmUgc2V0LiBXaXRoIEZMVVNIIGFsb25lIHRoZVxuK1x0XHQgKiB3cml0ZXMgc3RpbGwgb2JleSB0aGUgaGFsdCBhc3NlcnRlZCBieSBjbGVhcmluZyBCTUUsIHNvXG4rXHRcdCAqIG5vdGhpbmcgZHJhaW5zIGFuZCBBV19GTFVTSF9ET05FIG5ldmVyIGFzc2VydHMuXG4rXHRcdCAqL1xuIFx0XHR3cjMyKGZiZCwgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHLFxuLVx0XHQgICAgIEZCTklDX1BVTF9PQl9UTFBfSERSX0FXX0NGR19GTFVTSCk7XG4rXHRcdCAgICAgRkJOSUNfUFVMX09CX1RMUF9IRFJfQVdfQ0ZHX0ZMVVNIIHxcbitcdFx0ICAgICBGQk5JQ19QVUxfT0JfVExQX0hEUl9BV19DRkdfRkxVU0hfTU9ERSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBGQk5JQ19JUENfTUJYX1RYX0lEWDpcbiBcdFx0d3IzMihmYmQsIEZCTklDX1BVTF9PQl9UTFBfSERSX0FSX0NGRyxcbkBAIC0yODUsNiArMjkxLDEyIEBAIHN0YXRpYyB2b2lkIGZibmljX21ieF9wcm9jZXNzX3R4X21zZ3Moc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRpZiAoIShkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfQ01QTCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4rXHRcdGlmIChkZXNjIFx1MDAyNiBGQk5JQ19JUENfTUJYX0RFU0NfRldfRVJSKSB7XG4rXHRcdFx0dHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IrKztcbitcdFx0XHRkZXZfd2FybihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFx0IFwiRlcgY29tcGxldGVkIGEgVHggbWFpbGJveCByZXF1ZXN0IHdpdGggYW4gZXJyb3JcXG5cIik7XG4rXHRcdH1cbitcbiBcdFx0ZmJuaWNfbWJ4X3VubWFwX2FuZF9mcmVlX21zZyhmYmQsIEZCTklDX0lQQ19NQlhfVFhfSURYLCBoZWFkKTtcbiBcbiBcdFx0aGVhZCsrO1xuQEAgLTE2NjYsNiArMTY3OCwxMyBAQCBzdGF0aWMgdm9pZCBmYm5pY19tYnhfcHJvY2Vzc19yeF9tc2dzKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiBcdFx0aWYgKCEoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0NNUEwpKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAoZGVzYyBcdTAwMjYgRkJOSUNfSVBDX01CWF9ERVNDX0ZXX0VSUikge1xuK1x0XHRcdHJ4X21ieC1cdTAwM2VyZXNwX2Vycm9yKys7XG4rXHRcdFx0ZGV2X3dhcm4oZmJkLVx1MDAzZWRldixcbitcdFx0XHRcdCBcIkZXIHJlcG9ydGVkIGFuIGVycm9yIG9uIGFuIFJ4IG1haWxib3ggbWVzc2FnZTsgZHJvcHBpbmdcXG5cIik7XG4rXHRcdFx0Z290byBuZXh0X3BhZ2U7XG4rXHRcdH1cbitcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZmJkLVx1MDAzZWRldiwgcnhfbWJ4LVx1MDAzZWJ1Zl9pbmZvW2hlYWRdLmFkZHIsXG4gXHRcdFx0XHRcdEZCTklDX1JYX1BBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcbiBcbkBAIC0xNzM0LDYgKzE3NTMsNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIHtcbiBcdHN0cnVjdCBmYm5pY19md19tYnggKnR4X21ieCA9IFx1MDAyNmZiZC1cdTAwM2VtYnhbRkJOSUNfSVBDX01CWF9UWF9JRFhdO1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIDEwICogSFogKyAxO1xuK1x0dTY0IHJlc3BfZXJyb3I7XG4gXHRpbnQgZXJyLCBpO1xuIFxuIFx0ZG8ge1xuQEAgLTE3NjQsNiArMTc4NCw4IEBAIGludCBmYm5pY19tYnhfcG9sbF90eF9yZWFkeShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4gXHQgKiBtZ210LnZlcnNpb24gb25jZSB3ZSBnZXQgdGhlIGFjdHVhbCB2ZXJzaW9uIGZyb20gdGhlIGZpcm13YXJlXG4gXHQgKiBpbiB0aGUgY2FwYWJpbGl0aWVzIHJlcXVlc3QgbWVzc2FnZS5cbiBcdCAqL1xuK3NlbmRfY2FwX3JlcTpcbitcdHJlc3BfZXJyb3IgPSB0eF9tYngtXHUwMDNlcmVzcF9lcnJvcjtcbiBcdGVyciA9IGZibmljX2Z3X3htaXRfc2ltcGxlX21zZyhmYmQsIEZCTklDX1RMVl9NU0dfSURfSE9TVF9DQVBfUkVRKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gY2xlYW5fbWJ4O1xuQEAgLTE3ODIsOCArMTgwNCwxNyBAQCBpbnQgZmJuaWNfbWJ4X3BvbGxfdHhfcmVhZHkoc3RydWN0IGZibmljX2RldiAqZmJkKVxuIFx0XHRmYm5pY19tYnhfcG9sbChmYmQpO1xuIFxuIFx0XHQvKiBzZXQgZXJyLCBidXQgd2FpdCB0aWxsIG1nbXQudmVyc2lvbiBjaGVjayB0byByZXBvcnQgaXQgKi9cbi1cdFx0aWYgKCF0aW1lX2lzX2FmdGVyX2ppZmZpZXModGltZW91dCkpXG4rXHRcdGlmICghdGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKSB7XG4gXHRcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBJZiB0aGUgRlcgY29tcGxldGVkIG91ciBjYXBhYmlsaXRpZXMgcmVxdWVzdCB3aXRoIGFuIGVycm9yXG4rXHRcdCAqIChGV19FUlIpIGl0IHByb2R1Y2VkIG5vIHJlc3BvbnNlOyB0aGUgcmluZyBpcyBub3Qgd2VkZ2VkLCBzb1xuK1x0XHQgKiByZS1pc3N1ZSB0aGUgcmVxdWVzdCBpbnN0ZWFkIG9mIHRpbWluZyBvdXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHhfbWJ4LVx1MDAzZXJlc3BfZXJyb3IgIT0gcmVzcF9lcnJvcilcbitcdFx0XHRnb3RvIHNlbmRfY2FwX3JlcTtcbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuaW5kZXggZDg0NzIzZTRjZmEzNi4uNWY5OTY5MjQ3ZTMwNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG5AQCAtMTMsNiArMTMsNyBAQCBzdHJ1Y3QgZmJuaWNfdGx2X21zZztcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfbWJ4IHtcbiBcdHU4IHJlYWR5LCBoZWFkLCB0YWlsO1xuK1x0dTY0IHJlc3BfZXJyb3I7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfdGx2X21zZ1x0Km1zZztcbiBcdFx0ZG1hX2FkZHJfdFx0XHRhZGRyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jXG5pbmRleCA4YjliYzllOGVhNTZjLi5jNjY5OGUzMDAyYTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuY1xuQEAgLTQzNCw2ICs0MzQsNyBAQCBzdGF0aWMgaW50IGZibmljX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZiZC1cdTAwM2VuZXRkZXY7XG4rXHRzdHJ1Y3QgZmJuaWNfbmV0ICpmYm47XG4gXG4gXHRpZiAoZmJuaWNfaW5pdF9mYWlsdXJlKGZiZCkpXG4gXHRcdGdvdG8gbnVsbF91Y19hZGRyO1xuQEAgLTQ0MSwxMSArNDQyLDE2IEBAIHN0YXRpYyBpbnQgZmJuaWNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRydG5sX2xvY2soKTtcbiBcdG5ldGRldl9sb2NrKG5ldGRldik7XG4gXG4rXHRmYm4gPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1xuIFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpO1xuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSlcbiBcdFx0bmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0b3AobmV0ZGV2KTtcbiBcbitcdC8qIFRoZSBJUlFzIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgc28gZHJvcCB0aGUgbmFwaSB2ZWN0b3IgY291bnQgKi9cbitcdGZibi1cdTAwM2VudW1fbmFwaSA9IDA7XG4rXG4gXHRuZXRkZXZfdW5sb2NrKG5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuQEAgLTUwOCwxNiArNTE0LDIwIEBAIHN0YXRpYyBpbnQgX19mYm5pY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0aWYgKGZibmljX2luaXRfZmFpbHVyZShmYmQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdHJ0bmxfbG9jaygpO1xuK1x0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbitcbiBcdGZibiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXG4gXHQvKiBSZXNldCB0aGUgcXVldWVzIGlmIG5lZWRlZCAqL1xuIFx0ZmJuaWNfcmVzZXRfcXVldWVzKGZibiwgZmJuLVx1MDAzZW51bV90eF9xdWV1ZXMsIGZibi1cdTAwM2VudW1fcnhfcXVldWVzKTtcbiBcbi1cdHJ0bmxfbG9jaygpO1xuLVx0bmV0ZGV2X2xvY2sobmV0ZGV2KTtcbi1cbi1cdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7XG4gXHRcdGVyciA9IF9fZmJuaWNfb3BlbihmYm4pO1xuK1x0XHQvKiBPbiBmYWlsdXJlIHRoZSB2ZWN0b3JzIGFyZSBmcmVlZCwgc28gZHJvcCB0aGUgY291bnQgKi9cbitcdFx0aWYgKGVycilcbitcdFx0XHRmYm4tXHUwMDNlbnVtX25hcGkgPSAwO1xuK1x0fVxuIFxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5pbmRleCAxMjY4M2I1ZDEyNWU0Li45N2ExYWRiZDllYWVlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5AQCAtOTQ0LDYgKzk0NCw3IEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHtcbiAjZGVmaW5lIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTVx0QklUKDYpXG4gI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTXHRcdEJJVCg3KVxuICNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LXHRcdEJJVCg4KVxuKyNkZWZpbmUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RcdFx0QklUKDkpXG4gXG4gLyoqXG4gICogc3RydWN0IGV0aHRvb2xfb3BzIC0gb3B0aW9uYWwgbmV0ZGV2IG9wZXJhdGlvbnNcbkBAIC05ODEsNiArOTgyLDcgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xuICAqXHQgLSBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKClcbiAgKlx0IC0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcygpXG4gICpcdCAtIGV0aHRvb2xfb3BfZ2V0X2xpbmsoKSAoc3luY3MgbGluayB3YXRjaCB1bmRlciBydG5sX2xvY2spXG4rICpcdCAtIG5ldGlmX29wZW4oKSAvIG5ldGlmX2Nsb3NlKCkgKHVzZWQgYnkgQHNlbGZfdGVzdClcbiAgKlxuICAqIEBnZXRfZHJ2aW5mbzogUmVwb3J0IGRyaXZlci9kZXZpY2UgaW5mb3JtYXRpb24uIE1vZGVybiBkcml2ZXJzIG5vXG4gICpcdGxvbmdlciBoYXZlIHRvIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrLiBNb3N0IGZpZWxkcyBhcmVcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9jb21tb24uaCBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5pbmRleCA0ZTUzNTZlMjZmNDAwLi5hZTMyZTdmZGI1NjNjIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvY29tbW9uLmhcbisrKyBiL25ldC9ldGh0b29sL2NvbW1vbi5oXG5AQCAtMTYzLDYgKzE2Myw4IEBAIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxuIFx0XHRyZXR1cm4gb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9SU1M7XG4gXHRjYXNlIEVUSFRPT0xfR0xJTks6XG4gXHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xuK1x0Y2FzZSBFVEhUT09MX1RFU1Q6XG4rXHRcdHJldHVybiBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubCBcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1Q7XG4gXHR9XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDE6NTAuNDk3NjI2NzI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQwNDUzNjA2NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU3l6a2FsbGVyIFBhdGNoIFNlcmllcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBzeXprYWxsZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBsb29rIGF0IHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuQWxyaWdodCwgSSBzZWUgYSBsaXN0IG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19jc3IuaGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2RlYnVnZnMuY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNgLCBhbmQgc28gb24uIFdhaXQgYSBzZWNvbmQuLi4gYGZibmljYCEgVGhhdCdzIE1ldGEncyBBU0lDIE5JQyBkcml2ZXIsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyLCByaWdodD8gSW50ZXJlc3RpbmcuXG5cbkJ1dCBob2xkIG9uLCB0aGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFRoYXQncyBhIGJpdCBtb3JlIHNpZ25pZmljYW50LiBJdCBtYWtlcyBtZSB3b25kZXI6IEFyZSB0aGVzZSBjaGFuZ2VzIHNwZWNpZmljIHRvIHRoZSBgZmJuaWNgIGRyaXZlciwgb3IgYXJlIHRoZXkgbW9yZSBnZW5lcmFsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXRodG9vbCBpb2N0bCBoYW5kbGluZyB3b3JrcywgYW5kIHdoZXRoZXIgdGhvc2UgZXRodG9vbCBjaGFuZ2VzIGFyZSBldmVuIHJlYWNoYWJsZSBpbiBhIGJyb2FkZXIgY29udGV4dC4gSXMgYGZibmljYCB0aGUgb25seSBkcml2ZXIgdXRpbGl6aW5nIHRoZW0/IEknbSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBob3cgYEVUSFRPT0xfVEVTVGAgYW5kIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAgYXJlIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbmV0L2V0aHRvb2wvYC5cblxuT2theSwgSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byBmaXJlIHVwIGBncmVwcGVyYCBvciBhbm90aGVyIHN1aXRhYmxlIHRvb2wgdG8gc2VhcmNoIHRoZSByZXBvc2l0b3J5IGFuZCBkZXRlcm1pbmUgdGhlIHJlYWNoIG9mIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGFjdCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzM3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MDQuNTQzMDAyOTYyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTYzMzYzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyOC1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MjAyOTpcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNULFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTIwMzAtXFx0LmdldF9kcnZpbmZvXFx0XFx0XFx0PSBmYm5pY19nZXRfZHJ2aW5mbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTkyMz1zdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC05NDYtI2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfR0xJTktcXHRcXHRCSVQoOClcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NDc6I2RlZmluZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVFxcdFxcdEJJVCg5KVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTk0OC1cXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oPTEzOD1ldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjA2Ljc5OTM0NTQ0NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTU2MzY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGZvY3VzIGlzIHBpbnBvaW50aW5nIGV2ZXJ5IHNpbmdsZSBjYWxsIHNpdGUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UsIHNlZSBwcmVjaXNlbHkgd2hlcmUgaXQncyBiZWluZyBpbnZva2VkLiBUaGlzIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nICp3aHkqIHRoZSBmdW5jdGlvbiBleGlzdHMsICp3aGVuKiBpdCdzIG5lZWRlZCwgYW5kLCB1bHRpbWF0ZWx5LCBpZiBpdHMgYmVoYXZpb3IgaXMgY29ycmVjdCBvciBpZiB0aGVyZSBtYXkgYmUgb3Bwb3J0dW5pdGllcyB0byBzdHJlYW1saW5lIGl0cyBpbXBsZW1lbnRhdGlvbiBvciBpdHMgdXNhZ2UgaW4gbXkgYXJlYSBvZiBleHBlcnRpc2UuIERpZ2dpbmcgdGhyb3VnaCB0aGUgY29kZWJhc2UgdG8gZmluZCB0aG9zZSBjYWxscyB3aWxsIGdpdmUgbWUgbXkgZmlyc3QgY2x1ZXMuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aWxsIGluZm9ybSB0aGUgZGlyZWN0aW9uIG9mIG15IG5leHQgc3RlcHMuIEknbSBob3BpbmcgdGhlIGNvZGUgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYW5kIGVhc2lseSB1bmRlcnN0b29kLCBidXQgSSBhbSByZWFkeSB0byBkZWx2ZSBmdXJ0aGVyIGlmIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk0MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjA4LjcxNDk4NjI2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwMjM1NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEyOS0vKipcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMzA6ICogZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkgLSBkb2VzIHRoaXMgbGVnYWN5IGlvY3RsIGNtZCBuZWVkIHJ0bmxfbG9jaz9cXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzEtICogQGRldjogdGFyZ2V0IGRldmljZVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbFxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjEzODpldGh0b29sX2lvY3RsX25lZWRzX3J0bmwoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGV0aGNtZClcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMzkte1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zMjcyPWRldl9ldGh0b29sX2xvY2tlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM1OTAtICogRHJpdmVyLWRlY2lkZWQgU0VUIGNvbW1hbmRzIHRoYXQgbWF5IGNoYWluIGludG8gcnRubC1vbmx5IGhlbHBlcnMgYXJlXFxubmV0L2V0aHRvb2wvaW9jdGwuYzozNTkxOiAqIGNvdmVyZWQgYnkgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKCkvRVRIVE9PTF9PUF9ORUVEU19SVE5MXyouXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNTkyLSAqL1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjEwPV9fZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjIzLVxcdFxcdCAgICBldGh0b29sX2NtZF9jaGFuZ2VzX2ZlYXR1cmVzKGV0aGNtZCkgfHxcXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2MjQ6XFx0XFx0ICAgIGV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChkZXYsIGV0aGNtZCk7XFxubmV0L2V0aHRvb2wvaW9jdGwuYy0zNjI1LVxcdGlmIChuZWVkX3J0bmwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjEwLjk4NTIzMDgwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzE5MjQ2OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGV0aHRvb2xgJ3MgSU9DVEwgSGFuZGxpbmcqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvZXRodG9vbC9pb2N0bC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAzNjEwLiBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0byBwdWxsIHRoYXQgY29kZSBkaXJlY3RseSBpbnRvIG15IHZpZXcuIEknbSBndWVzc2luZyB0aGF0IHNwZWNpZmljIGxvY2F0aW9uIHdpbGwgaG9sZCBzb21lIGNsdWVzIGFib3V0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbXMgSSdtIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUgYGV0aHRvb2xgIGZyYW1ld29yay4gSSBleHBlY3QgdG8gYmUgZGlnZ2luZyBpbnRvIHRoZSBJT0NUTCBoYW5kbGluZyBsb2dpYyB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgYnVyaWVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY1NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjEyLjgxNzE2MDg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL2lvY3RsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzYwMDpcXHRcXHRjYXNlIEVUSFRPT0xfU1NHOlxcbjM2MDE6XFx0XFx0Y2FzZSBFVEhUT09MX1NUU086XFxuMzYwMjpcXHRcXHRjYXNlIEVUSFRPT0xfU0dTTzpcXG4zNjAzOlxcdFxcdGNhc2UgRVRIVE9PTF9TR1JPOlxcbjM2MDQ6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMzYwNTpcXHRcXHR9XFxuMzYwNjpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzYwNzpcXHR9XFxuMzYwODpcXHRcXG4zNjA5OlxcdHN0YXRpYyBpbnRcXG4zNjEwOlxcdF9fZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyLFxcbjM2MTE6XFx0XFx0ICAgICAgdTMyIGV0aGNtZCwgc3RydWN0IGV0aHRvb2xfZGV2bGlua19jb21wYXQgKmRldmxpbmtfc3RhdGUpXFxuMzYxMjpcXHR7XFxuMzYxMzpcXHRcXHRuZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjtcXG4zNjE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMzYxNTpcXHRcXHRib29sIG5lZWRfcnRubDtcXG4zNjE2OlxcdFxcdGludCByYztcXG4zNjE3OlxcdFxcbjM2MTg6XFx0XFx0ZGV2ID0gbmV0ZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLVxcdTAwM2VpZnJfbmFtZSwgXFx1MDAyNmRldl90cmFja2VyLCBHRlBfS0VSTkVMKTtcXG4zNjE5OlxcdFxcdGlmICghZGV2KVxcbjM2MjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMzYyMTpcXHRcXG4zNjIyOlxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8XFxuMzYyMzpcXHRcXHRcXHQgICAgZXRodG9vbF9jbWRfY2hhbmdlc19mZWF0dXJlcyhldGhjbWQpIHx8XFxuMzYyNDpcXHRcXHRcXHQgICAgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKGRldiwgZXRoY21kKTtcXG4zNjI1OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuMzYyNjpcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4zNjI3OlxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbjM2Mjg6XFx0XFx0aWYgKGRldi1cXHUwMDNlcmVnX3N0YXRlIFxcdTAwM2UgTkVUUkVHX1JFR0lTVEVSRUQgfHxcXG4zNjI5OlxcdFxcdCAgICBkZXYtXFx1MDAzZW1vdmluZ19ucyB8fCAhbmV0X2VxKGRldl9uZXQoZGV2KSwgbmV0KSkge1xcbjM2MzA6XFx0XFx0XFx0cmMgPSAtRU5PREVWO1xcbjM2MzE6XFx0XFx0XFx0Z290byBleGl0X29wc191bmxvY2s7XFxuMzYzMjpcXHRcXHR9XFxuMzYzMzpcXHRcXG4zNjM0OlxcdFxcdHJjID0gZGV2X2V0aHRvb2xfbG9ja2VkKG5ldCwgZGV2LCB1c2VyYWRkciwgZXRoY21kLCBkZXZsaW5rX3N0YXRlLFxcbjM2MzU6XFx0XFx0XFx0XFx0XFx0bmVlZF9ydG5sKTtcXG4zNjM2OlxcdFxcbjM2Mzc6XFx0ZXhpdF9vcHNfdW5sb2NrOlxcbjM2Mzg6XFx0XFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4zNjM5OlxcdFxcdGlmIChuZWVkX3J0bmwpXFxuMzY0MDpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbjM2NDE6XFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZkZXZfdHJhY2tlcik7XFxuMzY0MjpcXHRcXG4zNjQzOlxcdFxcdHJldHVybiByYztcXG4zNjQ0OlxcdH1cXG4zNjQ1OlxcdFxcbjM2NDY6XFx0aW50IGRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIsIHZvaWQgX191c2VyICp1c2VyYWRkcilcXG4zNjQ3OlxcdHtcXG4zNjQ4OlxcdFxcdHN0cnVjdCBldGh0b29sX2RldmxpbmtfY29tcGF0ICpzdGF0ZTtcXG4zNjQ5OlxcdFxcdHUzMiBldGhjbWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjEyLjgxNzM2Nzc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE2NjQ2OTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCBpbiBgbmV0L2V0aHRvb2wvY29tbW9uLmhgLiBTcGVjaWZpY2FsbHksIHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBgRVRIVE9PTF9URVNUYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBkZXRlcm1pbmUgaWYgYSBzcGVjaWZpYyBldGh0b29sIG9wZXJhdGlvbiBuZWVkcyB0aGUgcm91dGluZy90cmFmZmljIGNvbnRyb2wgbGF5ZXIgKFJUTkwpLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIGNoZWNraW5nIGBvcHMtXHUwMDNlb3BfbmVlZHNfcnRubGAgYW5kIGlmIGl0IGhhcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoaWNoIGRyaXZlcnMgYWN0dWFsbHkgKnVzZSogYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYD8gTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBrZXJuZWwgc291cmNlIHRvIGZpbmQgYWxsIGluc3RhbmNlcyBvZiB0aGF0IHNwZWNpZmljIGZsYWcuIExvb2tzIGxpa2UgdGhlIG9ubHkgZHJpdmVyIHVzaW5nIGl0IGlzIGBmYm5pY2AuIEhtbS4uLlxuXG5Ob3csIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5LiBXaGF0IGV4YWN0bHkgKmlzKiBgZmJuaWNgPyBSaWdodCwgdGhhdCdzIE1ldGEncyBob3N0IG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgUENJIGRyaXZlci4gVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYGZibmljYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSB0aGlzIGlzIHRhcmdldGVkIGZvci4gVGhlIEtjb25maWcgc2hvdWxkIHRlbGwgbWUgd2hhdCBzb3J0IG9mIHBsYXRmb3JtcyBvciBkZXZpY2VzIGFyZSB1c2luZyB0aGlzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHNwZWNpZmljIHVzZSBjYXNlIGlzIGZvciB0aGlzIFJUTkwgZGVwZW5kZW5jeSwgd2hpY2ggaXMgb25seSBzZXQgZm9yIHRlc3Qgb3BlcmF0aW9ucyBpbiBgZmJuaWNgLiBUaGlzIGNvdWxkIGdpdmUgc29tZSBpbnNpZ2h0cyB0byBzb21lIHVuaXF1ZSBoYXJkd2FyZSByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MjcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0MjoxNS45ODM4Mzk2NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODY5ODAwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZCTklDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MTguMTcwODI1MzI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNTkzNzg5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkFuYWx5emluZyB0aGUgS2NvbmZpZyBGaWxlOiBEcml2ZXJzL05ldC9FdGhlcm5ldC9NZXRhKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGEgS2NvbmZpZyBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBFdGhlcm5ldCBkcml2ZXIgc3Vic3lzdGVtLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvYCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbiB0byBpdHMgcHVycG9zZS4gVGhpcyBsaWtlbHkgaXNuJ3QgYSAqc3BlY2lmaWMqIGRldmljZSBkcml2ZXIncyBjb25maWd1cmF0aW9uLCBidXQgbW9yZSBsaWtlbHkgYSB0b3AtbGV2ZWwsIG9yZ2FuaXphdGlvbmFsIEtjb25maWcgZmlsZS4gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgb3ZlcmFyY2hpbmcgZnJhbWV3b3JrIGZvciBFdGhlcm5ldCBzdXBwb3J0LCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhpbmdzIGxpa2U6XG5cbiogICAqKk9wdGlvbnMgZm9yIEVuYWJsaW5nL0Rpc2FibGluZyB0aGUgRXRoZXJuZXQgU3Vic3lzdGVtOioqIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgZnVuY3Rpb24sIGVuc3VyaW5nIHRoYXQgdGhlIGVudGlyZSBjYXRlZ29yeSBvZiBFdGhlcm5ldCBkcml2ZXJzIGFuZCB0aGUgYXNzb2NpYXRlZCBpbmZyYXN0cnVjdHVyZSBjYW4gYmUgYnJvdWdodCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgb3IgZXhjbHVkZWQuIEknZCBleHBlY3QgdG8gc2VlIHRoZSBtYWluIGBDT05GSUdfRVRIRVJORVRgIG9wdGlvbiBkZWNsYXJlZCBoZXJlLCBwZXJoYXBzIHdpdGggZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcy5cbiogICAqKkFnZ3JlZ2F0aW9uIG9mIERlcGVuZGVuY2llczoqKiBCZWNhdXNlIHRoZSBkcml2ZXJzIGFyZSBsaWtlbHkgdmVyeSBkaXZlcnNlLCB0aGlzIGlzIHdoZXJlIGRlcGVuZGVuY2llcyBhbmQgcHJlcmVxdWlzaXRlcyBhcmUgZGVmaW5lZCB0byBwcm92aWRlIGEgdXNlZnVsIHVzZXIgZXhwZXJpZW5jZS5cbiogICAqKk1ldGEtQ29uZmlndXJhdGlvbjoqKiBPcHRpb25zIGFmZmVjdGluZyB0aGUgYnJvYWRlciBFdGhlcm5ldCBsYW5kc2NhcGUsIG5vdCB0aWVkIHRvIGEgc2luZ2xlIHBoeXNpY2FsIGRldmljZSwgYXJlIGRlZmluZWQgaGVyZS4gVGhpcyBtaWdodCBpbmNsdWRlIGNob2ljZXMgYWJvdXQgd2hpY2ggRXRoZXJuZXQgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQsIHdoZXRoZXIgc3BlY2lmaWMgZmVhdHVyZXMgKGxpa2UgVkxBTiBzdXBwb3J0LCBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQpIGFyZSBidWlsdCBpbiwgYW5kIHBlcmhhcHMgZXZlbiBzZWxlY3Rpb24gb2YgYmFzaWMsIGNvcmUgbmV0d29ya2luZyBjb21wb25lbnRzIHRoYXQgRXRoZXJuZXQgZHJpdmVycyBkZXBlbmQgb24uIEl0IGNvdWxkIGFsc28gcHJvdmlkZSBvcHRpb25zIGZvciBzZWxlY3RpbmcgYmV0d2VlbiBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdGllcyAoZS5nLiBjaG9pY2Ugb2YgZGlmZmVyZW50IFBIWSBkcml2ZXJzKS5cbiogICAqKk9yZ2FuaXphdGlvbiBhbmQgU3RydWN0dXJlOioqIFRoaXMgaXMgYWxzbyBhIGdvb2QgcGxhY2UgdG8gY3JlYXRlIHN1Ym1lbnVzIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gdGhhdCBwcm92aWRlIGEgbG9naWNhbCBncm91cGluZyBmb3Igc3BlY2lmaWMgdHlwZXMgb2YgRXRoZXJuZXQgZGV2aWNlcy4gVGhpcyBoZWxwcyB0aGUgdXNlciBieSBwcm92aWRpbmcgYW4gb3JnYW5pemVkIHZpZXcgb2YgYWxsIGF2YWlsYWJsZSBFdGhlcm5ldCBvcHRpb25zLiBUaGlzIHdpbGwgbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBwZXJzb24gY29uZmlndXJpbmcgdGhlIGtlcm5lbCB0byBsb2NhdGUgb3B0aW9ucyBvZiBpbnRlcmVzdC5cbiogICAqKkRyaXZlciBTZWxlY3Rpb246KiogVGhpcyBLY29uZmlnIGNvdWxkIGFsc28gaW5jbHVkZSBvcHRpb25zIHRvIHNlbGVjdCB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGRyaXZlcnMuIFBlcmhhcHMgYSBnZW5lcmljIGRyaXZlciBjYW4gYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdCwgb3Igc3BlY2lmaWMgZHJpdmVycyBiYXNlZCBvbiBkZXZpY2UgbWFudWZhY3R1cmVycyBjYW4gYmUgc2VsZWN0ZWQuXG4qICAgKipEZXBlbmRlbmN5IG9uIENvcmUgTmV0d29ya2luZzoqKiBBdCB0aGUgdmVyeSBsZWFzdCwgaXQncyBnb2luZyB0byBlbnN1cmUgdGhhdCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgYXMgYSBwcmVyZXF1aXNpdGUgZm9yIGFueSBFdGhlcm5ldCBkcml2ZXIgdG8gZnVuY3Rpb24uXG5cbkknbGwgYmUgbG9va2luZyBmb3IgYGNvbmZpZ2AgZGVjbGFyYXRpb25zLCBgbWVudWNvbmZpZ2AgYmxvY2tzIChhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyksIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGBkZWZhdWx0YCwgYGJvb2xgLCBgdHJpc3RhdGVgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgaGVscGAgdGV4dCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZXNlIG9wdGlvbnMuIFRoZSBmaWxlIHdpbGwgdGVsbCB0aGUgdXNlciBob3cgdGhlIEV0aGVybmV0IHN1YnN5c3RlbSBmaXRzIGludG8gdGhlIGxhcmdlciBrZXJuZWwgYnVpbGQgc3lzdGVtLCB3aGF0IGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBtZXQuIEl0J3MgYSBrZXkgcGllY2Ugb2YgZG9jdW1lbnRhdGlvbiwgZXNzZW50aWFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MjIuMzMwMjA4NDI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWV0YSBQbGF0Zm9ybXMgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9NRVRBXFxuICAgNzpcXHRcXHRib29sIFxcXCJNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZGVzaWduZWQgYnkgTWV0YSwgc2F5IFkuXFxuICAxMTpcXHRcXHQgIFRoYXQncyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTQ6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgTWV0YSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDE2OlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX01FVEFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEZCTklDXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgQ09NUElMRV9URVNUXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIE1BWF9TS0JfRlJBR1MgXFx1MDAzYyAyMlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDI4OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDI5OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgMzA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDMxOlxcdFxcdHNlbGVjdCBQTERNRldcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAzNjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGZibmljLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWQuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjIyLjMzMDMxMTI5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzU5MjAyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBEaWFnbm9zdGljIFF1ZXJ5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBmaWJlci1vcHRpYyBuZXR3b3JrIGludGVyZmFjZSBjYXJkcyAoZmJuaWMpIOKAkyBlc3NlbnRpYWxseSwgY29uZmlybWluZyB0aGF0IHRoZSBoYXJkd2FyZSBpcyBwcmVzZW50IGFuZCByZXNwb25kaW5nLiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggYXQgdGhpcyBwb2ludCBpcyB0byBjaGVjayBkZXZpY2UgSURzIGFuZCBpbml0aWF0ZSBhIHByb2JlLiBUaGlzIGxpa2VseSBpbnZvbHZlcyB1dGlsaXppbmcgYSBzcGVjaWZpYyBjb21tYW5kIG9yIHV0aWxpdHkgdGFpbG9yZWQgdG8gdGhlIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoLCBwZXJoYXBzIGBsc3BjaWAsIGBsc2h3YCwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCB0aGVuIGNyb3NzLXJlZmVyZW5jaW5nIHRoZSBvdXRwdXQgd2l0aCBleHBlY3RlZCBvciBrbm93biBmYm5pYyBpZGVudGlmaWVycy4gQSAncHJvYmUnLCBpbiB0aGlzIGNvbnRleHQsIHN1Z2dlc3RzIGEgYmFzaWMgaGFyZHdhcmUtbGV2ZWwgdGVzdCB0byBjb25maXJtIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYWxsb3dzIG1lIHRvIGltbWVkaWF0ZWx5IGlzb2xhdGUgaGFyZHdhcmUtbGV2ZWwgaXNzdWVzLCByYXRoZXIgdGhhbiB3YXN0aW5nIHRpbWUgY2hhc2luZyBzb2Z0d2FyZSBjb25maWd1cmF0aW9uIGVycm9ycyBpZiB0aGUgaGFyZHdhcmUgaXNuJ3QgZXZlbiBiZWluZyByZWNvZ25pemVkLiBUaGlzIHByb3ZpZGVzIHRoZSBtb3N0IGZvdW5kYXRpb25hbCBpbmZvcm1hdGlvbiB0byB3b3JrIHdpdGgsIHRvIG1vdmUgZm9yd2FyZCB3aXRoIGRpYWdub3N0aWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM5NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MjUuMDg5NTE3NjI0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE4Njk5NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWQuKmZibmljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19pbmZvICpmYm5pY19pbmZvX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjMwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmYm5pY19wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zMS1cXHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBGQk5JQ19BU0lDLCBmYm5pY19ib2FyZF9hc2ljKSB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0MjoyNy40MDgyMjI2NjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk5OTk2NTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZCTklDIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBgZmJuaWNgIHBhcnQganVtcHMgb3V0LiBSaWdodCBhd2F5LCBJIGtub3cgYGZibmljYCBpcyBNZXRhJ3MgcGh5c2ljYWwgQVNJQyBuZXR3b3JrIGludGVyZmFjZSBjYXJkIOKAkyBlc3NlbnRpYWxseSwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMuIFRoZSBraWNrZXIgaXMgdGhhdCBpdCBuZWVkcyBhY3R1YWwgQVNJQyBoYXJkd2FyZSwgd2hpY2ggbWVhbnMgaXQncyBub3QgZ29pbmcgdG8gcGxheSBuaWNlIGluIHN0YW5kYXJkIFFFTVUgb3Igc3l6a2FsbGVyIGVudmlyb25tZW50cy4gVGhhdCdzIGEgbWFqb3IgcmVkIGZsYWcgZm9yIGZ1enppbmcgZmVhc2liaWxpdHkuXG5cbk5vdywgbGV0J3MgY2FyZWZ1bGx5IGdvIG92ZXIgdGhlIGRpZmYgYW5kIG1ha2Ugc3VyZTpcblxuVGhlIGRvY3VtZW50YXRpb24gSSdtIHJlYWRpbmcgbWVudGlvbnMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIi4gVGhpcyBjb3ZlcnMgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIGFuIEFTSUMuIEdpdmVuIHRoYXQsIGBmYm5pY2AgaXMgcHJlY2lzZWx5IHRoZSB0eXBlIG9mIGhhcmR3YXJlIHRoZSBkb2N1bWVudGF0aW9uIGlzIHNheWluZyAqbm90KiB0byBmdXp6IGJlY2F1c2UgaXQncyBub3QgZW11bGF0ZWQuXG5cbkFscmlnaHQsIGxldCdzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNoYW5nZXMuIFRoZSBkaWZmIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYC4gSG1tLCBhbGwgb2YgdGhlc2UgYXJlIGRlZGljYXRlZCB0byBgZmJuaWNgLCBjb25maXJtaW5nIG15IGluaXRpYWwgYXNzZXNzbWVudC4gVGhlbiwgdGhlcmUncyBhIGNvdXBsZSBvZiBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIExldCdzIGRpZyBpbi5cblxuVGhlIGNoYW5nZSBpbiBgaW5jbHVkZS9saW51eC9ldGh0b29sLmhgIGludHJvZHVjZXMgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gTG9va3MgbGlrZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmVlZGluZyB0aGUgUlROTCAoUm91dGluZyBUYWJsZSBOZXRsaW5rKSB3aGVuIGRlYWxpbmcgd2l0aCBgbmV0aWZfb3BlbigpYCBhbmQgYG5ldGlmX2Nsb3NlKClgIG9wZXJhdGlvbnMuIEluIGBuZXQvZXRodG9vbC9jb21tb24uaGAsIHRoZXJlJ3MgYSBuZXcgaW5saW5lIGZ1bmN0aW9uIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHRoYXQgY2hlY2tzIHRoaXMgZmxhZywgc3BlY2lmaWNhbGx5IHdoZW4gYGV0aGNtZGAgaXMgYEVUSFRPT0xfVEVTVGAuXG5cbkJ1dCB3YWl0LCBpcyBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCAqZXZlciogY2FsbGVkIGZvciBhIHZpcnR1YWwgb3IgZW11bGF0ZWQgbmV0ZGV2PyBUaGF0J3MgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIGl0ICppcyosIHRoZW4gbWF5YmUgdGhpcyBwYXRjaCBpcyByZWxldmFudCB0byBtb3JlIHRoYW4ganVzdCB0aGUgYGZibmljYCBkcml2ZXIuIFRpbWUgdG8gY2hlY2shIEkgZGlkIGEgZ3JlcCBmb3IgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gVGhlIHJlc3VsdHMgYXJlIGluLiBBbmQgYXMgSSBzdXNwZWN0ZWQsIG9ubHkgYGZibmljX2V0aHRvb2wuY2Agc2V0cyB0aGlzIGZsYWcuIE5vIG90aGVyIGRyaXZlciBkb2VzIGluIHRoZSBlbnRpcmUga2VybmVsLlxuXG5TbywgZm9yIGV2ZXJ5IG90aGVyIG5ldCBkZXZpY2UsIHdoZW4gYGV0aGNtZGAgaXMgYEVUSFRPT0xfVEVTVGAsIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHdpbGwgY2hlY2sgaWYgdGhhdCBkZXZpY2UncyBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmxgIGhhcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIHNldC4gU2luY2Ugb3RoZXIgZHJpdmVycycgYG9wcy1cdTAwM2VvcF9uZWVkc19ydG5sYCBpcyB6ZXJvLCBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sYCAqYWx3YXlzKiByZXR1cm5zIGBmYWxzZWAuXG5cbk5vdywgYmVmb3JlIHRoaXMgcGF0Y2gsIHdoYXQgZGlkIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHJldHVybiB3aGVuIGBldGhjbWRgIHdhcyBgRVRIVE9PTF9URVNUYD8gR290dGEgY2hlY2sgdGhlIGhpc3RvcnkgYXJvdW5kIGxpbmUgMTYwIG9mIGBuZXQvZXRodG9vbC9jb21tb24uaGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODA5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjMzLjQwODE5MTAxMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvY29tbW9uLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LVxcdTAwM2VldGh0b29sX29wcztcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0c3dpdGNoIChldGhjbWQpIHtcXG4gMTQzOlxcdFxcdGNhc2UgRVRIVE9PTF9HTElOS1NFVFRJTkdTOlxcbiAxNDQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dTRVQ6XFxuIDE0NTpcXHRcXHRjYXNlIEVUSFRPT0xfU0xJTktTRVRUSU5HUzpcXG4gMTQ2OlxcdFxcdGNhc2UgRVRIVE9PTF9TU0VUOlxcbiAxNDc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9MSU5LU0VUVElOR1M7XFxuIDE0ODpcXHRcXHRjYXNlIEVUSFRPT0xfU1BGTEFHUzpcXG4gMTQ5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG4gMTUwOlxcdFxcdGNhc2UgRVRIVE9PTF9TUklOR1BBUkFNOlxcbiAxNTE6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNO1xcbiAxNTI6XFx0XFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG4gMTUzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xcbiAxNTQ6XFx0XFx0Y2FzZSBFVEhUT09MX1NDT0FMRVNDRTpcXG4gMTU1OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbiAxNTY6XFx0XFx0Y2FzZSBFVEhUT09MX0dQQVVTRVBBUkFNOlxcbiAxNTc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HUEFVU0VQQVJBTTtcXG4gMTU4OlxcdFxcdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcXG4gMTU5OlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU07XFxuIDE2MDpcXHRcXHRjYXNlIEVUSFRPT0xfU1JTU0g6XFxuIDE2MTpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkg6XFxuIDE2MjpcXHRcXHRjYXNlIEVUSFRPT0xfU1JYRkhJTkRJUjpcXG4gMTYzOlxcdFxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfUlNTO1xcbiAxNjQ6XFx0XFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbiAxNjU6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSztcXG4gMTY2OlxcdFxcdGNhc2UgRVRIVE9PTF9URVNUOlxcbiAxNjc6XFx0XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbiAxNjg6XFx0XFx0fVxcbiAxNjk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAxNzA6XFx0fVxcbiAxNzE6XFx0XFxuIDE3MjpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRVRIVE9PTF9ORVRMSU5LKVxcbiAxNzM6XFx0dm9pZCBldGh0b29sX3Jzc19ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHR5cGUsIHUzMiByc3NfY29udGV4dCk7XFxuIDE3NDpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0MjozMy40MDgyOTY0NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA0NjY4OTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXRodG9vbCBQYXRjaCoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbCB3aXRoIHRoaXMgZXRodG9vbCBwYXRjaC4gQmVmb3JlIHRoaXMgdXBkYXRlLCB0aGUgYEVUSFRPT0xfVEVTVGAgaW9jdGwgY2FsbCB3YXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgd2l0aGluIHRoZSBgZXRodG9vbF9pb2N0bF9uZWVkc19ydG5sKClgIGZ1bmN0aW9uJ3Mgc3dpdGNoIHN0YXRlbWVudC4gSXQganVzdCBzbGlwcGVkIHRocm91Z2ggYW5kIHJldHVybmVkIGBmYWxzZWAsIHdoaWNoIGlzIG5vdCB0aGUgZGVzaXJlZCBiZWhhdmlvci4gTm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIGlmIHRoZSBkcml2ZXIgZXhwbGljaXRseSAqZG9lc24ndCogcmVxdWlyZSBSVE5MIGZvciB0aGUgdGVzdCBvcGVyYXRpb24gYnkgY2hlY2tpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYC4gSWYgaXQgKmRvZXNuJ3QqIHRoZW4gaXQgZmFsbHMgdGhyb3VnaCB0byBjaGVja2luZyBgb3BzLVx1MDAzZW9wX25lZWRzX3J0bmwgXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCwgd2hpY2ggZWZmZWN0aXZlbHkgZXZhbHVhdGVzIHRvIGBmYWxzZWAgYmVjYXVzZSBvZiB0aGUgYml0bWFzaywgbWVhbmluZyBSVE5MIGlzIG5vdCBhY3F1aXJlZC5cblxuVGhlIG9ubHkgZHJpdmVyIEkgY2FuIHNlZSB0aGF0IGFjdHVhbGx5ICpkb2VzKiBzZXQgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBpcyB0aGUgYGZibmljYCBkcml2ZXIsIGFuZCB0aGF0J3MgYSBwaHlzaWNhbCBBU0lDIE5JQyBkcml2ZXIuIFNvLCB3aXRoIHRoaXMgcGF0Y2gsIHRoZSBgRVRIVE9PTF9URVNUYCBjYWxsIGZvciBgZmJuaWNgIHdpbGwgY29ycmVjdGx5IGdyYWIgdGhlIGBydG5sX2xvY2tgIGJlZm9yZSBleGVjdXRpbmcgdGhlIGBzZWxmX3Rlc3RgIG9wZXJhdGlvbiwgd2hpY2ggaXQgbmVlZHMgYmVjYXVzZSB0aGUgYGZibmljYCBzZWxmLXRlc3Qgb3BzIGFyZSBSVE5MLXByb3RlY3RlZC4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIG5vIHZpcnR1YWwgZGV2aWNlcyBhcmUgaW1wYWN0ZWQgaGVyZS4gSSdtIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZWJhc2UgdG8gc2VlIGlmIGFueSBvZiB0aGUgdmlydHVhbCBkZXZpY2Vz4oCUdHVuLCB0YXAsIGR1bW15LCB2ZXRoLCBsb29wYmFjaywgdmlydGlvX25ldCwgdGhlIHVzdWFsIHN1c3BlY3Rz4oCUYXJlIHNldHRpbmcgYEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUYCBhbnl3aGVyZSwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIG9yIHJlZ3Jlc3Npb25zIGluIHRob3NlIGVudmlyb25tZW50cy4gSSdsbCBzZWFyY2ggZm9yIGBvcF9uZWVkc19ydG5sYCBhbmQgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6MzguNDU0OTg4NDEzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjYyNzEwOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9wX25lZWRzX3J0bmxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldi1mZWF0dXJlcy5yc3Q9ODE9b3B0IGJhY2sgaW50byBydG5sX2xvY2sgYnkgc2V0dGluZyB0aGUgbWF0Y2hpbmcgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdDo4MjpiaXQgaW4gYGBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubGBgLiBUaGUgZXRodG9vbCBjb3JlIHRoZW4ga2VlcHNcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2LWZlYXR1cmVzLnJzdC04My1ydG5sX2xvY2sgaGVsZCBhY3Jvc3MgdGhvc2UgU0VUIGNhbGxiYWNrcyBzbyB0aGUgY29udHJhY3QgYWJvdmUgc3RpbGxcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdD0zNzg9aXMgaGVsZCBhcm91bmQgc3BlY2lmaWMgb3BlcmF0aW9ucyAoYm90aCBTRVQgYW5kIEdFVCkgYnkgc2V0dGluZ1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdDozNzk6YXBwcm9wcmlhdGUgYml0cyBpbiBgYGV0aHRvb2xfb3BzOjpvcF9uZWVkc19ydG5sYGAgKGlmIHRoZSBuZWNlc3NhcnlcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QtMzgwLWBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXQgZG9lc24ndCBleGlzdCwganVzdCBhZGQgaXQpLlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYz01NzI3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibnh0X2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYy01NzMyLVxcdC5yeGZoX3ByaXZfc2l6ZVxcdFxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBibnh0X3Jzc19jdHgpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9ldGh0b29sLmM6NTczMzpcXHQub3BfbmVlZHNfcnRubFxcdFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2V0aHRvb2wuYy01NzM0LVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jPTk4Mj1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ3ZlX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL2d2ZS9ndmVfZXRodG9vbC5jLTk4NS1cXHRcXHRcXHRcXHQgRVRIVE9PTF9SSU5HX1VTRV9SWF9CVUZfTEVOLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9ndmUvZ3ZlX2V0aHRvb2wuYzo5ODY6XFx0Lm9wX25lZWRzX3J0bmwgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvZ3ZlL2d2ZV9ldGh0b29sLmMtOTg3LVxcdFxcdFxcdCBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jPTE4NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpYXZmX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYy0xODU3LVxcdC5zdXBwb3J0ZWRfaW5wdXRfeGZybVxcdD0gUlhIX1hGUk1fU1lNX1hPUixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jOjE4NTg6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jLTE4NTktXFx0LmdldF9kcnZpbmZvXFx0XFx0PSBpYXZmX2dldF9kcnZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2V0aHRvb2wuYz0yNzE3PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1ZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcyMS1cXHQucnhmaF9tYXhfbnVtX2NvbnRleHRzXFx0PSBNTFg1RV9NQVhfTlVNX1JTUyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fZXRodG9vbC5jOjI3MjI6XFx0Lm9wX25lZWRzX3J0bmxcXHRcXHQ9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFMgfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9ldGh0b29sLmMtMjcyMy1cXHRcXHRcXHRcXHQgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYz00MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1ZV9yZXBfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmMtNDIwLVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jOjQyMTpcXHQub3BfbmVlZHNfcnRubFxcdCAgID0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jLTQyMi1cXHRcXHRcXHQgICAgIEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUklOR1BBUkFNIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmM9Mjg0PWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtbHg1aV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9pcG9pYi9ldGh0b29sLmMtMjg3LVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2lwb2liL2V0aHRvb2wuYzoyODg6XFx0Lm9wX25lZWRzX3J0bmxcXHQgICAgPSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTI4OS1cXHRcXHRcXHQgICAgICBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTSB8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jPTMxMj1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4NWlfcGtleV9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jOjMxMzpcXHQub3BfbmVlZHNfcnRubFxcdCAgICA9IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9HTElOSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvaXBvaWIvZXRodG9vbC5jLTMxNC1cXHQuZ2V0X2RydmluZm8gICAgICAgID0gbWx4NWlfZ2V0X2RydmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmM9MTI2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWx4c3dfc3BfcG9ydF9ldGh0b29sX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9ldGh0b29sLmMtMTI2NC1cXHQuY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkXFx0PSB0cnVlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYzoxMjY1OlxcdC5vcF9uZWVkc19ydG5sXFx0XFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU1BBVVNFUEFSQU0gfFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX2V0aHRvb2wuYy0xMjY2LVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MjAxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZibmljX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmMtMjAyMi1cXHQucnhmaF9tYXhfbnVtX2NvbnRleHRzXFx0XFx0PSBGQk5JQ19SUENfUlNTX1RCTF9DT1VOVCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoyMDIzOlxcdC5vcF9uZWVkc19ydG5sXFx0XFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTIHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0yMDI0LVxcdFxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jPTg2Mz1jb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFuYV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jLTg3MC1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFX1RYLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZXRodG9vbC5jOjg3MTpcXHQub3BfbmVlZHNfcnRubFxcdFxcdD0gRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NDSEFOTkVMUyB8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9ldGh0b29sLmMtODcyLVxcdFxcdFxcdFxcdCAgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1NSSU5HUEFSQU0gfFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYz0yMDg9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuc2ltX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2V0aHRvb2wuYy0yMTEtXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX1JJTkdfVVNFX0hEU19USFJTLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmM6MjEyOlxcdC5vcF9uZWVkc19ydG5sXFx0XFx0XFx0PSBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9ldGh0b29sLmMtMjEzLVxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQgICAgICAgID0gbnNpbV9nZXRfcGF1c2Vfc3RhdHMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD05MjM9c3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTMzLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjkzNDovKiBCaXRzIGZvciBldGh0b29sX29wczo6b3BfbmVlZHNfcnRubFxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTkzNS0gKiBMSU5LU0VUVElOR1MgY292ZXIgYSBudW1iZXIgb2YgY29tbWFuZHMsIGJ1dCBpbiBtb3N0IGNhc2VzIHdlIHdhbnQgdG8ga2VlcFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTc0LSAqIEBzdXBwb3J0ZWRfaHd0c3RhbXBfcXVhbGlmaWVyczogYml0ZmllbGQgb2Ygc3VwcG9ydGVkIGh3dHN0YW1wIHF1YWxpZmllci5cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDo5NzU6ICogQG9wX25lZWRzX3J0bmw6IG1hc2sgb2YgJUVUSFRPT0xfT1BfTkVFRFNfUlROTF8qIGJpdHMuXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtOTc2LSAqXFx0Rm9yIHVzZSB3aXRoIG9wcy1sb2NrZWQgZHJpdmVycyAoaWdub3JlZCBvdGhlcndpc2UpLiBTZWxlY3RzIHdoaWNoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaC0xMTkxLSAqIHRoZSBkcml2ZXIgb3B0cyBpbiB2aWEgdGhlIG1hdGNoaW5nIGBgRVRIVE9PTF9PUF9ORUVEU19SVE5MXypgYCBiaXRcXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaDoxMTkyOiAqIGluIEBvcF9uZWVkc19ydG5sLlxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTExOTMtICpcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTEyMDI9c3RydWN0IGV0aHRvb2xfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTEyMTQtXFx0dTMyXFx0c3VwcG9ydGVkX2h3dHN0YW1wX3F1YWxpZmllcnM7XFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTIxNTpcXHR1MzJcXHRvcF9uZWVkc19ydG5sO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTEyMTYtXFx0dm9pZFxcdCgqZ2V0X2RydmluZm8pKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7XFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaD04MT1ib29sIF9fZXRodG9vbF9kZXZfbW1fc3VwcG9ydGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtODgtICogUmV0dXJuOiB0cnVlIGlmIEBjbWQgaXMgYSBjb21tYW5kIGZvciB3aGljaCBAZGV2IGhhcyBvcHRlZC1pbiB0b1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjg5OiAqIGtlZXBpbmcgcnRubF9sb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsICh2aWEgb3BfbmVlZHNfcnRubCkuXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtOTAtICovXFxuLS1cXG5uZXQvZXRodG9vbC9jb21tb24uaD05Mj1ldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNtZClcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwMC1cXHRjYXNlIEVUSFRPT0xfTVNHX0xJTktNT0RFU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAxOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfTElOS1NFVFRJTkdTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwMi1cXHRjYXNlIEVUSFRPT0xfTVNHX1BSSVZGTEFHU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTAzOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDQtXFx0Y2FzZSBFVEhUT09MX01TR19SSU5HU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA1OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMDYtXFx0Y2FzZSBFVEhUT09MX01TR19DSEFOTkVMU19TRVQ6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTA3OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NIQU5ORUxTO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEwOC1cXHRjYXNlIEVUSFRPT0xfTVNHX0NPQUxFU0NFX1NFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMDk6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ09BTEVTQ0U7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTEwLVxcdGNhc2UgRVRIVE9PTF9NU0dfUEFVU0VfR0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjExMTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dQQVVTRVBBUkFNO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTExMi1cXHRjYXNlIEVUSFRPT0xfTVNHX1BBVVNFX1NFVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxMTM6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTQtXFx0Y2FzZSBFVEhUT09MX01TR19SU1NfU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjExNTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xMTYtXFx0Y2FzZSBFVEhUT09MX01TR19MSU5LU1RBVEVfR0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjExNzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTExOC1cXHRjYXNlIEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVDpcXG4tLVxcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTEzNC0gKiBSZXR1cm46IHRydWUgaWYgQGV0aGNtZCBpcyBhIGNvbW1hbmQgZm9yIHdoaWNoIEBkZXYgaGFzIG9wdGVkLWluIHRvXFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTM1OiAqIGtlZXBpbmcgcnRubF9sb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsICh2aWEgb3BfbmVlZHNfcnRubCkuXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTM2LSAqL1xcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmg9MTM4PWV0aHRvb2xfaW9jdGxfbmVlZHNfcnRubChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZXRoY21kKVxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTQ2LVxcdGNhc2UgRVRIVE9PTF9TU0VUOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE0NzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0xJTktTRVRUSU5HUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNDgtXFx0Y2FzZSBFVEhUT09MX1NQRkxBR1M6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTQ5OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1BGTEFHUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTAtXFx0Y2FzZSBFVEhUT09MX1NSSU5HUEFSQU06XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTUxOlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU1JJTkdQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNTItXFx0Y2FzZSBFVEhUT09MX1NDSEFOTkVMUzpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTM6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TQ0hBTk5FTFM7XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU0LVxcdGNhc2UgRVRIVE9PTF9TQ09BTEVTQ0U6XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTU1OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfU0NPQUxFU0NFO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE1Ni1cXHRjYXNlIEVUSFRPT0xfR1BBVVNFUEFSQU06XFxubmV0L2V0aHRvb2wvY29tbW9uLmg6MTU3OlxcdFxcdHJldHVybiBvcHMtXFx1MDAzZW9wX25lZWRzX3J0bmwgXFx1MDAyNiBFVEhUT09MX09QX05FRURTX1JUTkxfR1BBVVNFUEFSQU07XFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTU4LVxcdGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTTpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNTk6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9TUEFVU0VQQVJBTTtcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjAtXFx0Y2FzZSBFVEhUT09MX1NSU1NIOlxcbi0tXFxubmV0L2V0aHRvb2wvY29tbW9uLmgtMTYyLVxcdGNhc2UgRVRIVE9PTF9TUlhGSElORElSOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2MzpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1JTUztcXG5uZXQvZXRodG9vbC9jb21tb24uaC0xNjQtXFx0Y2FzZSBFVEhUT09MX0dMSU5LOlxcbm5ldC9ldGh0b29sL2NvbW1vbi5oOjE2NTpcXHRcXHRyZXR1cm4gb3BzLVxcdTAwM2VvcF9uZWVkc19ydG5sIFxcdTAwMjYgRVRIVE9PTF9PUF9ORUVEU19SVE5MX0dMSU5LO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2Ni1cXHRjYXNlIEVUSFRPT0xfVEVTVDpcXG5uZXQvZXRodG9vbC9jb21tb24uaDoxNjc6XFx0XFx0cmV0dXJuIG9wcy1cXHUwMDNlb3BfbmVlZHNfcnRubCBcXHUwMDI2IEVUSFRPT0xfT1BfTkVFRFNfUlROTF9URVNUO1xcbm5ldC9ldGh0b29sL2NvbW1vbi5oLTE2OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIyOjQyOjQwLjcxNzcwNTY2N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTM3NTk4NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvKmAgZGlyZWN0b3J5LiBBaCwgdGhhdCdzIHRoZSBmYm5pYyBkcml2ZXIg4oCTIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlLiBJdCdzIGEgUENJIGRyaXZlciBmb3IgdGhlaXIgcGh5c2ljYWwgTWV0YSBBU0lDIE5JQ3MuIEFuZCByaWdodCBhd2F5LCBhIHJlZCBmbGFnIOKAkyB0aGlzIGhhcmR3YXJlICpjYW4ndCogYmUgZW11bGF0ZWQgb3IgcHJvYmVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBUaGF0J3MgYSBzaWduaWZpY2FudCBjb25zdHJhaW50LlxuXG5OZXh0LCBJIHNlZSBjaGFuZ2VzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIGBuZXQvZXRodG9vbC9jb21tb24uaGAuIFRoZXkncmUgYWRkaW5nIGEgbmV3IGZsYWcsIGBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVGAsIHdoaWNoIGlzIEJJVCg5KSwgYW5kIHVwZGF0aW5nIGBldGh0b29sX2lvY3RsX25lZWRzX3J0bmxgIHRvIGNoZWNrIGZvciB0aGlzIGZsYWcgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYEVUSFRPT0xfVEVTVGAgY2FzZS4gQnV0IGhlcmUncyB0aGUga2lja2VyOiBubyBkcml2ZXJzIHRoYXQgd2UgY2FuIGFjdHVhbGx5ICpyZWFjaCogb3IgZW11bGF0ZSDigJMgdGhlIHR5cGljYWwgUUVNVS9HQ0UgZGV2aWNlcyDigJMgYXJlIHNldHRpbmcgdGhpcyBgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1RgIGZsYWcuIE9ubHkgdGhlIGZibmljIGRyaXZlciBzZXRzIGl0LiBTbywgZXNzZW50aWFsbHksIHRoaXMgY2hhbmdlIGhhcyBubyBvcGVyYXRpb25hbCBpbXBhY3Qgb24gYW55IHJlYWNoYWJsZSBkZXZpY2UuIEl0J3MganVzdCBnb2luZyB0byByZXR1cm4gMC9mYWxzZSwgc2FtZSBhcyBiZWZvcmUsIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIHRoZSBmYm5pYyBoYXJkd2FyZSwgd2hpY2ggd2UgY2FuJ3QgdGVzdCBhbnl3YXkuIEFuZCB0aGUgZmJuaWMgZHJpdmVyICppdHNlbGYqIGlzIHVucmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIEFTSUMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhhdCwgYW5kIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGRlZmluaXRpb24gb2Ygc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlICh3aGljaCBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyBsaWtlIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1LCBldGMuKSwgYWxsIG9mIHdoaWNoIHJlcXVpcmUgYWN0dWFsIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyB0aGF0IGFyZSAqbm90KiBlbXVsYXRlZCBpbiBRRU1VLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci5cblxuV29ydGhGdXp6aW5nPyBOby4gRm9jdXNTeW1ib2xzPyBFbXB0eS4gRW5hYmxlQ29uZmlncz8gRW1wdHkuXG5cbkknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZywganVzdCB0byBiZSBzdXJlLCBhbmQgdGhlbiBmb3JtdWxhdGUgYSBjb25jaXNlLCBwcmVjaXNlIFJlYXNvbmluZy4gVGhlbiwgSSdsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA2NSwiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjI6NDI6NDcuMjU1MzA2Mzg2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIChmYm5pYykgZHJpdmVyIGFuZCBhZGRzIHRoZSBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnIHRvIHRoZSBjb3JlIGV0aHRvb2wgaW5mcmFzdHJ1Y3R1cmUgc3BlY2lmaWNhbGx5IGZvciBmYm5pYy4gVGhlIGZibmljIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBNZXRhIHBoeXNpY2FsIEFTSUMgbmV0d29yayBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgbm8gcmVhY2hhYmxlIHZpcnR1YWwvZW11bGF0ZWQgZHJpdmVycyBzZXQgdGhlIG5ldyBFVEhUT09MX09QX05FRURTX1JUTkxfVEVTVCBmbGFnLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSAoZmJuaWMpIGRyaXZlciBhbmQgYWRkcyB0aGUgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZyB0byB0aGUgY29yZSBldGh0b29sIGluZnJhc3RydWN0dXJlIHNwZWNpZmljYWxseSBmb3IgZmJuaWMuIFRoZSBmYm5pYyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSBwaHlzaWNhbCBBU0lDIG5ldHdvcmsgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIG5vIHJlYWNoYWJsZSB2aXJ0dWFsL2VtdWxhdGVkIGRyaXZlcnMgc2V0IHRoZSBuZXcgRVRIVE9PTF9PUF9ORUVEU19SVE5MX1RFU1QgZmxhZy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMjo0Mjo0Ny4yNTUzMzA3MjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxrjj2[1] Phase: Running StartedAt: 2026-09-03 22:42:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrjj2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-03 22:42:59 +0000 UTC FinishedAt: 2026-09-03 22:43:03 +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,}