Name: series-workflowpm9cz Phase: Failed StartedAt: 2026-08-02 06:11:01 +0000 UTC FinishedAt: 2026-08-02 06:38:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpm9cz[0] Phase: Succeeded StartedAt: 2026-08-02 06:11:01 +0000 UTC FinishedAt: 2026-08-02 06:38:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpm9cz[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 06:11:01 +0000 UTC FinishedAt: 2026-08-02 06:38:04 +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+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJiMzOTtzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkMjRkNGFjNGI2MWM3ZjcyMGY1YWUzZDNmZmEwMzQ2M2YxNDczMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA2OjM1OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG5pbmRleCBkNTA0YzYzNmRjMjk0Li43MWYzMzU0NDJiYTc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuQEAgLTkzOSw2ICYjNDM7OTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKVxuICAqICAgICAtIGRtYV9idWZfdm1hcCgpXG4gICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKVxuJiM0MzsgKiAgICAgLSBkbWFfYnVmX2dldF9wY2lfdHBoKClcbiAgKlxuICAqIDIuIEltcG9ydGVycyBtdXN0IG5vdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXG4gICogICAgZnVuY3Rpb25zOlxuQEAgLTk3OSw2ICYjNDM7OTgwLDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy51bm1hcF9kbWFfYnVmKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52bWFwKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52dW5tYXAoKVxuJiM0MzsgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXG4gICogICAgZnVuY3Rpb25zOlxuQEAgLTExNDQsNiAmIzQzOzExNDYsMzYgQEAgdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiB9XG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4mIzQzOyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcbiYjNDM7ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuJiM0MzsgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcbiYjNDM7ICpcbiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuJiM0MzsgKlxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIC1FT1BOT1RTVVBQIGlmIHRoZVxuJiM0MzsgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4mIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBzdGVlcmluZyB0YWcgYW5kIHByb2Nlc3NpbmcgaGludCBhcmUgb25seSB2YWxpZCB1bnRpbCB0aGVcbiYjNDM7ICogZXhwb3J0ZXIgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbWFwcGluZyAoc2lnbmFsbGVkIHRvIHRoZSBpbXBvcnRlciB2aWFcbiYjNDM7ICogXHUwMDI2ZG1hX2J1Zl9hdHRhY2hfb3BzLmludmFsaWRhdGVfbWFwcGluZ3MpLiBJbXBvcnRlcnMgbXVzdCByZS1xdWVyeSBhZnRlciBhIG5ld1xuJiM0MzsgKiBtYXBwaW5nIGlzIGVzdGFibGlzaGVkIGZvbGxvd2luZyBpbnZhbGlkYXRpb24uXG4mIzQzOyAqL1xuJiM0MztpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuJiM0MztcbiAvKipcbiAgKiBkbWFfYnVmX21hcF9hdHRhY2htZW50IC0gUmV0dXJucyB0aGUgc2NhdHRlcmxpc3QgdGFibGUgb2YgdGhlIGF0dGFjaG1lbnQ7XG4gICogbWFwcGVkIGludG8gX2RldmljZV8gYWRkcmVzcyBzcGFjZS4gSXMgYSB3cmFwcGVyIGZvciBtYXBfZG1hX2J1ZigpIG9mIHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuaW5kZXggMDI4MDkxMTRmYzc5YS4uYTJiNDk3ZjZiMTZiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXG5AQCAtNjAsNiAmIzQzOzYwLDcgQEBcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0VsaSBDb2hlbiBcdTAwM2NlbGlAbWVsbGFub3guY29tXHUwMDNlXCYjMzQ7KTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4gXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG5pbmRleCA1MjI5ODRkOTU4YmJmLi5jNmE5NTZiMmVlODdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tbHg1X2liLmhcbkBAIC02NDYsNiAmIzQzOzY0NiwxNSBAQCBlbnVtIG1seDVfbWtleV90eXBlIHtcbiAvKiBVc2VkIGZvciBub24tZXhpc3RlbnQgcGggdmFsdWUgKi9cbiAjZGVmaW5lIE1MWDVfSUJfTk9fUEggMHhmZlxuIFxuJiM0MztzdHJ1Y3QgZG1hX2J1ZjtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGgge1xuJiM0MztcdHUxNiBzdGVlcmluZ190YWc7XG4mIzQzO1x0dTggcGg7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHRib29sIHZhbGlkO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbWx4NV9pYl9ta2V5IHtcbiBcdHUzMiBrZXk7XG4gXHRlbnVtIG1seDVfbWtleV90eXBlIHR5cGU7XG5AQCAtNzI2LDYgJiM0Mzs3MzUsNyBAQCBzdHJ1Y3QgbWx4NV9pYl9tciB7XG4gXHRcdFx0dTggcmV2b2tlZCA6MTtcbiBcdFx0XHQvKiBJbmRpY2F0ZXMgcHJldmlvdXMgZG1hYnVmIHBhZ2UgZmF1bHQgb2NjdXJyZWQgKi9cbiBcdFx0XHR1OCBkbWFidWZfZmF1bHRlZDoxO1xuJiM0MztcdFx0XHRzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoIGRtYWJ1Zl90cGg7XG4gXHRcdFx0c3RydWN0IG1seDVfaWJfbWtleSBudWxsX21ta2V5O1xuIFx0XHR9O1xuIFx0fTtcbkBAIC0xMzQxLDYgJiM0MzsxMzUxLDcgQEAgc3RydWN0IGliX21yICptbHg1X2liX3JlcmVnX3VzZXJfbXIoc3RydWN0IGliX21yICppYl9tciwgaW50IGZsYWdzLCB1NjQgc3RhcnQsXG4gXHRcdFx0XHQgICAgdTY0IGxlbmd0aCwgdTY0IHZpcnRfYWRkciwgaW50IGFjY2Vzc19mbGFncyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTtcbiBpbnQgbWx4NV9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xuJiM0MztpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zik7XG4gc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yKHN0cnVjdCBpYl9wZCAqcGQsIGVudW0gaWJfbXJfdHlwZSBtcl90eXBlLFxuIFx0XHRcdCAgICAgICB1MzIgbWF4X251bV9zZyk7XG4gc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yX2ludGVncml0eShzdHJ1Y3QgaWJfcGQgKnBkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jXG5pbmRleCBlNmI3NDk1NWQ5NWRjLi40MDRjNWQwODFiOGFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcmRtYS9mcm1yX3Bvb2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2liX3VtZW1fb2RwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtkbS5oXCYjMzQ7XG5AQCAtMTY3LDYgJiM0MzsxNjgsNjEgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0sgR0VOTUFTS19VTEwoMjMsIDE2KVxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyBHRU5NQVNLX1VMTCgxNSwgMClcbiBcbiYjNDM7c3RhdGljIHU4IG1seDVfaWJfdHBoX2tleV9waCh1OCBwaClcbiYjNDM7e1xuJiM0MztcdGlmIChwaCA9PSBNTFg1X0lCX05PX1BIIHx8IHBoID09IDApXG4mIzQzO1x0XHRwaCBePSBNTFg1X0lCX05PX1BIO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWx4NV9zdF9nZXRfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3RfaW5kZXggPSBGSUVMRF9HRVQoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyxcbiYjNDM7XHRcdFx0XHQga2VybmVsX3ZlbmRvcl9rZXkpO1xuJiM0MztcbiYjNDM7XHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCAqdHBoID0gXHUwMDI2bXItXHUwMDNlZG1hYnVmX3RwaDtcbiYjNDM7XHR1MTYgc3RlZXJpbmdfdGFnO1xuJiM0MztcdHU4IHBoO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdHBoLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIHRwaC1cdTAwM2VleHRlbmRlZCwgXHUwMDI2c3RlZXJpbmdfdGFnLCBcdTAwMjZwaCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RlZXJpbmdfdGFnICE9IHRwaC1cdTAwM2VzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLVx1MDAzZXBoKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqXG4gX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdFx0ICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLFxuQEAgLTE4OSwxMyAmIzQzOzI0NSwxMCBAQCBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRcdE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0sgOlxuIFx0XHRcdDA7XG4gXG4tXHQvKiBOb3JtYWxpemUgcGg6IHN3YXAgMCBhbmQgTUxYNV9JQl9OT19QSCAqL1xuLVx0aWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMClcbi1cdFx0cGggXj0gTUxYNV9JQl9OT19QSDtcbi1cbiBcdG1yLVx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxuIFx0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4tXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xuJiM0MztcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLFxuJiM0MztcdFx0XHQgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTtcbiBcdGVyciA9IGliX2ZybXJfcG9vbF9wb3AoXHUwMDI2ZGV2LVx1MDAzZWliX2RldiwgXHUwMDI2bXItXHUwMDNlaWJtcik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGtmcmVlKG1yKTtcbkBAIC0yMTgsNyAmIzQzOzI3MSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgMCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLFxuIFx0XHQubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsXG4tXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqL1xuJiM0MztcdFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cbiYjNDM7XHRcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksXG4gXHR9O1xuIFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xuIFx0aW50IHJldDtcbkBAIC01NTcsNiAmIzQzOzYxMiwxMCBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKnJlZ19jcmVhdGUoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRtci1cdTAwM2VpYm1yLnBkID0gcGQ7XG4gXHRtci1cdTAwM2VhY2Nlc3NfZmxhZ3MgPSBhY2Nlc3NfZmxhZ3M7XG4gXHRtci1cdTAwM2VwYWdlX3NoaWZ0ID0gb3JkZXJfYmFzZV8yKHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0bXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0ssXG4mIzQzO1x0XHRcdCAgIG1seDVfaWJfdHBoX2tleV9waChwaCkpO1xuIFxuIFx0aW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTtcbiBcdGlmIChwb3B1bGF0ZSlcbkBAIC03NTMsNiAmIzQzOzgxMiwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdFx0XHRzdF9pbmRleCA9IG1kbWFoLVx1MDAzZXN0X2luZGV4O1xuIFx0fVxuIFxuJiM0MztcdGVyciA9IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0eGx0X3dpdGhfdW1yID0gbWx4NXJfdW1yX2Nhbl9sb2FkX3BhcyhkZXYsIHVtZW0tXHUwMDNlbGVuZ3RoKTtcbiBcdGlmICh4bHRfd2l0aF91bXIpIHtcbiBcdFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncyxcbkBAIC03NjksNiAmIzQzOzgzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXNsb3dfcGF0aF9tdXRleCk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuJiM0MztcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG5AQCAtOTAzLDYgJiM0Mzs5NjksNjMgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBnZXRfcGNpX3RwaF9tcl9kbWFidWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoICp0cGgsXG4mIzQzO1x0XHRcdFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbG9jYWxfc3RfaW5kZXg7XG4mIzQzO1x0dTE2IHN0ZWVyaW5nX3RhZztcbiYjNDM7XHR1OCBsb2NhbF9waDtcbiYjNDM7XHRib29sIGV4dGVuZGVkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShkZXYtXHUwMDNlbWRldi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XG4mIzQzO1x0XHRleHRlbmRlZCA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOlxuJiM0MztcdFx0ZXh0ZW5kZWQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpIG11c3QgcnVuIHVuZGVyIGRtYWJ1Zi1cdTAwM2VyZXN2LCBidXQgZHJvcCB0aGUgbG9ja1xuJiM0MztcdCAqIGJlZm9yZSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZygpOiB0aGF0IGFsbG9jYXRlcyB3aXRoIEdGUF9LRVJORUwsXG4mIzQzO1x0ICogd2hpY2ggbXVzdCBub3QgcnVuIHVuZGVyIGRtYWJ1Zi1cdTAwM2VyZXN2IHNpbmNlIHJlY2xhaW0gY2FuIHJlLWVudGVyIHRoZVxuJiM0MztcdCAqIHNhbWUgcmVzZXJ2YXRpb24gb2JqZWN0IHRocm91Z2ggYSBkeW5hbWljIGV4cG9ydGVyJiMzOTtzIG1vdmVfbm90aWZ5IHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0ZG1hX3Jlc3ZfbG9jayhkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBcdTAwMjZzdGVlcmluZ190YWcsIFx1MDAyNmxvY2FsX3BoKTtcbiYjNDM7XHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRcdG1seDVfaWJfZGJnKGRldiwgXCYjMzQ7Z2V0X3BjaV90cGggZmFpbGVkICglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYtXHUwMDNlbWRldiwgc3RlZXJpbmdfdGFnLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNmxvY2FsX3N0X2luZGV4KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtbHg1X2liX2RiZyhkZXYsIFwmIzM0O3N0X2FsbG9jX2luZGV4X2J5X3RhZyBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpzdF9pbmRleCA9IGxvY2FsX3N0X2luZGV4O1xuJiM0MztcdCpwaCA9IGxvY2FsX3BoO1xuJiM0MztcdHRwaC1cdTAwM2VzdGVlcmluZ190YWcgPSBzdGVlcmluZ190YWc7XG4mIzQzO1x0dHBoLVx1MDAzZXBoID0gbG9jYWxfcGg7XG4mIzQzO1x0dHBoLVx1MDAzZWV4dGVuZGVkID0gZXh0ZW5kZWQ7XG4mIzQzO1x0dHBoLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4mIzQzO3tcbiYjNDM7XHRtbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLFxuJiM0MztcdFx0XHRcdCAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBpYl9tciAqXG4gcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRcdCAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsXG5AQCAtOTEzLDYgJiM0MzsxMDM2LDcgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtXHUwMDNlZGV2aWNlKTtcbiBcdHN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWJfdW1lbV9kbWFidWYgKnVtZW1fZG1hYnVmO1xuJiM0MztcdHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggdHBoID0ge307XG4gXHR1MTYgc3RfaW5kZXggPSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVg7XG4gXHR1OCBwaCA9IE1MWDVfSUJfTk9fUEg7XG4gXHRpbnQgZXJyO1xuQEAgLTk0NSwxOCAmIzQzOzEwNjksMjkgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRcdHBoID0gZG1haC1cdTAwM2VwaDtcbiBcdFx0aWYgKGRtYWgtXHUwMDNldmFsaWRfZmllbGRzIFx1MDAyNiBCSVQoSUJfRE1BSF9DUFVfSURfRVhJU1RTKSlcbiBcdFx0XHRzdF9pbmRleCA9IG1kbWFoLVx1MDAzZXN0X2luZGV4O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Z2V0X3BjaV90cGhfbXJfZG1hYnVmKGRldiwgdW1lbV9kbWFidWYtXHUwMDNlYXR0YWNoLVx1MDAzZWRtYWJ1ZixcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZ0cGgsIFx1MDAyNnN0X2luZGV4LCBcdTAwMjZwaCk7XG4gXHR9XG4gXG4gXHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSwgdmlydF9hZGRyLFxuIFx0XHRcdFx0YWNjZXNzX2ZsYWdzLCBhY2Nlc3NfbW9kZSxcbiBcdFx0XHRcdHN0X2luZGV4LCBwaCk7XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuJiM0MztcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG4gXG4gXHRtbHg1X2liX2RiZyhkZXYsIFwmIzM0O21rZXkgMHgleFxcblwmIzM0OywgbXItXHUwMDNlbW1rZXkua2V5KTtcbiBcbiYjNDM7XHRtci1cdTAwM2VkbWFidWZfdHBoID0gdHBoO1xuIFx0YXRvbWljX2FkZChpYl91bWVtX251bV9wYWdlcyhtci1cdTAwM2V1bWVtKSwgXHUwMDI2ZGV2LVx1MDAzZW1kZXYtXHUwMDNlcHJpdi5yZWdfcGFnZXMpO1xuIFx0dW1lbV9kbWFidWYtXHUwMDNlcHJpdmF0ZSA9IG1yO1xuIFx0aWYgKCFwaW5uZWRfbW9kZSkge1xuQEAgLTE0MDUsNiAmIzQzOzE1NDAsNyBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKVxuIFx0aWYgKG1yLVx1MDAzZWlibXIuZnJtci5wb29sKSB7XG4gXHRcdGlmICghbWx4NV91bXJfcmV2b2tlX21yX3dpdGhfbG9jayhtcikpIHtcbiBcdFx0XHRpYl9mcm1yX3Bvb2xfcHVzaChtci1cdTAwM2VpYm1yLmRldmljZSwgXHUwMDI2bXItXHUwMDNlaWJtcik7XG4mIzQzO1x0XHRcdG1seDVfaWJfbXJfcHV0X3N0X2hhbmRsZV9yZWYobXIpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTQzMiw2ICYjNDM7MTU2OCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wgXHUwMDI2XHUwMDI2ICFyZXQpXG4gXHRcdGliX2ZybXJfcG9vbF9kcm9wKFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFxuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihtcik7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuaW5kZXggMWJhZGVjOWJmNTI3MC4uN2MxNzMxYWEzZGQ5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuQEAgLTg1Nyw2ICYjNDM7ODU3LDEzIEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X2RtYWJ1Zl9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIsIHNpemVfdCBiY250LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGVyciA9IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChtciwgdW1lbV9kbWFidWYtXHUwMDNlYXR0YWNoLVx1MDAzZWRtYWJ1Zik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWJfdW1lbV9kbWFidWZfdW5tYXBfcGFnZXModW1lbV9kbWFidWYpO1xuJiM0MztcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwYWdlX3NpemUgPSBtbHg1X3VtZW1fZG1hYnVmX2ZpbmRfYmVzdF9wZ3N6KHVtZW1fZG1hYnVmLCBhY2Nlc3NfbW9kZSk7XG4gXHRpZiAoIXBhZ2Vfc2l6ZSkge1xuIFx0XHRpYl91bWVtX2RtYWJ1Zl91bm1hcF9wYWdlcyh1bWVtX2RtYWJ1Zik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG5pbmRleCA3Y2VkYzM0ODc5MGRiLi5jNjJiY2FlN2M1NDIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcbkBAIC05MiwyMyAmIzQzOzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRrZnJlZShzdCk7XG4gfVxuIFxuLWludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuLVx0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuJiM0MztpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpXG4ge1xuIFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xuIFx0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcdHUzMiB4YV9pZDtcbi1cdHUxNiB0YWc7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKCFzdClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKHN0LVx1MDAzZWRpcmVjdF9tb2RlKSB7XG4gXHRcdCpzdF9pbmRleCA9IHRhZztcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTUyLDggJiM0MzsxNDcsNDkgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRtdXRleF91bmxvY2soXHUwMDI2c3QtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpO1xuJiM0MztcbiYjNDM7aW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHRhZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VzdClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleCk7XG4gXG4mIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG4mIzQzO1x0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZHhfZGF0YSA9IHhhX2xvYWQoXHUwMDI2c3QtXHUwMDNlaWR4X3hhLCBzdF9pbmRleCk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWR4X2RhdGEtXHUwMDNldXNlY291bnQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2dldF9pbmRleCk7XG4mIzQzO1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2Li5kMDIwMmZmN2ExYjI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMjAwLDYgJiM0MzsyMDAsNyBAQCBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKTtcbiBzdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpycDtcbiYjNDM7XHR1OCB0cGhfY29tcDtcbiBcdHUzMiByZWc7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTIxMSw4ICYjNDM7MjEyLDYwIEBAIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAwYjEwIGlzIHJlc2VydmVkOyB0cmVhdCBpdCBhcyBcJiMzNDtub3Qgc3VwcG9ydGVkXCYjMzQ7IHNvIG9ubHkgdGhlXG4mIzQzO1x0ICogYXJjaGl0ZWN0ZWQgZW5jb2RpbmdzIHJlYWNoIHRoZSBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xuJiM0MztcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcbiYjNDM7XHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4mIzQzO1x0XHRyZXR1cm4gdHBoX2NvbXA7XG4mIzQzO1x0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgXCYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWRcJiMzNDsgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxuJiM0MzsgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbiYjNDM7ICogXCYjMzQ7bm90IHN1cHBvcnRlZFwmIzM0OyBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4mIzQzOyAqIGRlZmluZWQgdmFsdWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4mIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuJiM0MzsgKiAgICAgICAgICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTggdHBoX2NvbXA7XG4mIzQzO1x0dTMyIHJlZztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXHUwMDI2cmVnKSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiYjNDM7XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1xuJiM0MztcdC8qIDBiMTAgaXMgcmVzZXJ2ZWQ7IGZvbGQgaXQgaW50byBcJiMzNDtub3Qgc3VwcG9ydGVkXCYjMzQ7IChzZWUgYWJvdmUpLiAqL1xuJiM0MztcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xuJiM0MztcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcbiYjNDM7XHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4mIzQzO1x0XHRyZXR1cm4gdHBoX2NvbXA7XG4mIzQzO1x0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XG4gXG4gLyogV3JpdGUgdGFnIHRvIFNUIHRhYmxlIC0gUmV0dXJuIDAgaWYgT0ssIG90aGVyd2lzZSAtZXJybm8gKi9cbiBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IDNmMTFhOTYyNGI5YzAuLjRlNWUzNGE3N2I3NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xNjI1LDYgJiM0MzsxNjI1LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbmluZGV4IGMxNmY0NjBjMDFkNjguLmY2MzAxNTgyMDRiNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZmaW9fcGNpX3ByaXYuaFwmIzM0O1xuQEAgLTE5LDcgJiM0MzsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XG4mIzQzO1x0ICogcHJvdGVjdGVkIGJ5IG1lbW9yeV9sb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdHUxNiB0cGhfc3RfZXh0O1xuJiM0MztcdHU4IHRwaF9zdDtcbiYjNDM7XHRib29sIHJldm9rZWQ7XG4mIzQzO1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4mIzQzO1x0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9waDoyO1xuIH07XG4gXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuQEAgLTMwLDcgJiM0Mzs0MSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdGlmICghYXR0YWNobWVudC1cdTAwM2VwZWVyMnBlZXIpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXJldm9rZWQpXG4mIzQzO1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXJldm9rZWQpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKVxuQEAgLTY5LDYgJiM0Mzs4MCwyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGV4dGVuZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0X2V4dDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0O1xuJiM0MztcdH1cbiYjNDM7XHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcbiBcdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbkBAIC0xMDEsNiAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbiYjNDM7XHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxuIFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXG4gXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbkBAIC0zMzMsNiAmIzQzOzM2NSw4NiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHR1OCBjb21wO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0X3RwaC5mbGFncyBcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfdHBoLnBoIFx1MDAyNiB+MHgzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICgoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjb21wICE9IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRkbWFidWYgPSBkbWFfYnVmX2dldChzZXRfdHBoLmRtYWJ1Zl9mZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBAcmV2b2tlZCBhbmQgdGhlIGRtYS1idWYvdmRldiBhc3NvY2lhdGlvbiBhcmUgdG9ybiBkb3duIHVuZGVyXG4mIzQzO1x0ICogbWVtb3J5X2xvY2sgYnkgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCk7IGhvbGQgaXQgd2hpbGUgdmFsaWRhdGluZ1xuJiM0MztcdCAqIG93bmVyc2hpcCBhbmQgcHVibGlzaGluZyBzbyB0aGUgZG1hLWJ1ZiBjYW5ub3QgYmUgZGlzYXNzb2NpYXRlZCBmcm9tXG4mIzQzO1x0ICogQHZkZXYgdW5kZXJuZWF0aCB1cy4gTG9jayBvcmRlciBtZW1vcnlfbG9jayAtXHUwMDNlIGRtYWJ1Zi1cdTAwM2VyZXN2IG1hdGNoZXNcbiYjNDM7XHQgKiB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkb3duX3JlYWQoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNldmRldiAhPSB2ZGV2KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrX21lbTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9ja19tZW07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxuJiM0MztcdFx0ISEoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpO1xuJiM0MztcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7XG4mIzQzO291dF91bmxvY2tfbWVtOlxuJiM0MztcdHVwX3JlYWQoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO291dF9wdXQ6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuQEAgLTM0Nyw3ICYjNDM7NDU5LDcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4gXHRcdGlmIChwcml2LVx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xuIFx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4gXHRcdFx0aWYgKHJldm9rZWQpXG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VyZXZva2VkLCB0cnVlKTtcbiBcdFx0XHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cdTAwM2VkbWFidWYpO1xuIFx0XHRcdGRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2LFxuIFx0XHRcdFx0XHQgICAgICBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCwgZmFsc2UsXG5AQCAtMzY5LDcgJiM0Mzs0ODEsNyBAQCB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbiBcdFx0XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSBmYWxzZTtcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcmV2b2tlZCwgZmFsc2UpO1xuIFx0XHRcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbmluZGV4IGZjYTlkMGRmYWM5MGYuLjA2M2YzNzQ4NDc4YWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbkBAIC0xMTgsNiAmIzQzOzExOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbiBcdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4gI2Vsc2VcbkBAIC0xMjgsNiAmIzQzOzEzMiwxNSBAQCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PVFRZO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuaW5kZXggZDEyMDNkYTU2ZmM1Zi4uMTRlOGViNjFhNjJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuQEAgLTExMyw2ICYjNDM7MTEzLDI5IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAZ2V0X3BjaV90cGg6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4mIzQzO1x0ICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uXG4mIzQzO1x0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhXG4mIzQzO1x0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MztcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4mIzQzO1x0ICogICAgICAgICAgICAgICAgbmFtZXNwYWNlXG4mIzQzO1x0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoXG4mIzQzO1x0ICogXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW5cbiYjNDM7XHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJldHVybmVkIG1ldGFkYXRhIGZvbGxvd3MgdGhlIGxpZmV0aW1lIHJ1bGVzIGRvY3VtZW50ZWQgZm9yXG4mIzQzO1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGludCAoKmdldF9wY2lfdHBoKShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbiYjNDM7XG4gXHQvKipcbiBcdCAqIEBtYXBfZG1hX2J1ZjpcbiBcdCAqXG5AQCAtNTYzLDYgJiM0Mzs1ODYsOCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRcdCAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuJiM0MztpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbiBcbiBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbmluZGV4IGIxODcxYzA4MjFkMGIuLmQyNmU1NzQ0Yzg0M2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTExODIsMTYgJiM0MzsxMTgyLDMxIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlXG4gXHRcdFx0ICAgdTY0IGxlbmd0aCwgdTE2IHVpZCwgcGh5c19hZGRyX3QgYWRkciwgdTMyIG9ial9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuJiM0MztpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpO1xuJiM0MztpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpO1xuICNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUxNiB0YWcsIHUxNiAqc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4ge1xuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbmluZGV4IGJlNjhjZDE3ZjJmODMuLjc3NDNhZjZmZTQzMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbiYjNDM7XG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0zMCw2ICYjNDM7MzIsOCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4mIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuQEAgLTQxLDYgJiM0Mzs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbmluZGV4IDVkZTYxOGEzYTVlZWUuLjRjMWM3MGFhYzE1MDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICYjNDM7MTUzNCw0OSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuJiM0MzsvKipcbiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbiYjNDM7ICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XG4mIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuJiM0MzsgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXG4mIzQzOyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxuJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxuJiM0MzsgKlxuJiM0MzsgKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxuJiM0MzsgKlxuJiM0MzsgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxuJiM0MzsgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBAZmxhZ3MgaXMgdGhlIGF1dGhvcml0YXRpdmUgdmFsaWRpdHkgbWFzayBmb3IgdGhlXG4mIzQzOyAqIHR3byBuYW1lc3BhY2VzOiBWRklPX0RNQV9CVUZfVFBIX1NUIG1hcmtzIEBzdGVlcmluZ190YWcgdmFsaWQgYW5kXG4mIzQzOyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlclxuJiM0MzsgKiByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJiMzOTtzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXNcbiYjNDM7ICogb25seS4gQSBuYW1lc3BhY2Ugd2hvc2UgZmxhZyBiaXQgaXMgY2xlYXIgaXMgcmVwb3J0ZWQgYXMgdW5zdXBwb3J0ZWRcbiYjNDM7ICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZVxuJiM0MzsgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvclxuJiM0MzsgKiBmdXR1cmUgaW1wb3J0ZXJzLlxuJiM0MzsgKlxuJiM0MzsgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbiYjNDM7ICpcbiYjNDM7ICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby5cbiYjNDM7ICpcbiYjNDM7ICogVXNlcnNwYWNlIG11c3QgY29uZmlndXJlIFRQSCBiZWZvcmUgaGFuZGluZyB0aGUgZG1hLWJ1ZiBmZCB0byBhblxuJiM0MzsgKiBpbXBvcnRlci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxM1xuJiM0MztcbiYjNDM7I2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUXHRcdCgxIFx1MDAzY1x1MDAzYyAxKVxuJiM0MztcbiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGgge1xuJiM0MztcdF9fczMyXHRkbWFidWZfZmQ7XG4mIzQzO1x0X191MzJcdGZsYWdzO1xuJiM0MztcdF9fdTE2XHRzdGVlcmluZ190YWdfZXh0O1xuJiM0MztcdF9fdThcdHN0ZWVyaW5nX3RhZztcbiYjNDM7XHRfX3U4XHRwaDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJiMzOTtzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkMjRkNGFjNGI2MWM3ZjcyMGY1YWUzZDNmZmEwMzQ2M2YxNDczMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDA2OjM1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKaW5kZXggZDUwNGM2MzZkYzI5NC4uNzFmMzM1NDQyYmE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCkBAIC05MzksNiAmIzQzOzkzOSw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKQogICogICAgIC0gZG1hX2J1Zl92bWFwKCkKICAqICAgICAtIGRtYV9idWZfdnVubWFwKCkKJiM0MzsgKiAgICAgLSBkbWFfYnVmX2dldF9wY2lfdHBoKCkKICAqCiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZQogICogICAgZnVuY3Rpb25zOgpAQCAtOTc5LDYgJiM0Mzs5ODAsNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQogICogICAgIC0gJmFtcDtkbWFfYnVmX29wcy51bm1hcF9kbWFfYnVmKCkKICAqICAgICAtICZhbXA7ZG1hX2J1Zl9vcHMudm1hcCgpCiAgKiAgICAgLSAmYW1wO2RtYV9idWZfb3BzLnZ1bm1hcCgpCiYjNDM7ICogICAgIC0gJmFtcDtkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpCiAgKgogICogMy4gRXhwb3J0ZXJzIG11c3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZQogICogICAgZnVuY3Rpb25zOgpAQCAtMTE0NCw2ICYjNDM7MTE0NiwzNiBAQCB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQogfQogRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgJiMzNDtETUFfQlVGJiMzNDspOwogCiYjNDM7LyoqCiYjNDM7ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCAtIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBtZXRhZGF0YQomIzQzOyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnkKJiM0MzsgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUCiYjNDM7ICogQHN0ZWVyaW5nX3RhZzogcmV0dXJucyB0aGUgcmF3IHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2UKJiM0MzsgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnQKJiM0MzsgKgomIzQzOyAqIFdyYXBwZXIgZm9yIHRoZSBvcHRpb25hbCAmYW1wO2RtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLgomIzQzOyAqCiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCAmYW1wO2RtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIC1FT1BOT1RTVVBQIGlmIHRoZQomIzQzOyAqIGV4cG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgb3IgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUKJiM0MzsgKiByZXF1ZXN0ZWQgbmFtZXNwYWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIHJldHVybmVkIHN0ZWVyaW5nIHRhZyBhbmQgcHJvY2Vzc2luZyBoaW50IGFyZSBvbmx5IHZhbGlkIHVudGlsIHRoZQomIzQzOyAqIGV4cG9ydGVyIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IG1hcHBpbmcgKHNpZ25hbGxlZCB0byB0aGUgaW1wb3J0ZXIgdmlhCiYjNDM7ICogJmFtcDtkbWFfYnVmX2F0dGFjaF9vcHMuaW52YWxpZGF0ZV9tYXBwaW5ncykuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3CiYjNDM7ICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLgomIzQzOyAqLwomIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCkKJiM0Mzt7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmICghZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiYjNDM7CiAvKioKICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDsKICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYwppbmRleCAwMjgwOTExNGZjNzlhLi5hMmI0OTdmNmIxNmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jCkBAIC02MCw2ICYjNDM7NjAsNyBAQAogTU9EVUxFX0FVVEhPUigmIzM0O0VsaSBDb2hlbiAmbHQ7ZWxpQG1lbGxhbm94LmNvbSZndDsmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIElCIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7RHVhbCBCU0QvR1BMJiMzNDspOwomIzQzO01PRFVMRV9JTVBPUlRfTlMoJiMzNDtETUFfQlVGJiMzNDspOwogCiBzdHJ1Y3QgbWx4NV9pYl9ldmVudF93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaAppbmRleCA1MjI5ODRkOTU4YmJmLi5jNmE5NTZiMmVlODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tbHg1X2liLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oCkBAIC02NDYsNiAmIzQzOzY0NiwxNSBAQCBlbnVtIG1seDVfbWtleV90eXBlIHsKIC8qIFVzZWQgZm9yIG5vbi1leGlzdGVudCBwaCB2YWx1ZSAqLwogI2RlZmluZSBNTFg1X0lCX05PX1BIIDB4ZmYKIAomIzQzO3N0cnVjdCBkbWFfYnVmOwomIzQzOwomIzQzO3N0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggewomIzQzOwl1MTYgc3RlZXJpbmdfdGFnOwomIzQzOwl1OCBwaDsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG1seDVfaWJfbWtleSB7CiAJdTMyIGtleTsKIAllbnVtIG1seDVfbWtleV90eXBlIHR5cGU7CkBAIC03MjYsNiAmIzQzOzczNSw3IEBAIHN0cnVjdCBtbHg1X2liX21yIHsKIAkJCXU4IHJldm9rZWQgOjE7CiAJCQkvKiBJbmRpY2F0ZXMgcHJldmlvdXMgZG1hYnVmIHBhZ2UgZmF1bHQgb2NjdXJyZWQgKi8KIAkJCXU4IGRtYWJ1Zl9mYXVsdGVkOjE7CiYjNDM7CQkJc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCBkbWFidWZfdHBoOwogCQkJc3RydWN0IG1seDVfaWJfbWtleSBudWxsX21ta2V5OwogCQl9OwogCX07CkBAIC0xMzQxLDYgJiM0MzsxMzUxLDcgQEAgc3RydWN0IGliX21yICptbHg1X2liX3JlcmVnX3VzZXJfbXIoc3RydWN0IGliX21yICppYl9tciwgaW50IGZsYWdzLCB1NjQgc3RhcnQsCiAJCQkJICAgIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsIGludCBhY2Nlc3NfZmxhZ3MsCiAJCQkJICAgIHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOwogaW50IG1seDVfaWJfZGVyZWdfbXIoc3RydWN0IGliX21yICppYm1yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKJiM0MztpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zik7CiBzdHJ1Y3QgaWJfbXIgKm1seDVfaWJfYWxsb2NfbXIoc3RydWN0IGliX3BkICpwZCwgZW51bSBpYl9tcl90eXBlIG1yX3R5cGUsCiAJCQkgICAgICAgdTMyIG1heF9udW1fc2cpOwogc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yX2ludGVncml0eShzdHJ1Y3QgaWJfcGQgKnBkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKaW5kZXggZTZiNzQ5NTVkOTVkYy4uNDA0YzVkMDgxYjhhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jCkBAIC0zOSw2ICYjNDM7MzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtyZG1hL2ZybXJfcG9vbHMuaCZndDsKICNpbmNsdWRlICZsdDtyZG1hL2liX3VtZW1fb2RwLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2RtLmgmIzM0OwpAQCAtMTY3LDYgJiM0MzsxNjgsNjEgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwKICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyBHRU5NQVNLX1VMTCgyMywgMTYpCiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0sgR0VOTUFTS19VTEwoMTUsIDApCiAKJiM0MztzdGF0aWMgdTggbWx4NV9pYl90cGhfa2V5X3BoKHU4IHBoKQomIzQzO3sKJiM0MzsJaWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMCkKJiM0MzsJCXBoIF49IE1MWDVfSUJfTk9fUEg7CiYjNDM7CiYjNDM7CXJldHVybiBwaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBtbHg1X3N0X2dldF9pbmRleChkZXYtJmd0O21kZXYsIHN0X2luZGV4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LSZndDttZGV2LCBzdF9pbmRleCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiYjNDM7CQkJCSAgICAgIHU2NCBrZXJuZWxfdmVuZG9yX2tleSkKJiM0Mzt7CiYjNDM7CXUxNiBzdF9pbmRleCA9IEZJRUxEX0dFVChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLAomIzQzOwkJCQkga2VybmVsX3ZlbmRvcl9rZXkpOwomIzQzOwomIzQzOwltbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCAqdHBoID0gJmFtcDttci0mZ3Q7ZG1hYnVmX3RwaDsKJiM0MzsJdTE2IHN0ZWVyaW5nX3RhZzsKJiM0MzsJdTggcGg7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdHBoLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwomIzQzOwlyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgdHBoLSZndDtleHRlbmRlZCwgJmFtcDtzdGVlcmluZ190YWcsICZhbXA7cGgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChzdGVlcmluZ190YWcgIT0gdHBoLSZndDtzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLSZndDtwaCkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKgogX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAkJICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLApAQCAtMTg5LDEzICYjNDM7MjQ1LDEwIEBAIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJCQlNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLIDoKIAkJCTA7CiAKLQkvKiBOb3JtYWxpemUgcGg6IHN3YXAgMCBhbmQgTUxYNV9JQl9OT19QSCAqLwotCWlmIChwaCA9PSBNTFg1X0lCX05PX1BIIHx8IHBoID09IDApCi0JCXBoIF49IE1MWDVfSUJfTk9fUEg7Ci0KIAltci0mZ3Q7aWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9CiAJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHwKLQkJRklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLCBwaCk7CiYjNDM7CQlGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0ssCiYjNDM7CQkJICAgbWx4NV9pYl90cGhfa2V5X3BoKHBoKSk7CiAJZXJyID0gaWJfZnJtcl9wb29sX3BvcCgmYW1wO2Rldi0mZ3Q7aWJfZGV2LCAmYW1wO21yLSZndDtpYm1yKTsKIAlpZiAoZXJyKSB7CiAJCWtmcmVlKG1yKTsKQEAgLTIxOCw3ICYjNDM7MjcxLDkgQEAgc3RydWN0IG1seDVfaWJfbXIgKm1seDVfbXJfY2FjaGVfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiAJCQkJICAgICAgMCA6CiAJCQkJICAgICAgTUxYNV9GUk1SX1BPT0xTX0tFWV9BQ0NFU1NfTU9ERV9LU01fTUFTSywKIAkJLm51bV9kbWFfYmxvY2tzID0gbmRlc2NzLAotCQkua2VybmVsX3ZlbmRvcl9rZXkgPSAwLCAvKiBubyBQSCBhbmQgbm8gU1QgaW5kZXggKi8KJiM0MzsJCS5rZXJuZWxfdmVuZG9yX2tleSA9CiYjNDM7CQkJRklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLAomIzQzOwkJCQkgICBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpLAogCX07CiAJc3RydWN0IG1seDVfaWJfbXIgKm1yOwogCWludCByZXQ7CkBAIC01NTcsNiAmIzQzOzYxMiwxMCBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKnJlZ19jcmVhdGUoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJbXItJmd0O2libXIucGQgPSBwZDsKIAltci0mZ3Q7YWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzOwogCW1yLSZndDtwYWdlX3NoaWZ0ID0gb3JkZXJfYmFzZV8yKHBhZ2Vfc2l6ZSk7CiYjNDM7CW1yLSZndDtpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5ID0KJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHwKJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywKJiM0MzsJCQkgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTsKIAogCWlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfbWtleV9pbik7CiAJaWYgKHBvcHVsYXRlKQpAQCAtNzUzLDYgJiM0Mzs4MTIsMTIgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJCQlzdF9pbmRleCA9IG1kbWFoLSZndDtzdF9pbmRleDsKIAl9CiAKJiM0MzsJZXJyID0gbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWJfdW1lbV9yZWxlYXNlKHVtZW0pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJfQomIzQzOwogCXhsdF93aXRoX3VtciA9IG1seDVyX3Vtcl9jYW5fbG9hZF9wYXMoZGV2LCB1bWVtLSZndDtsZW5ndGgpOwogCWlmICh4bHRfd2l0aF91bXIpIHsKIAkJbXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncywKQEAgLTc2OSw2ICYjNDM7ODM0LDcgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJCW11dGV4X3VubG9jaygmYW1wO2Rldi0mZ3Q7c2xvd19wYXRoX211dGV4KTsKIAl9CiAJaWYgKElTX0VSUihtcikpIHsKJiM0MzsJCW1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTsKIAkJaWJfdW1lbV9yZWxlYXNlKHVtZW0pOwogCQlyZXR1cm4gRVJSX0NBU1QobXIpOwogCX0KQEAgLTkwMyw2ICYjNDM7OTY5LDYzIEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG1seDVfaWJfZG1hYnVmX2F0dGFjaF9vcHMgPSB7CiAJLmludmFsaWRhdGVfbWFwcGluZ3MgPSBtbHg1X2liX2RtYWJ1Zl9pbnZhbGlkYXRlX2NiLAogfTsKIAomIzQzO3N0YXRpYyB2b2lkIGdldF9wY2lfdHBoX21yX2RtYWJ1ZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKJiM0MzsJCQkJICBzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoICp0cGgsCiYjNDM7CQkJCSAgdTE2ICpzdF9pbmRleCwgdTggKnBoKQomIzQzO3sKJiM0MzsJdTE2IGxvY2FsX3N0X2luZGV4OwomIzQzOwl1MTYgc3RlZXJpbmdfdGFnOwomIzQzOwl1OCBsb2NhbF9waDsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi0mZ3Q7bWRldi0mZ3Q7cGRldikpIHsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9UUEhfT05MWToKJiM0MzsJCWV4dGVuZGVkID0gZmFsc2U7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOgomIzQzOwkJZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpIG11c3QgcnVuIHVuZGVyIGRtYWJ1Zi0mZ3Q7cmVzdiwgYnV0IGRyb3AgdGhlIGxvY2sKJiM0MzsJICogYmVmb3JlIG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKCk6IHRoYXQgYWxsb2NhdGVzIHdpdGggR0ZQX0tFUk5FTCwKJiM0MzsJICogd2hpY2ggbXVzdCBub3QgcnVuIHVuZGVyIGRtYWJ1Zi0mZ3Q7cmVzdiBzaW5jZSByZWNsYWltIGNhbiByZS1lbnRlciB0aGUKJiM0MzsJICogc2FtZSByZXNlcnZhdGlvbiBvYmplY3QgdGhyb3VnaCBhIGR5bmFtaWMgZXhwb3J0ZXImIzM5O3MgbW92ZV9ub3RpZnkgcGF0aC4KJiM0MzsJICovCiYjNDM7CWRtYV9yZXN2X2xvY2soZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJcmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCAmYW1wO3N0ZWVyaW5nX3RhZywgJmFtcDtsb2NhbF9waCk7CiYjNDM7CWRtYV9yZXN2X3VubG9jayhkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAocmV0ICE9IC1FT1BOT1RTVVBQKQomIzQzOwkJCW1seDVfaWJfZGJnKGRldiwgJiMzNDtnZXRfcGNpX3RwaCBmYWlsZWQgKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LSZndDttZGV2LCBzdGVlcmluZ190YWcsCiYjNDM7CQkJCQkgJmFtcDtsb2NhbF9zdF9pbmRleCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1seDVfaWJfZGJnKGRldiwgJiMzNDtzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpzdF9pbmRleCA9IGxvY2FsX3N0X2luZGV4OwomIzQzOwkqcGggPSBsb2NhbF9waDsKJiM0MzsJdHBoLSZndDtzdGVlcmluZ190YWcgPSBzdGVlcmluZ190YWc7CiYjNDM7CXRwaC0mZ3Q7cGggPSBsb2NhbF9waDsKJiM0MzsJdHBoLSZndDtleHRlbmRlZCA9IGV4dGVuZGVkOwomIzQzOwl0cGgtJmd0O3ZhbGlkID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpCiYjNDM7ewomIzQzOwltbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLAomIzQzOwkJCQkgIG1yLSZndDtpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGliX21yICoKIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLAogCQkgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLApAQCAtOTEzLDYgJiM0MzsxMDM2LDcgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsCiAJc3RydWN0IG1seDVfaWJfZGV2ICpkZXYgPSB0b19tZGV2KHBkLSZndDtkZXZpY2UpOwogCXN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7CiAJc3RydWN0IGliX3VtZW1fZG1hYnVmICp1bWVtX2RtYWJ1ZjsKJiM0MzsJc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCB0cGggPSB7fTsKIAl1MTYgc3RfaW5kZXggPSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVg7CiAJdTggcGggPSBNTFg1X0lCX05PX1BIOwogCWludCBlcnI7CkBAIC05NDUsMTggJiM0MzsxMDY5LDI5IEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLAogCQlwaCA9IGRtYWgtJmd0O3BoOwogCQlpZiAoZG1haC0mZ3Q7dmFsaWRfZmllbGRzICZhbXA7IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKQogCQkJc3RfaW5kZXggPSBtZG1haC0mZ3Q7c3RfaW5kZXg7CiYjNDM7CiYjNDM7CQllcnIgPSBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWliX3VtZW1fcmVsZWFzZSgmYW1wO3VtZW1fZG1hYnVmLSZndDt1bWVtKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJZ2V0X3BjaV90cGhfbXJfZG1hYnVmKGRldiwgdW1lbV9kbWFidWYtJmd0O2F0dGFjaC0mZ3Q7ZG1hYnVmLAomIzQzOwkJCQkgICAgICAmYW1wO3RwaCwgJmFtcDtzdF9pbmRleCwgJmFtcDtwaCk7CiAJfQogCiAJbXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsICZhbXA7dW1lbV9kbWFidWYtJmd0O3VtZW0sIHZpcnRfYWRkciwKIAkJCQlhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLAogCQkJCXN0X2luZGV4LCBwaCk7CiAJaWYgKElTX0VSUihtcikpIHsKJiM0MzsJCW1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTsKIAkJaWJfdW1lbV9yZWxlYXNlKCZhbXA7dW1lbV9kbWFidWYtJmd0O3VtZW0pOwogCQlyZXR1cm4gRVJSX0NBU1QobXIpOwogCX0KIAogCW1seDVfaWJfZGJnKGRldiwgJiMzNDtta2V5IDB4JXhcbiYjMzQ7LCBtci0mZ3Q7bW1rZXkua2V5KTsKIAomIzQzOwltci0mZ3Q7ZG1hYnVmX3RwaCA9IHRwaDsKIAlhdG9taWNfYWRkKGliX3VtZW1fbnVtX3BhZ2VzKG1yLSZndDt1bWVtKSwgJmFtcDtkZXYtJmd0O21kZXYtJmd0O3ByaXYucmVnX3BhZ2VzKTsKIAl1bWVtX2RtYWJ1Zi0mZ3Q7cHJpdmF0ZSA9IG1yOwogCWlmICghcGlubmVkX21vZGUpIHsKQEAgLTE0MDUsNiAmIzQzOzE1NDAsNyBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKQogCWlmIChtci0mZ3Q7aWJtci5mcm1yLnBvb2wpIHsKIAkJaWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkgewogCQkJaWJfZnJtcl9wb29sX3B1c2gobXItJmd0O2libXIuZGV2aWNlLCAmYW1wO21yLSZndDtpYm1yKTsKJiM0MzsJCQltbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKG1yKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTQzMiw2ICYjNDM7MTU2OCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpCiAJaWYgKG1yLSZndDtpYm1yLmZybXIucG9vbCAmYW1wOyZhbXA7ICFyZXQpCiAJCWliX2ZybXJfcG9vbF9kcm9wKCZhbXA7bXItJmd0O2libXIpOwogCiYjNDM7CWlmICghcmV0KQomIzQzOwkJbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihtcik7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYwppbmRleCAxYmFkZWM5YmY1MjcwLi43YzE3MzFhYTNkZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYwpAQCAtODU3LDYgJiM0Mzs4NTcsMTMgQEAgc3RhdGljIGludCBwYWdlZmF1bHRfZG1hYnVmX21yKHN0cnVjdCBtbHg1X2liX21yICptciwgc2l6ZV90IGJjbnQsCiAJCXJldHVybiBlcnI7CiAJfQogCiYjNDM7CWVyciA9IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChtciwgdW1lbV9kbWFidWYtJmd0O2F0dGFjaC0mZ3Q7ZG1hYnVmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWJfdW1lbV9kbWFidWZfdW5tYXBfcGFnZXModW1lbV9kbWFidWYpOwomIzQzOwkJZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLSZndDthdHRhY2gtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiAJcGFnZV9zaXplID0gbWx4NV91bWVtX2RtYWJ1Zl9maW5kX2Jlc3RfcGdzeih1bWVtX2RtYWJ1ZiwgYWNjZXNzX21vZGUpOwogCWlmICghcGFnZV9zaXplKSB7CiAJCWliX3VtZW1fZG1hYnVmX3VubWFwX3BhZ2VzKHVtZW1fZG1hYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYwppbmRleCA3Y2VkYzM0ODc5MGRiLi5jNjJiY2FlN2M1NDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jCkBAIC05MiwyMyAmIzQzOzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJa2ZyZWUoc3QpOwogfQogCi1pbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLAomIzQzOwkJCSAgICAgICB1MTYgKnN0X2luZGV4KQogewogCXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKIAlzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtJmd0O3N0OwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJdTMyIHhhX2lkOwotCXUxNiB0YWc7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoIXN0KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi0mZ3Q7cGRldiwgbWVtX3R5cGUsIGNwdV91aWQsICZhbXA7dGFnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKHN0LSZndDtkaXJlY3RfbW9kZSkgewogCQkqc3RfaW5kZXggPSB0YWc7CiAJCXJldHVybiAwOwpAQCAtMTUyLDggJiM0MzsxNDcsNDkgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJbXV0ZXhfdW5sb2NrKCZhbXA7c3QtJmd0O2xvY2spOwogCXJldHVybiByZXQ7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpOwomIzQzOwomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO3sKJiM0MzsJdTE2IHRhZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O3N0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi0mZ3Q7cGRldiwgbWVtX3R5cGUsIGNwdV91aWQsICZhbXA7dGFnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXgpOwogCiYjNDM7aW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKJiM0MzsJc3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LSZndDtzdDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghc3QpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChzdC0mZ3Q7ZGlyZWN0X21vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3N0LSZndDtsb2NrKTsKJiM0MzsJaWR4X2RhdGEgPSB4YV9sb2FkKCZhbXA7c3QtJmd0O2lkeF94YSwgc3RfaW5kZXgpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFpZHhfZGF0YSkpCiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwllbHNlCiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDtpZHhfZGF0YS0mZ3Q7dXNlY291bnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzdC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfZ2V0X2luZGV4KTsKJiM0MzsKIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KQogewogCXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3RwaC5jIGIvZHJpdmVycy9wY2kvdHBoLmMKaW5kZXggNjU1ZmZkNjBlNjJmNi4uZDAyMDJmZjdhMWIyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvdHBoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmMKQEAgLTIwMCw2ICYjNDM7MjAwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZSk7CiBzdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpycDsKJiM0MzsJdTggdHBoX2NvbXA7CiAJdTMyIHJlZzsKIAlpbnQgcmV0OwogCkBAIC0yMTEsOCAmIzQzOzIxMiw2MCBAQCBzdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWlmIChyZXQpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKTsKJiM0MzsJLyoKJiM0MzsJICogMGIxMCBpcyByZXNlcnZlZDsgdHJlYXQgaXQgYXMgJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gb25seSB0aGUKJiM0MzsJICogYXJjaGl0ZWN0ZWQgZW5jb2RpbmdzIHJlYWNoIHRoZSBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkLgomIzQzOwkgKi8KJiM0MzsJdHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7CiYjNDM7CWlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHwKJiM0MzsJICAgIHRwaF9jb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKQomIzQzOwkJcmV0dXJuIHRwaF9jb21wOwomIzQzOwlyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguCiYjNDM7ICovCiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfcmVxX3R5cGU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlICYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWQmIzM0OyBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlCiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvCiYjNDM7ICogJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZQomIzQzOyAqIGRlZmluZWQgdmFsdWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLAomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvcgomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILgomIzQzOyAqLwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdTggdHBoX2NvbXA7CiYjNDM7CXUzMiByZWc7CiYjNDM7CiYjNDM7CWlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsICZhbXA7cmVnKSkKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsKJiM0MzsJaWYgKFBDSV9QT1NTSUJMRV9FUlJPUihyZWcpKQomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwomIzQzOwomIzQzOwkvKiAwYjEwIGlzIHJlc2VydmVkOyBmb2xkIGl0IGludG8gJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgKHNlZSBhYm92ZSkuICovCiYjNDM7CXRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpOwomIzQzOwlpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8CiYjNDM7CSAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSCkKJiM0MzsJCXJldHVybiB0cGhfY29tcDsKJiM0MzsJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwogfQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfY29tcGxldGVyX3R5cGUpOwogCiAvKiBXcml0ZSB0YWcgdG8gU1QgdGFibGUgLSBSZXR1cm4gMCBpZiBPSywgb3RoZXJ3aXNlIC1lcnJubyAqLwogc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggM2YxMWE5NjI0YjljMC4uNGU1ZTM0YTc3Yjc2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTE2MjUsNiAmIzQzOzE2MjUsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwogCWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOgogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwomIzQzOwljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsCiYjNDM7CQkJCQkJCSBhcmdzeik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMKaW5kZXggYzE2ZjQ2MGMwMWQ2OC4uZjYzMDE1ODIwNGI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dmZpb19wY2lfcHJpdi5oJiMzNDsKQEAgLTE5LDcgJiM0MzsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7CiAJdTMyIG5yX3JhbmdlczsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Ci0JdTggcmV2b2tlZCA6IDE7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVwZGF0ZXMgcHJvdGVjdGVkIGJ5IGRtYWJ1Zi0mZ3Q7cmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5CiYjNDM7CSAqIHByb3RlY3RlZCBieSBtZW1vcnlfbG9jay4KJiM0MzsJICovCiYjNDM7CXUxNiB0cGhfc3RfZXh0OwomIzQzOwl1OCB0cGhfc3Q7CiYjNDM7CWJvb2wgcmV2b2tlZDsKJiM0MzsJdTggdHBoX3N0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF9zdF9leHRfdmFsaWQ6MTsKJiM0MzsJdTggdHBoX3BoOjI7CiB9OwogCiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCkBAIC0zMCw3ICYjNDM7NDEsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJaWYgKCFhdHRhY2htZW50LSZndDtwZWVyMnBlZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChwcml2LSZndDtyZXZva2VkKQomIzQzOwlpZiAoUkVBRF9PTkNFKHByaXYtJmd0O3Jldm9rZWQpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKQpAQCAtNjksNiAmIzQzOzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLAomIzQzOwkJCQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwomIzQzOwlkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQpIHsKJiM0MzsJCWlmICghcHJpdi0mZ3Q7dHBoX3N0X2V4dF92YWxpZCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkqc3RlZXJpbmdfdGFnID0gcHJpdi0mZ3Q7dHBoX3N0X2V4dDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghcHJpdi0mZ3Q7dHBoX3N0X3ZhbGlkKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCSpzdGVlcmluZ190YWcgPSBwcml2LSZndDt0cGhfc3Q7CiYjNDM7CX0KJiM0MzsJKnBoID0gcHJpdi0mZ3Q7dHBoX3BoOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAJCQkJICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsCiAJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQpAQCAtMTAxLDYgJiM0MzsxMzIsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0gewogCS5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCwKJiM0MzsJLmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCwKIAkubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCwKIAkudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsCiAJLnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsCkBAIC0zMzMsNiAmIzQzOzM2NSw4NiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQkgICAgICB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgICAgICBzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBzZXRfdHBoOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJdTggY29tcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDtwY2lfb3BzIHx8ICF2ZGV2LSZndDtwY2lfb3BzLSZndDtnZXRfZG1hYnVmX3BoeXMpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCQkgc2l6ZW9mKHNldF90cGgpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChzZXRfdHBoLmZsYWdzICZhbXA7IH4oVkZJT19ETUFfQlVGX1RQSF9TVCB8IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoc2V0X3RwaC5waCAmYW1wOyB+MHgzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICgoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgJmFtcDsmYW1wOwomIzQzOwkgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwlpZiAoZG1hYnVmLSZndDtvcHMgIT0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEByZXZva2VkIGFuZCB0aGUgZG1hLWJ1Zi92ZGV2IGFzc29jaWF0aW9uIGFyZSB0b3JuIGRvd24gdW5kZXIKJiM0MzsJICogbWVtb3J5X2xvY2sgYnkgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCk7IGhvbGQgaXQgd2hpbGUgdmFsaWRhdGluZwomIzQzOwkgKiBvd25lcnNoaXAgYW5kIHB1Ymxpc2hpbmcgc28gdGhlIGRtYS1idWYgY2Fubm90IGJlIGRpc2Fzc29jaWF0ZWQgZnJvbQomIzQzOwkgKiBAdmRldiB1bmRlcm5lYXRoIHVzLiBMb2NrIG9yZGVyIG1lbW9yeV9sb2NrIC0mZ3Q7IGRtYWJ1Zi0mZ3Q7cmVzdiBtYXRjaGVzCiYjNDM7CSAqIHZmaW9fcGNpX2RtYV9idWZfbW92ZSgpLgomIzQzOwkgKi8KJiM0MzsJZG93bl9yZWFkKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7dmRldiAhPSB2ZGV2KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfdW5sb2NrX21lbTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3VubG9ja19tZW07CiYjNDM7CiYjNDM7CXByaXYtJmd0O3RwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0OwomIzQzOwlwcml2LSZndDt0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUKTsKJiM0MzsJcHJpdi0mZ3Q7dHBoX3N0X2V4dF92YWxpZCA9CiYjNDM7CQkhIShzZXRfdHBoLmZsYWdzICZhbXA7IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTsKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CXJldCA9IDA7CiYjNDM7CiYjNDM7b3V0X3VubG9ja19tZW06CiYjNDM7CXVwX3JlYWQoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7b3V0X3B1dDoKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCkKIHsKIAlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKQEAgLTM0Nyw3ICYjNDM7NDU5LDcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpCiAJCWlmIChwcml2LSZndDtyZXZva2VkICE9IHJldm9rZWQpIHsKIAkJCWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKIAkJCWlmIChyZXZva2VkKQotCQkJCXByaXYtJmd0O3Jldm9rZWQgPSB0cnVlOwomIzQzOwkJCQlXUklURV9PTkNFKHByaXYtJmd0O3Jldm9rZWQsIHRydWUpOwogCQkJZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHByaXYtJmd0O2RtYWJ1Zik7CiAJCQlkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LAogCQkJCQkgICAgICBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCwgZmFsc2UsCkBAIC0zNjksNyAmIzQzOzQ4MSw3IEBAIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKQogCQkJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7CiAJCQl9IGVsc2UgewogCQkJCWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKLQkJCQlwcml2LSZndDtyZXZva2VkID0gZmFsc2U7CiYjNDM7CQkJCVdSSVRFX09OQ0UocHJpdi0mZ3Q7cmV2b2tlZCwgZmFsc2UpOwogCQkJCWRtYV9yZXN2X3VubG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YpOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCmluZGV4IGZjYTlkMGRmYWM5MGYuLjA2M2YzNzQ4NDc4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCkBAIC0xMTgsNiAmIzQzOzExOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKIAkJCQkgIHNpemVfdCBhcmdzeik7CiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBmbGFncywKJiM0MzsJCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBhcmdzeik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpOwogI2Vsc2UKQEAgLTEyOCw2ICYjNDM7MTMyLDE1IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogewogCXJldHVybiAtRU5PVFRZOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwkJCQkgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU5PVFRZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAppbmRleCBkMTIwM2RhNTZmYzVmLi4xNGU4ZWI2MWE2MmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaApAQCAtMTEzLDYgJiM0MzsxMTMsMjkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsKIAkgKi8KIAl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiAKJiM0MzsJLyoqCiYjNDM7CSAqIEBnZXRfcGNpX3RwaDoKJiM0MzsJICoKJiM0MzsJICogUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIHN0ZWVyaW5nIG1ldGFkYXRhIGZvcgomIzQzOwkgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb24KJiM0MzsJICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLgomIzQzOwkgKgomIzQzOwkgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGEKJiM0MzsJICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVAomIzQzOwkgKiBAc3RlZXJpbmdfdGFnOiBSZXR1cm5zIHRoZSByYXcgVFBIIHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZAomIzQzOwkgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2UKJiM0MzsJICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSkKJiM0MzsJICoKJiM0MzsJICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGgKJiM0MzsJICogJmFtcDtkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVPUE5PVFNVUFAgd2hlbgomIzQzOwkgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS4KJiM0MzsJICoKJiM0MzsJICogUmV0dXJuZWQgbWV0YWRhdGEgZm9sbG93cyB0aGUgbGlmZXRpbWUgcnVsZXMgZG9jdW1lbnRlZCBmb3IKJiM0MzsJICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJICAgdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7CiYjNDM7CiAJLyoqCiAJICogQG1hcF9kbWFfYnVmOgogCSAqCkBAIC01NjMsNiAmIzQzOzU4Niw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKIAkJICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwomIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7CiAKIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgKaW5kZXggYjE4NzFjMDgyMWQwYi4uZDI2ZTU3NDRjODQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaApAQCAtMTE4MiwxNiAmIzQzOzExODIsMzEgQEAgaW50IG1seDVfZG1fc3dfaWNtX2RlYWxsb2Moc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSBtbHg1X3N3X2ljbV90eXBlIHR5cGUKIAkJCSAgIHU2NCBsZW5ndGgsIHUxNiB1aWQsIHBoeXNfYWRkcl90IGFkZHIsIHUzMiBvYmpfaWQpOwogCiAjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7aW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsCiYjNDM7CQkJICAgICAgIHUxNiAqc3RfaW5kZXgpOwomIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpOwogaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJCQl1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7CiBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7CiAjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsCiYjNDM7CQkJCQkgICAgIHUxNiB0YWcsIHUxNiAqc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsCiAJCQkJICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCmluZGV4IGJlNjhjZDE3ZjJmODMuLjc3NDNhZjZmZTQzMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCkBAIC05LDYgJiM0Mzs5LDggQEAKICNpZm5kZWYgTElOVVhfUENJX1RQSF9ICiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaV9yZWdzLmgmZ3Q7CiYjNDM7CiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudAogICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGEKQEAgLTMwLDYgJiM0MzszMiw4IEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7CiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCXVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKQEAgLTQxLDYgJiM0Mzs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCmluZGV4IDVkZTYxOGEzYTVlZWUuLjRjMWM3MGFhYzE1MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaApAQCAtMTUzNCw2ICYjNDM7MTUzNCw0OSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHsKICAqLwogI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTIKIAomIzQzOy8qKgomIzQzOyAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhCiYjNDM7ICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieQomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnQKJiM0MzsgKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHMKJiM0MzsgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvCiYjNDM7ICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsCiYjNDM7ICogcmV0dXJucyAtRU9QTk9UU1VQUC4KJiM0MzsgKgomIzQzOyAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuCiYjNDM7ICoKJiM0MzsgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZQomIzQzOyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIEBmbGFncyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSB2YWxpZGl0eSBtYXNrIGZvciB0aGUKJiM0MzsgKiB0d28gbmFtZXNwYWNlczogVkZJT19ETUFfQlVGX1RQSF9TVCBtYXJrcyBAc3RlZXJpbmdfdGFnIHZhbGlkIGFuZAomIzQzOyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlcgomIzQzOyAqIHJlcXVlc3RzIG9uZSBuYW1lc3BhY2UgYW5kIHJlY2VpdmVzIHRoZSBtYXRjaGluZyB2YWx1ZS4KJiM0MzsgKgomIzQzOyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJiMzOTtzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXMKJiM0MzsgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZAomIzQzOyAqIHRvIGZ1dHVyZSBpbXBvcnRlcnM7IGFuIGltcG9ydGVyIHRoYXQgaGFzIGFscmVhZHkgcmV0cmlldmVkIGEgdmFsdWUKJiM0MzsgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvcgomIzQzOyAqIGZ1dHVyZSBpbXBvcnRlcnMuCiYjNDM7ICoKJiM0MzsgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS4KJiM0MzsgKgomIzQzOyAqIFVuZGVmaW5lZCBAZmxhZ3MgYW5kIEBwaCBiaXRzIG11c3QgYWx3YXlzIGJlIHplcm8uCiYjNDM7ICoKJiM0MzsgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuCiYjNDM7ICogaW1wb3J0ZXIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzCiYjNDM7CiYjNDM7I2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUCQkoMSAmbHQ7Jmx0OyAwKQomIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQJCSgxICZsdDsmbHQ7IDEpCiYjNDM7CiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggewomIzQzOwlfX3MzMglkbWFidWZfZmQ7CiYjNDM7CV9fdTMyCWZsYWdzOwomIzQzOwlfX3UxNglzdGVlcmluZ190YWdfZXh0OwomIzQzOwlfX3U4CXN0ZWVyaW5nX3RhZzsKJiM0MzsJX191OAlwaDsKJiM0Mzt9OwomIzQzOwogLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovCiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGNoYW5nZXMgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIGxpc3Qgb2YgbW9kaWZpZWQgZmlsZXMgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWU6IGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCwgdGhlIG1seDUgaW5maW5pYmFuZCBzdHVmZiwgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYW5kIHNldmVyYWwgVkZJTyBmaWxlcyAoYHZmaW9fcGNpX2NvcmUuY2AsIGB2ZmlvX3BjaV9kbWFidWYuY2AsIGV0Yy4pLCBwbHVzIHJlbGV2YW50IGhlYWRlcnMuIFRoYXQmIzM5O3MgYSBkZWNlbnQgc3ByZWFkLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGludHJvZHVjaW5nIGEgYGdldF9wY2lfdHBoYCBkbWEtYnVmIG9wZXJhdGlvbiB0byByZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgbWV0YWRhdGEuIEEgbmV3IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpcyBhZGRlZCB0byBzZXQgdGhpcyBtZXRhZGF0YSBvbiBhIFZGSU8gZXhwb3J0ZWQgZG1hLWJ1ZiwgYW5kIGl0IGxvb2tzIGxpa2UgbWx4NSBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMuCgpOb3csIHdhaXQgYSBzZWNvbmQuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gc29tZSBleGVtcHRpb25zLiAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IC0gdGhhdCYjMzk7cyB0aGUgY2xhdXNlIEkgbmVlZCB0byBjb25zaWRlci4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IG1seDUgZml0cyB0aGlzIGRlc2NyaXB0aW9uLCByaWdodD8gVGhhdCBjb3VsZCBiZSBhIHF1aWNrIG91dCwgYnV0IGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgpCdXQgd2FpdC4gVGhpcyBwYXRjaCBpcyBicm9hZGVyIHRoYW4gKmp1c3QqIG1seDUuIEl0IG1vZGlmaWVzIGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCwgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYCDigJMgYW5kIGNydWNpYWxseSwgVkZJTyBjYW4gYmUgcmVhY2hlZCBpbiBRRU1VLCByaWdodD8gV2UgaGF2ZSB2ZmlvLXBjaSB3aGljaCBjYW4gcHJlc2VudCByZWFsIGRldmljZXMsIGJ1dCBteSBtZW1vcnkgaXMsIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBzeXprYWxsZXIgaGFzIHNvbWUgVkZJTyBkZXNjcmlwdGlvbnMuIFRoaXMgaXMgdGhlIGFuZ2xlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSXMgVkZJTyBmdXp6YWJsZT8gVGhlIGFuc3dlciBzaG91bGQgYmUgeWVzLiBTeXprYWxsZXIgaGFzIGBzeXpfa3ZtX3NldHVwX2NwdWAgYW5kIFZGSU8gc3R1ZmYsIHdoaWNoIGlzIHByb21pc2luZy4KClRoZSBrZXkgcXVlc3Rpb24gbm93IGJlY29tZXMgaWYgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaXMgcmVhY2hhYmxlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgcGF0aC4gT2theSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIFdpdGggdGhlIFZGSU8gcGF0aCBvcGVuLCB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MTA9aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjgtXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjI5Olx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjMwLVx0XHRcdFx0XHRcdFx0IGFyZ3N6KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zNjctXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM2ODppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY5LVx0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTExOD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTIwLVx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTIxOmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTIyLVx0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTEzNj1zdGF0aWMgaW5saW5lIGludFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTM3OnZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEzOC1cdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1OTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXcgdmZpby1wY2kgUGF0Y2gqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIG5ldyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWFjaGFiaWxpdHkgb2YgYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIElzIHRoaXMgYSBuZXcgZW50cnkgcG9pbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBhbHJlYWR5IHdlbGwtdHJvZGRlbj8gS25vd2luZyB0aGUgYW5zd2VyIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUsIGFuZCB0aGVyZWZvcmUgYWxzbyBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgdGVzdGluZyByZWdpbWUgcmVxdWlyZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IG90aGVyIGVudHJ5IHBvaW50cyBpbnZva2UgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX21pZ3JuX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1ODgtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBoaXNpX2FjY192ZmlvX2lvY3RsX2dldF9yZWdpb24sXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE1ODk6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1OTAtXHQucmVhZCA9IGhpc2lfYWNjX3ZmaW9fcGNpX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MDktXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE2MTA6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MTEtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM9MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGlzbV9wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDItXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBpc21fdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM0MzpcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDQtXHQucmVhZCA9IGlzbV92ZmlvX3BjaV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9MTM4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBtbHg1dmZfcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzOTMtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jOjEzOTQ6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzOTUtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3MS1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IG52Z3JhY2VfZ3B1X2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwNzI6XHQuZGV2aWNlX2ZlYXR1cmVcdD0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3My1cdC5yZWFkXHRcdD0gbnZncmFjZV9ncHVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9jb3JlX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk2LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA5NzpcdC5kZXZpY2VfZmVhdHVyZVx0PSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk4LVx0LnJlYWRcdFx0PSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYz0xOTE9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgcGRzX3ZmaW9fb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTk4LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYzoxOTk6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTIwMC1cdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYz0xNDk9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNTYtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTU3Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1OC1cdC5yZWFkXHRcdD0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE1ODM9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MDktXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjEwOmludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MTEtXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYzNC19XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjM1OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjM2LVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9sbV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkxLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjkyOlx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkzLVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV90cmFuX2xtX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTEzLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmlydGlvdmZfcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxMTQ6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTE1LVx0LnJlYWQgPSB2aXJ0aW92Zl9wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzUtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTM2Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNy1cdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTUyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB4ZV92ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTI5LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM6NTMwOlx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTMxLVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTc0PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3NS1cdFx0dW5zaWduZWQgbG9uZyBhcmcpO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTc2OmludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3Ny1cdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgZnVuY3Rpb24gYW5kIHNlZWluZyB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IGludGVncmF0ZWQgYXMgdGhlIGAuZGV2aWNlX2ZlYXR1cmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHZmaW9fcGNpX29wc2Agc3RydWN0dXJlLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLCByZWFjaGFibGUgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGEgVkZJTyBkZXZpY2UgZmlsZSBkZXNjcmlwdG9yLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGNhbiB0aGlzIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBgc3l6X2t2bV9zZXR1cF9jcHVgLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwsIGJ1dCB0aGVyZSBpcyBhbHNvIGEgYHN5cy9saW51eC92ZmlvLnR4dGAgZmlsZSB0aGF0IGV4cGxpY2l0bHkgZGVzY3JpYmVzIFZGSU8gaW9jdGxzLiBJIHNob3VsZCBjaGVjayBpZiBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaXMgZXZlbiB0YXJnZXRlZCBieSBzeXprYWxsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VkZJT19ERVZJQ0VfRkVBVFVSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vY2R4L21haW4uYz04ND1zdGF0aWMgaW50IHZmaW9fY2R4X2JtX2N0cmwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05Ny1cbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjk4Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05OS1cdFx0XHRcdCBzaXplb2Yob3BzKSk7XG4tLVxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTA2LVx0c3dpdGNoIChvcHMub3ApIHtcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjEwNzpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9DTEVBUl9NQVNURVI6XG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMDgtXHRcdHJldHVybiBjZHhfY2xlYXJfbWFzdGVyKGNkeF9kZXYpO1xuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM6MTA5Olx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVF9NQVNURVI6XG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMTAtXHRcdHJldHVybiBjZHhfc2V0X21hc3RlcihjZHhfZGV2KTtcbi0tXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYz0xMTY9c3RhdGljIGludCB2ZmlvX2NkeF9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTE4LXtcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjExOTpcdHN3aXRjaCAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSykge1xuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM6MTIwOlx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0JVU19NQVNURVI6XG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMjEtXHRcdHJldHVybiB2ZmlvX2NkeF9ibV9jdHJsKGRldmljZSwgZmxhZ3MsIGFyZywgYXJnc3opO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9NDU5PXN0YXRpYyBsb25nIG1seDV2Zl9wcmVjb3B5X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtNTA5LVx0LypcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6NTEwOlx0ICogb3B0LWluIGZvciBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiBzZXJ2ZXNcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtNTExLVx0ICogYXMgb3B0LWluIGZvciBWRklPX1BSRUNPUFlfSU5GT19SRUlOSVQgYXMgd2VsbFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTM5ND1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfcG1fZW50cnkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMzk4LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Mzk5Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNDAwLVx0aWYgKHJldCAhPSAxKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTQxMj1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfcG1fZW50cnlfd2l0aF93YWtldXAoXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNDIwLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6NDIxOlx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00MjItXHRcdFx0XHQgc2l6ZW9mKGVudHJ5KSk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NDY5PXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9wbV9leGl0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTQ3My1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjQ3NDpcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTQ3NS1cdGlmIChyZXQgIT0gMSlcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTgzPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk1LVx0ICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNTk2Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk3LVx0XHRcdFx0IHNpemVvZih1dWlkKSk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTYxMD1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxNS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MTY6XHRzd2l0Y2ggKGZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX01BU0spIHtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MTc6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxOC1cdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfcG1fZW50cnkodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYxOTpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUllfV0lUSF9XQUtFVVA6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjIwLVx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9wbV9lbnRyeV93aXRoX3dha2V1cCh2ZGV2LCBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjEtXHRcdFx0XHRcdFx0XHQgIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyMjpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRVhJVDpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjMtXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX3BtX2V4aXQodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyNDpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU46XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjI1LVx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MjY6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjctXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjI4Olx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MjUzPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2Ni1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MjY3Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2OC1cdFx0XHRcdCBzaXplb2YoZ2V0X2RtYV9idWYpKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4NS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Mzg2Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4Ny1cdFx0XHRcdCBzaXplb2Yoc2V0X3RwaCkpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz05MDc9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdfZGV2aWNlX3N0YXRlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MjAtXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjkyMTpcdFx0XHRcdCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCB8XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6OTIyOlx0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTkyMy1cdFx0XHRcdCBzaXplb2YobWlnKSk7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTkyOS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzo5MzA6XHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUKSB7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtOTMxLVx0XHRlbnVtIHZmaW9fZGV2aWNlX21pZ19zdGF0ZSBjdXJyX3N0YXRlO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NDAtXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6OTQxOlx0LyogSGFuZGxlIHRoZSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCAqL1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk0Mi1cdGZpbHAgPSBkZXZpY2UtXHUwMDNlbWlnX29wcy1cdTAwM2VtaWdyYXRpb25fc2V0X3N0YXRlKGRldmljZSwgbWlnLmRldmljZV9zdGF0ZSk7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTk1Nz12ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbl9kYXRhX3NpemUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk2Ny1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzo5Njg6XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NjktXHRcdFx0XHQgc2l6ZW9mKGRhdGFfc2l6ZSkpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz05ODU9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdyYXRpb25fcHJlY29weV9pbmZvX3YyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05OTItXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6OTkzOlx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk5NC1cdGlmIChyZXQgIT0gMSlcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTAwMT1zdGF0aWMgaW50IHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMDEyLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEwMTM6XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMDE0LVx0XHRcdFx0IHNpemVvZihtaWcpKTtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTA4ND12ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RhcnQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTExMDMtXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjExMDQ6XHRcdFx0XHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTEwNS1cdFx0XHRcdCBzaXplb2YoY29udHJvbCkpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMTY4PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbG9nZ2luZ19zdG9wKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTc3LVx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMTc4Olx0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTc5LVx0aWYgKHJldCAhPSAxKVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMTk1PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbG9nZ2luZ19yZXBvcnQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyMTAtXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyMTE6XHRcdFx0XHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTIxMi1cdFx0XHRcdCBzaXplb2YocmVwb3J0KSk7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTEyMzk9c3RhdGljIGludCB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjUyLVx0aWYgKGZlYXR1cmUuZmxhZ3MgXHUwMDI2XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI1MzpcdCAgICB+KFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSyB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIHxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU0Olx0ICAgICAgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFKSlcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI1Ny1cdC8qIEdFVCBcdTAwMjYgU0VUIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgZXhjZXB0IHdpdGggUFJPQkUgKi9cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU4Olx0aWYgKCEoZmVhdHVyZS5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI1OTpcdCAgICAoZmVhdHVyZS5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjA6XHQgICAgKGZlYXR1cmUuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUKSlcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjYxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjYyLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjM6XHRzd2l0Y2ggKGZlYXR1cmUuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSykge1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjQ6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNjUtXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbihcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI2Ny1cdFx0XHRmZWF0dXJlLmFyZ3N6IC0gbWluc3opO1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjg6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX0RFVklDRV9TVEFURTpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjY5LVx0XHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdfZGV2aWNlX3N0YXRlKFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjcxLVx0XHRcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI3MjpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVEFSVDpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjczLVx0XHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3N0YXJ0KFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjc1LVx0XHRcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI3NjpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVE9QOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNzctXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RvcChcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI3OS1cdFx0XHRmZWF0dXJlLmFyZ3N6IC0gbWluc3opO1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODA6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfUkVQT1JUOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODEtXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfcmVwb3J0KFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjgzLVx0XHRcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI4NDpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREFUQV9TSVpFOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODUtXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbl9kYXRhX3NpemUoXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODctXHRcdFx0ZmVhdHVyZS5hcmdzeiAtIG1pbnN6KTtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjg4Olx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MjpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjg5LVx0XHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdyYXRpb25fcHJlY29weV9pbmZvX3YyKFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMzQ1PXN0YXRpYyBsb25nIHZmaW9fZGV2aWNlX2ZvcHNfdW5sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTM3Ny1cdHN3aXRjaCAoY21kKSB7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTM3ODpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRTpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMzc5LVx0XHRyZXQgPSB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlKGRldmljZSwgdXB0cik7XG4tLVxuaW5jbHVkZS9saW51eC92ZmlvLmg9Mzk9c3RydWN0IHZmaW9fZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0xMTMtICogICAgICAgICAgICAgdGhpcyBkZXZpY2UgaXMgYXR0YWNoZWQgdG8uXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoxMTQ6ICogQGRldmljZV9mZWF0dXJlOiBPcHRpb25hbCwgZmlsbCBpbiB0aGUgVkZJT19ERVZJQ0VfRkVBVFVSRSBpb2N0bFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMTE1LSAqL1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTIwMj1zdGF0aWMgaW5saW5lIGJvb2wgdmZpb19kZXZpY2VfY2Rldl9vcGVuZWQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjExLSAqICAgICAgICAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgbWlncmF0aW9uLiBJdCYjMzk7cyBtYW5kYXRvcnkgZm9yXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyMTI6ICogICAgICAgICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTiBtaWdyYXRpb24gc3VwcG9ydC5cbmluY2x1ZGUvbGludXgvdmZpby5oLTIxMy0gKiAgICAgICAgIFRoZSByZXR1cm5lZCBGRCBpcyB1c2VkIGZvciBkYXRhIHRyYW5zZmVyIGFjY29yZGluZyB0byB0aGUgRlNNXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjE4LSAqICAgICAgICAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgbWlncmF0aW9uLiBJdCYjMzk7cyBtYW5kYXRvcnkgZm9yXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyMTk6ICogICAgICAgICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTiBtaWdyYXRpb24gc3VwcG9ydC5cbmluY2x1ZGUvbGludXgvdmZpby5oLTIyMC0gKiBAbWlncmF0aW9uX2dldF9kYXRhX3NpemU6IE9wdGlvbmFsIGNhbGxiYWNrIHRvIGdldCB0aGUgZXN0aW1hdGVkIGRhdGFcbmluY2x1ZGUvbGludXgvdmZpby5oLTIyMS0gKiAgICAgICAgICBsZW5ndGggdGhhdCB3aWxsIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHN0b3AgY29weS4gSXQmIzM5O3MgbWFuZGF0b3J5IGZvclxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjIyOiAqICAgICAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIG1pZ3JhdGlvbiBzdXBwb3J0LlxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjIzLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTI0OT1zdHJ1Y3QgdmZpb19sb2dfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNTgtLyoqXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNTk6ICogdmZpb19jaGVja19mZWF0dXJlIC0gVmFsaWRhdGUgdXNlciBpbnB1dCBmb3IgdGhlIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGxcbmluY2x1ZGUvbGludXgvdmZpby5oLTI2MC0gKiBAZmxhZ3M6IEFyZyBmcm9tIHRoZSBkZXZpY2VfZmVhdHVyZSBvcFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYxLSAqIEBhcmdzejogQXJnIGZyb20gdGhlIGRldmljZV9mZWF0dXJlIG9wXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNjI6ICogQHN1cHBvcnRlZF9vcHM6IENvbWJpbmF0aW9uIG9mIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIGFuZCBTRVQgdGhlIGRyaXZlclxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYzLSAqICAgICAgICAgICAgICAgICBzdXBwb3J0c1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oLTI2Ni0gKiBGb3IgdXNlIGluIGEgZHJpdmVyJiMzOTtzIGRldmljZV9mZWF0dXJlIG9wLiBDaGVja3MgdGhhdCB0aGUgaW5wdXRzIHRvIHRoZVxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjY3OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgYXJlIGNvcnJlY3QgZm9yIHRoZSBkcml2ZXImIzM5O3MgZmVhdHVyZS4gUmV0dXJucyAxIGlmXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNjgtICogdGhlIGRyaXZlciBzaG91bGQgZXhlY3V0ZSB0aGUgZ2V0IG9yIHNldCwgb3RoZXJ3aXNlIHRoZSByZWxldmFudFxuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTI3MT1zdGF0aWMgaW5saW5lIGludCB2ZmlvX2NoZWNrX2ZlYXR1cmUodTMyIGZsYWdzLCBzaXplX3QgYXJnc3osIHUzMiBzdXBwb3J0ZWRfb3BzLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oLTI3My17XG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNzQ6XHRpZiAoKGZsYWdzIFx1MDAyNiAoVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCkpIFx1MDAyNlxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjc1LVx0ICAgIH5zdXBwb3J0ZWRfb3BzKVxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjc2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmluY2x1ZGUvbGludXgvdmZpby5oOjI3NzpcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSlcbmluY2x1ZGUvbGludXgvdmZpby5oLTI3OC1cdFx0cmV0dXJuIDA7XG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNzktXHQvKiBXaXRob3V0IFBST0JFIG9uZSBvZiBHRVQgb3IgU0VUIG11c3QgYmUgcmVxdWVzdGVkICovXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyODA6XHRpZiAoIShmbGFncyBcdTAwMjYgKFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpKSlcbmluY2x1ZGUvbGludXgvdmZpby5oLTI4MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lvbW11ZmQuaD0yMTE9c3RydWN0IGlvbW11X2lvYXNfbWFwIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oLTIzNC0gKiBkbWEtYnVmIGltcG9ydCBwYXRoOyBjdXJyZW50bHkgc3VwcG9ydGVkIGRtYS1idWZzIGluY2x1ZGUgc2luZ2xlLXJhbmdlXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oOjIzNTogKiBWRklPIFBDSSBkbWEtYnVmcyBleHBvcnRlZCB0aHJvdWdoIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgYW5kXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oLTIzNi0gKiBvdGhlciBkbWEtYnVmcyBtYXkgYmUgcmVqZWN0ZWQuIEFsbCBvdGhlciBhcmd1bWVudHMgYW5kIHNlbWFudGljcyBtYXRjaFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9ODYxPXN0cnVjdCB2ZmlvX2RldmljZV9pb2V2ZW50ZmQge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODc3LS8qKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4Nzg6ICogVkZJT19ERVZJQ0VfRkVBVFVSRSAtIF9JT1dSKFZGSU9fVFlQRSwgVkZJT19CQVNFICYjNDM7IDE3LFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NzktICpcdFx0XHQgICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmUpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD04OTM9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODk1LVx0X191MzJcdGZsYWdzO1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4OTY6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01BU0tcdCgweGZmZmYpIC8qIDE2LWJpdCBmZWF0dXJlIGluZGV4ICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjg5NzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUXHRcdCgxIFx1MDAzY1x1MDAzYyAxNikgLyogR2V0IGZlYXR1cmUgaW50byBkYXRhW10gKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODk4OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVRcdFx0KDEgXHUwMDNjXHUwMDNjIDE3KSAvKiBTZXQgZmVhdHVyZSBmcm9tIGRhdGFbXSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4OTk6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFXHQoMSBcdTAwM2NcdTAwM2MgMTgpIC8qIFByb2JlIGZlYXR1cmUgc3VwcG9ydCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDAtXHRfX3U4XHRkYXRhW107XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDItXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjkwMzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVcdFx0X0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICYjNDM7IDE3KVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDQtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MTMtICogQHRva2VuX3V1aWRfcHRyOiBWYWxpZCBpZiBWRklPX0RFVklDRV9CSU5EX0ZMQUdfVE9LRU4uIFBvaW50cyB0byBhIDE2IGJ5dGVcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6OTE0OiAqICAgICAgICAgICAgICAgICAgVVVJRCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU4uXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTkxNS0gKlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtOTI1LSAqIGlnbm9yZWQuIFRoZSBvbmx5IGNhc2UgdG9kYXkgaXMgYSBQRi9WRiByZWxhdGlvbnNoaXAgd2hlcmUgdGhlIFZGIGJpbmQgbXVzdFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo5MjY6ICogYmUgcHJvdmlkZWQgdGhlIHNhbWUgdG9rZW4gYXMgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU4gcHJvdmlkZWQgdG9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtOTI3LSAqIHRoZSBQRi5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTk5Nj1zdHJ1Y3QgdmZpb19kZXZpY2VfZGV0YWNoX2lvbW11ZmRfcHQge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMS0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTAxMjojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOXHQoMClcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMy1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwMTUtICogSW5kaWNhdGVzIHRoZSBkZXZpY2UgY2FuIHN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBBUEkgdGhyb3VnaFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDE2OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX0RFVklDRV9TVEFURS4gSWYgdGhpcyBHRVQgc3VjY2VlZHMsIHRoZSBSVU5OSU5HIGFuZFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDE3LSAqIEVSUk9SIHN0YXRlcyBhcmUgYWx3YXlzIHN1cHBvcnRlZC4gU3VwcG9ydCBmb3IgYWRkaXRpb25hbCBzdGF0ZXMgaXNcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEwMzY9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNDEtfTtcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTA0MjojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIDFcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA0My1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA0NC0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDQ1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGV4ZWN1dGUgYSBtaWdyYXRpb24gc3RhdGUgY2hhbmdlIG9uIHRoZSBWRklPXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNDYtICogZGV2aWNlLiBUaGUgbmV3IHN0YXRlIGlzIHN1cHBsaWVkIGluIGRldmljZV9zdGF0ZSwgc2VlIGVudW1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNjgtICpcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTA2OTogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULCBnZXQgdGhlIGN1cnJlbnQgbWlncmF0aW9uIHN0YXRlIG9mIHRoZSBWRklPXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNzAtICogZGV2aWNlLCBkYXRhX2ZkIHdpbGwgYmUgLTEuXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xMDcyPXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX21pZ19zdGF0ZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDc1LX07XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEwNzY6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19ERVZJQ0VfU1RBVEUgMlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDc3LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTE5Mi0gKiAgIHN1cHBvcnQgd2lsbCBiZSBkaXNjb3ZlcmFibGUgYnkgYSBuZXcgZmxhZyBpblxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMTkzOiAqICAgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdSQVRJT04uXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTExOTQtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEyMzEtICogc3VwcG9ydCB0aGVtLiBUaGUgdXNlciBjYW4gZGlzY292ZXIgaWYgdGhlc2Ugc3RhdGVzIGFyZSBzdXBwb3J0ZWQgYnkgdXNpbmdcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTIzMjogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTi4gQnkgdXNpbmcgY29tYmluYXRpb24gdHJhbnNpdGlvbnMgdGhlIHVzZXIgY2FuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEyMzMtICogYXZvaWQga25vd2luZyBhYm91dCB0aGVzZSBvcHRpb25hbCBzdGF0ZXMgaWYgdGhlIGtlcm5lbCBkcml2ZXIgc3VwcG9ydHMgdGhlbS5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEyMzg9ZW51bSB2ZmlvX2RldmljZV9taWdfc3RhdGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTI3OC0gKiBWRklPX1BSRUNPUFlfSU5GT19SRUlOSVQgY2FuIGJlIHJlcG9ydGVkIG9ubHkgYWZ0ZXIgdXNlcnNwYWNlIG9wdHMgaW4gdG9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTI3OTogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92Mi4gV2l0aG91dCB0aGlzIG9wdC1pbiwgdGhlIGZsYWdzIGZpZWxkXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEyODAtICogb2Ygc3RydWN0IHZmaW9fcHJlY29weV9pbmZvIGlzIHJlc2VydmVkIGZvciBidWctY29tcGF0aWJpbGl0eSByZWFzb25zLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTMxND1zdHJ1Y3QgdmZpb19wcmVjb3B5X2luZm8ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTMyNC0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzI1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGFsbG93IHRoZSBkZXZpY2UgdG8gYmUgbW92ZWQgaW50byBhIGxvdyBwb3dlclxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzI2LSAqIHN0YXRlIHdpdGggdGhlIHBsYXRmb3JtLWJhc2VkIHBvd2VyIG1hbmFnZW1lbnQuICBEZXZpY2UgdXNlIG9mIGxvd2VyIHBvd2VyXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzM2LSAqIHdpdGggd2FrZS11cCBub3RpZmljYXRpb24sIHNlZVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzM3OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZX1dJVEhfV0FLRVVQIGJlbG93LiAgQWNjZXNzIHRvIG1tYXAmIzM5O2RcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTMzOC0gKiBkZXZpY2UgcmVnaW9ucyBpcyBkaXNhYmxlZCBvbiBMT1dfUE9XRVJfRU5UUlkgYW5kIG1heSBvbmx5IGJlIHJlc3VtZWQgYWZ0ZXJcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNDAtICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNDE6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSAzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNDItXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzQ0LSAqIFRoaXMgZGV2aWNlIGZlYXR1cmUgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNDU6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUlkgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIHVzZXJcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0Ni0gKiBwcm92aWRlcyBhbiBldmVudGZkIGZvciB3YWtlLXVwIG5vdGlmaWNhdGlvbi4gIFdoZW4gdGhlIGRldmljZSBtb3ZlcyBvdXQgb2Zcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEzNjQ9c3RydWN0IHZmaW9fZGV2aWNlX2xvd19wb3dlcl9lbnRyeV93aXRoX3dha2V1cCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzY4LVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzY5OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUllfV0lUSF9XQUtFVVAgNFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzcwLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzcxLS8qXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzI6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgZGlzYWxsb3cgdXNlIG9mIGRldmljZSBsb3cgcG93ZXIgc3RhdGVzIGFzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzM6ICogcHJldmlvdXNseSBlbmFibGVkIHZpYSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSBvclxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzc0OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZX1dJVEhfV0FLRVVQIGRldmljZSBmZWF0dXJlcy5cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3NS0gKiBUaGlzIGRldmljZSBmZWF0dXJlIElPQ1RMIG1heSBpdHNlbGYgZ2VuZXJhdGUgYSB3YWtldXAgZXZlbnRmZCBub3RpZmljYXRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNzctICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzg6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FWElUIDVcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3OS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4MC0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzgxOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgc3RhcnQvc3RvcCBkZXZpY2UgRE1BIGxvZ2dpbmcuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODI6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgdGhlIGRldmljZSBzdXBwb3J0c1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzgzLSAqIERNQSBsb2dnaW5nLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4OC0gKiBkdXJpbmcgdGhlIHByZSBjb3B5IHBoYXNlIG9mIGxpdmUgbWlncmF0aW9uLiBPbmx5IERNQSBXUklURXMgYXJlIGxvZ2dlZCxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM4OTogKiBhbmQgdGhpcyBBUEkgaXMgbm90IGNvbm5lY3RlZCB0byBWRklPX0RFVklDRV9GRUFUVVJFX01JR19ERVZJQ0VfU1RBVEUuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzOTAtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTE0MTg9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2xvZ2dpbmdfcmFuZ2Uge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQyMi1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQyMzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfU1RBUlQgNlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI0LVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI1LS8qXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0MjY6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBzdG9wIGRldmljZSBETUEgbG9nZ2luZyB0aGF0IHdhcyBzdGFydGVkXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0Mjc6ICogYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVEFSVFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI4LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDI5OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVE9QIDdcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMC1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMS0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDMyOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgcmVhZCBiYWNrIGFuZCBjbGVhciB0aGUgZGV2aWNlIERNQSBsb2dcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMy0gKlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ0Mi0gKiBUaGUgaW5wdXQgcGFnZV9zaXplIGNhbiBiZSBhbnkgcG93ZXIgb2YgdHdvIHZhbHVlIGFuZCBkb2VzIG5vdCBoYXZlIHRvXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0NDM6ICogbWF0Y2ggdGhlIHZhbHVlIGdpdmVuIHRvIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfU1RBUlQuIFRoZSBkcml2ZXJcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ0NC0gKiB3aWxsIGZvcm1hdCBpdHMgaW50ZXJuYWwgbG9nZ2luZyB0byBtYXRjaCB0aGUgcmVwb3J0aW5nIHBhZ2Ugc2l6ZSwgcG9zc2libHlcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTE0NTc9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2xvZ2dpbmdfcmVwb3J0IHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjMtXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0NjQ6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1JFUE9SVCA4XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjUtXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjYtLypcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ2NzogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHJlYWQgYmFjayB0aGUgZXN0aW1hdGVkIGRhdGEgbGVuZ3RoIHRoYXQgd2lsbFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDY4LSAqIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHN0b3AgY29weS5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTE0NzM9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfbWlnX2RhdGFfc2l6ZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDc2LVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDc3OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREFUQV9TSVpFIDlcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3OC1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3OS0vKipcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ4MDogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCBzZXQgb3IgY2xlYXIgdGhlIEJVUyBtYXN0ZXJpbmcgZm9yIHRoZSBkZXZpY2VcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ4MS0gKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHNwZWNpZmllZCBpbiBvcCBmbGFnLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTQ5Mz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9idXNfbWFzdGVyIHtcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5NC1cdF9fdTMyIG9wO1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDk1OiNkZWZpbmVcdFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9DTEVBUl9NQVNURVJcdDBcdC8qIENsZWFyIEJ1cyBNYXN0ZXIgKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ5NjojZGVmaW5lXHRcdFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUX01BU1RFUlx0XHQxXHQvKiBTZXQgQnVzIE1hc3RlciAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDk3LX07XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0OTg6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0JVU19NQVNURVIgMTBcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5OS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUwMC0vKipcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTUwMTogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIGNyZWF0ZSBhIGRtYV9idWYgZmQgZm9yIHRoZVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTAyLSAqIHJlZ2lvbnMgc2VsZWN0ZWQuXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTExLSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTEyOiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIDExXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MTMtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNTE5PXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUyOS0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTMwOiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyLlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTMxLSAqXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTM0LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTM1OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MzYtXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MzctLyoqXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1Mzg6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUzOS0gKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1NDA6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTQxLSAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0NS0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTQ2OiAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NDctICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NjYtICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1Njc6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NjgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmM9MTE4PXN0YXRpYyBpbnQgdmZpb19kZXZpY2VfZmVhdHVyZV9pb2N0bChpbnQgZmQsIHUzMiBmbGFncywgdm9pZCAqZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYy0xMjgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYzoxMjk6XHRyZXR1cm4gaW9jdGwoZmQsIFZGSU9fREVWSUNFX0ZFQVRVUkUsIGZlYXR1cmUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMtMTMwLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xMzI9c3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmVhdHVyZV9zZXQoaW50IGZkLCB1MTYgZmVhdHVyZSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTEzMy17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYzoxMzQ6XHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCB8IGZlYXR1cmU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYy0xMzUtXHRpbnQgcmV0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jPTE0MT12b2lkIHZmaW9fZGV2aWNlX3NldF92Zl90b2tlbihpbnQgZmQsIGNvbnN0IGNoYXIgKnZmX3Rva2VuKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jOjE0ODpcdHZmaW9fZGV2aWNlX2ZlYXR1cmVfc2V0KGZkLCBWRklPX0RFVklDRV9GRUFUVVJFX1BDSV9WRl9UT0tFTixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0OS1cdFx0XHRcdHRva2VuX3V1aWQsIHNpemVvZih1dWlkX3QpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk3NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgVkZJTyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgLCBhIG5ldyBmZWF0dXJlIGZvciB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLiBJdCBhbHNvIGNoYW5nZXMgdGhlIE1lbGxhbm94IENvbm5lY3RYIGRyaXZlciwgYGRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L2AsIHRvIHVzZSB0aGlzIGRtYS1idWYgVFBIIG1ldGFkYXRhLiBUaGUga2V5IHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgZnV6emluZy4KClRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7bSB3b3JraW5nIGZyb20gc2F5IHRvIHNraXAgaXQgaWYgaXQmIzM5O3Mgb25seSBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCAqcGh5c2ljYWwqIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIHRoZSBjcnV4LiBOb3csIG1seDUgaXMgYSBNZWxsYW5veCBDb25uZWN0WCBkcml2ZXIsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLiBJIGhhdmUgYSBsaXN0IGhlcmU6IGBody9uZXQvcm9ja2VyLmNgLCBgaHcvbmV0L2UxMDAwLmNgLCBgaHcvbmV0L3ZpcnRpby1uZXQuY2AsIGBody9uZXQvdm14bmV0My5jYC4uLiBidXQgbm8gbWx4NS4KCkhvd2V2ZXIsIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBqdXN0IHRvdWNoIG1seDUuIEl0IGFsc28gbW9kaWZpZXMgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNgLiAqVGhhdCogY2hhbmdlcyB0aGluZ3MuIElzIFZGSU8gUENJIGVtdWxhdGVkPyBZZXMsIFFFTVUgaGFzIGB2ZmlvLXBjaWAuIEJ1dCBgdmZpby1wY2lgIGlzICp1c3VhbGx5KiB1c2VkIHRvIHBhc3MgdGhyb3VnaCBwaHlzaWNhbCBkZXZpY2VzLCBub3QgZW11bGF0ZWQgb25lcy4gU28sIHRoZSBxdWVzdGlvbiByZW1haW5zOiBDYW4gd2UgdGVzdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCB3aXRob3V0IG5lZWRpbmcgYSBwaHlzaWNhbCBkZXZpY2U/CgpMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGA6CgpgYGBjCglpZiAoIXZkZXYtJmd0O3BjaV9vcHMgfHwgIXZkZXYtJmd0O3BjaV9vcHMtJmd0O2dldF9kbWFidWZfcGh5cykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJY29tcCA9IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpOwoJaWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpCgkJcmV0dXJuIC1FT1BOT1RTVVBQOwpgYGAKClJpZ2h0LCBpdCByZXF1aXJlcyBgdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzYC4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcG9pbnQuIFdobyBzZXRzIGBnZXRfZG1hYnVmX3BoeXNgPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZnV6emFibGUgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2RtYWJ1Zl9waHlzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTk5Nj1udmdyYWNlX2dwdV93cml0ZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDE5LVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTAyMDpzdGF0aWMgaW50IG52Z3JhY2VfZ2V0X2RtYWJ1Zl9waHlzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqY29yZV92ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTAyMS1cdFx0XHRcdCAgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDU1LVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA1NjpcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyhjb3JlX3ZkZXYsIHByb3ZpZGVyLCByZWdpb25faW5kZXgsXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDU3LVx0XHRcdFx0XHQgICAgIHBoeXNfdmVjLCBkbWFfcmFuZ2VzLCBucl9yYW5nZXMpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9kZXZfb3BzID0ge1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA2MTpcdC5nZXRfZG1hYnVmX3BoeXMgPSBudmdyYWNlX2dldF9kbWFidWZfcGh5cyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNjItfTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfZGV2X2NvcmVfb3BzID0ge1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA4NjpcdC5nZXRfZG1hYnVmX3BoeXMgPSB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwODctfTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MTcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlX29wcyB2ZmlvX3BjaV9kZXZfb3BzID0ge1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjE3MzpcdC5nZXRfZG1hYnVmX3BoeXMgPSB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNzQtfTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTIwMj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2ZpbGxfcGh5c192ZWMpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yMDMtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjIwNDppbnQgdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yMDUtXHRcdFx0XHQgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTIyMS19XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjIyMjpFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTIyMy1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjMtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjI2NDpcdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjUtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTMwOC1cdHByaXYtXHUwMDNlc2l6ZSA9IGxlbmd0aDtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MzA5Olx0cmV0ID0gdmRldi1cdTAwM2VwY2lfb3BzLVx1MDAzZWdldF9kbWFidWZfcGh5cyh2ZGV2LCBcdTAwMjZwcml2LVx1MDAzZXByb3ZpZGVyLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zMTAtXHRcdFx0XHRcdCAgICAgZ2V0X2RtYV9idWYucmVnaW9uX2luZGV4LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MzY4PWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzc4LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNzk6XHRpZiAoIXZkZXYtXHUwMDNlcGNpX29wcyB8fCAhdmRldi1cdTAwM2VwY2lfb3BzLVx1MDAzZWdldF9kbWFidWZfcGh5cylcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzgwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9NjA9c3RydWN0IHZmaW9fcGNpX2RldmljZV9vcHMge1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6NjE6XHRpbnQgKCpnZXRfZG1hYnVmX3BoeXMpKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTYyLVx0XHRcdCAgICAgICBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICoqcHJvdmlkZXIsXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9NzA9aW50IHZmaW9fcGNpX2NvcmVfZmlsbF9waHlzX3ZlYyhzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTczLVx0XHRcdFx0cGh5c19hZGRyX3QgbGVuKTtcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjc0OmludCB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC03NS1cdFx0XHRcdCAgc3RydWN0IHAycGRtYV9wcm92aWRlciAqKnByb3ZpZGVyLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTgyPXZmaW9fcGNpX2NvcmVfZmlsbF9waHlzX3ZlYyhzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTg4LX1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjg5OnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZ2V0X2RtYWJ1Zl9waHlzKFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtOTAtXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4NjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkZJTyBhbmQgRE1BLUJVRiBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdmZpb19wY2lfZGV2X29wc2AgYW5kIHNlZSB0aGF0IGBnZXRfZG1hYnVmX3BoeXNgIGlzIHNldCB0byBgdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXNgIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNgLiBSaWdodCwgc28gc3RhbmRhcmQgYHZmaW8tcGNpYCBzaG91bGQsIGluIHRoZW9yeSwgc3VwcG9ydCBETUEtQlVGIGludGVncmF0aW9uLiBCdXQgaG9sZCBvbiwgdGhlcmUmIzM5O3MgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYDogaXQgY2FsbHMgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYC4gVGhpcywgaW4gdHVybiwgY2hlY2tzIGlmIHRoZSBUUEggY29tcGxldGVyIHR5cGUgaXMgc3VwcG9ydGVkOyBpZiBub3QsIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCYjMzk7cyB0aGUgc25hZy4KCk5vdywgbXkgbWFpbiBxdWVzdGlvbiBpczogZG9lcyBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50LCBhY3R1YWxseSAqZW11bGF0ZSogYSBQQ0kgZGV2aWNlIHdpdGggVFBIIGNvbXBsZXRlciBzdXBwb3J0PyBJdCYjMzk7cyBhIFBDSWUgZmVhdHVyZSwgc28gaWYgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0IHByb3Blcmx5LCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIHdpbGwgcmV0dXJuIHRoYXQgZHJlYWRlZCBgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgUUVNVSBoYW5kbGVzIHRoaXMuIEkga25vdyB0aGF0IGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWAgaXMgcmVhZGluZyBmcm9tIHRoZSBgUENJX0VYUF9ERVZDQVAyYCByZWdpc3Rlci4gU28sIGNhbiBhIHZpcnR1YWwgUENJIGRldmljZSBpbnNpZGUgUUVNVSBldmVuICpoYXZlKiBUUEggY29tcGxldGVyIHN1cHBvcnQ/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24uCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIHRlc3RzIGFyZSBydW4uIENvdWxkIGBzeXprYWxsZXJgIGluamVjdCBQQ0kgZGV2aWNlcyB3aXRoIFRQSCB0byB0ZXN0PyBJIGtub3cgdGhhdCBgc3l6a2FsbGVyYCBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlIGluamVjdG9yIHRoYXQgSSYjMzk7bSBhd2FyZSBvZiwgYW5kIGl0IHVzZXMgUUVNVSB0byB0ZXN0LiBCdXQgd2hhdCBhYm91dCB2aXJ0dWFsIEhDSSBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGBzeXprYWxsZXJgIHJ1bnMgb24gUUVNVSwgc28gdGhlIHZpcnR1YWwgUENJIGRldmljZXMgd291bGQgZGVwZW5kIG9uIFFFTVUuIEJ1dCB0aGVuIGl0IHN0cnVjayBtZSwgYW5kIEkgcmVhbGlzZWQgdGhhdCBWRklPIGRldmljZXMgYXJlIHVzdWFsbHkgcGh5c2ljYWwgZGV2aWNlcyBwYXNzZWQgdGhyb3VnaC4KCkZpbmFsbHksIGRvZXMgYHN5emthbGxlcmAgdXNlIG1vY2sgVkZJTyBkZXZpY2VzPyBJIGtub3cgaXQgZG9lcyBzb21ldGltZXMsIGFuZCBtYXliZSBpdCBkb2VzIGhlcmUuIFNvLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBtb2NrIFZGSU8gZGV2aWNlcyBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRob3NlIG1vY2sgVkZJTyBkZXZpY2VzIGhhdmUgVFBIIGNhcGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTY2OD1zdGF0aWMgaW50IGhpc2lfYWNjX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjkwLVx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZoaXNpX2FjY192ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTY5MTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNmhpc2lfYWNjX3ZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjkyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM9MzU1PXN0YXRpYyBpbnQgaXNtX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNjctXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM6MzY4Olx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2aXZwY2QtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jLTM2OS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYz0xNDA3PXN0YXRpYyBpbnQgbWx4NXZmX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTE0MTgtXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNm12ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6MTQxOTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNm12ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTQyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTMxOT1zdGF0aWMgaW50IG52Z3JhY2VfZ3B1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEzNjAtXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMzYxOlx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2bnZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTM2Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jPTExMD1zdGF0aWMgaW50IHBkc192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy9wY2lfZHJ2LmMtMTIyLVxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jOjEyMzpcdGVyciA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBkc192ZmlvLVx1MDAzZXZmaW9fY29yZWRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy9wY2lfZHJ2LmMtMTI0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmM9NjQ0PXFhdF92Zl92ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYy02NTQtXHRwY2lfc2V0X2RydmRhdGEocGRldiwgXHUwMDI2cWF0X3ZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jOjY1NTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnFhdF92ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYy02NTYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYz0xNzY9c3RhdGljIGludCB2ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xOTAtXHR2ZGV2LVx1MDAzZXBjaV9vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9kZXZfb3BzO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjE5MTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE5Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjIxNz1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX3JlbGVhc2VfZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIyMTgtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMjE5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMjIwLXtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzE4LX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzMTk6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjMyMC1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9MTQ5PXN0YXRpYyBpbnQgdmlydGlvdmZfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xNzctXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNnZpcnR2ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxNzg6XHRyZXQgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcdTAwMjZ2aXJ0dmRldi1cdTAwM2Vjb3JlX2RldmljZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTc5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYz01NDM9c3RhdGljIGludCB4ZV92ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jLTU1NC1cbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjU1NTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnhlX3ZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTU2LVx0aWYgKHJldCkge1xuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTE2OD12b2lkIHZmaW9fcGNpX2NvcmVfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTY5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTcwLXZvaWQgdmZpb19wY2lfY29yZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYyNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgdmZpby1wY2lgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBETUEgYnVmZmVycywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHRhcmdldCBzeXN0ZW0sIGxpa2VseSBRRU1VIHJ1bm5pbmcgU3l6a2FsbGVyLCBjYW4gZXZlbiByZWFjaCB0aGUga2V5IGNvZGUuCgpJbml0aWFsbHksIEkgc2VlIGB2ZmlvLXBjaWAgYmVpbmcgYm91bmQgdG8gUENJIGRldmljZXMuIFN5emthbGxlciYjMzk7cyBRRU1VIHNldHVwIHNob3VsZCBhbGxvdyB0aGlzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2gsIGFzIFN5emthbGxlciYjMzk7cyBRRU1VIHR5cGljYWxseSBkZWFscyB3aXRoIHZpcnR1YWwgZGV2aWNlcy4gQ2FuIFN5emthbGxlciBiaW5kIGEgZGV2aWNlIHRvIGB2ZmlvLXBjaWAgYW5kIGludGVyYWN0IHdpdGggaXQ/IEkgc3VzcGVjdCBpdCBjYW4gdmlhIHN5c2ZzIHdyaXRlcywgYnV0IGl0IGlzIGltcG9ydGFudCB0byBjb25maXJtLgoKVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvYC4gQnV0LCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLCBhbnl0aGluZyB0aGF0IGRlYWxzIHdpdGggdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgbGlrZSBNZWxsYW5veCBDb25uZWN0WCBkcml2ZXJzIChgbWx4NWApIHRoYXQgcmVxdWlyZSAqcGh5c2ljYWwqIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGJ5IFFFTVUgaXMgdXN1YWxseSBjb25zaWRlcmVkIHVuaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIFdlIGNhbiBsYXJnZWx5IGlnbm9yZSBpdC4KCkxvb2tpbmcgYXQgdGhlIGB2ZmlvYCBwYXJ0cywgc3BlY2lmaWNhbGx5IGluIGB2ZmlvX3BjaV9jb3JlLmNgIGFuZCBgdmZpb19wY2lfZG1hYnVmLmNgLCB0aGUgZnVuY3Rpb24gYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgY29tZXMgdG8gdGhlIGZvcmVmcm9udC4gVGhpcyBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCB2aWEgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpYC4gQ3JpdGljYWxseSwgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IGEgUENJIGRldmljZSAqc3VwcG9ydHMqIFRQSC4KCk5vdywgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogRG9lcyBRRU1VLCBpbiBhIHR5cGljYWwgU3l6a2FsbGVyIHNldHVwLCAqZW11bGF0ZSogYW55IFBDSSBkZXZpY2UgdGhhdCBoYXMgVFBIIENvbXBsZXRlciBjYXBhYmlsaXRpZXM/IFRoYXQgaXMgdGhlIGNydXggb2YgdGhlIHJlYWNoYWJpbGl0eS4gSSBuZWVkIHRvIGNoZWNrIFFFTVUmIzM5O3MgUENJIGRldmljZSBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLiBJZiBRRU1VIGRvZXMgbm90IGVtdWxhdGUgVFBILCB0aGlzIHdob2xlIGJyYW5jaCB3aWxsIGFsd2F5cyByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBzdGlsbCAqcmVhY2hhYmxlKiwgYnV0IGp1c3QgcmV0dXJucyBlYXJseS4KClRoZXJlIGlzIGFsc28gYGRtYV9idWZfZ2V0X3BjaV90cGhgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24sIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYC4gIEhvd2V2ZXIsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBjYWxsZWQgb25seSBieSBgbWx4NWAgaW4gdGhpcyBwYXRjaCBhbmQgaXMgdGhlcmVmb3JlIHVucmVhY2hhYmxlIGluIGEgUUVNVSBzZXR1cC4KCkhvd2V2ZXIsIHRoZSBrZXkgZnVuY3Rpb24sIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaW9jdGwuIEl0IGFjcXVpcmVzIGEgZG1hLWJ1ZiBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXRzIHNvbWUgZmllbGRzLCB3aGljaCBhcmUgb25seSByZWFkIGJ5IHRoZSB1bnJlYWNoYWJsZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAuIFNvIHdlIGFyZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBpb2N0bCBwcm92aWRlcyBhIGZ1enphYmxlIHN1cmZhY2UuCgpJZiBUUEggaXMgKm5vdCogc3VwcG9ydGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIGFuZCB0aGF0IGlzIGFsbCB0aGF0IGNhbiBoYXBwZW4uCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpYCwgd2hlcmUgYHZkZXYtJmd0O3BkZXZgIGlzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIGluIFFFTVUuICBJIG5lZWQgdG8gY2hlY2sgaG93IFRQSCBpcyBzdXBwb3J0ZWQgb24gdGhvc2UuIFRoaXMgd291bGQgaW52b2x2ZSBjaGVja2luZyBRRU1VJiMzOTtzIHNvdXJjZSBjb2RlLCB0byBsb29rIGZvciBhbnkgZW11bGF0ZWQgUENJIGRldmljZSB3aGljaCBleHBvc2VzIFRQSCBjb21wbGV0ZXIgY2FwYWJpbGl0aWVzLCBpLmUuIGBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFlgIG9yIGBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSGAuIElmIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgZmVhdHVyZSwgd2Ugd2lsbCBnZXQgdGhlIGVhcmx5IHJldHVybiwgd2hpY2ggaXMgYXJndWFibHkgbm90IHdvcnRoIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGxlYW5zIHRvd2FyZHMgdGhpcyBiZWluZyAqbGVzcyogZnJ1aXRmdWwuIFRoZSBwYXRjaCBpcyBpbnRlcmVzdGluZywgYXMgaXQgaW52b2x2ZXMgZG1hLWJ1ZiBpb2N0bCwgYW5kIGxvY2tzIGFyZSBhY3F1aXJlZC4gSG93ZXZlciwgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgUUVNVSwgaXQmIzM5O3MgdW5saWtlbHkgd2UmIzM5O2xsIHRyaWdnZXIgYW55IHJlYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBTbyB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaW9jdGwuIEJ1dCBpbiBhIHJlZ3VsYXIgUUVNVSBTeXprYWxsZXIgc2V0dXAsIGlmIHdlIGNhbiYjMzk7dCBnZXQgcGFzdCB0aGUgY2hlY2sgZm9yIFRQSCBzdXBwb3J0LCBpdCB3aWxsIGp1c3QgcmV0dXJuIGVhcmx5LCBvciBzZXQgZmllbGRzIHRoYXQgYXJlIG5vdCByZWFkLiAgSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBub3QganVzdCBhbiAqZWFybHkgcmV0dXJuKiBzaXR1YXRpb24sIGJ1dCBwb3RlbnRpYWxseSBhICptaXNzaW5nIGZlYXR1cmUqIGluIHN0YW5kYXJkIFFFTVUgc2V0IHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHZpYWJpbGl0eSBvZiB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL3RwaC5jPTIwMD1zdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTIxOC1cdCAqL1xuZHJpdmVycy9wY2kvdHBoLmM6MjE5Olx0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG5kcml2ZXJzL3BjaS90cGguYzoyMjA6XHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XG5kcml2ZXJzL3BjaS90cGguYzoyMjE6XHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG5kcml2ZXJzL3BjaS90cGguYy0yMjItXHRcdHJldHVybiB0cGhfY29tcDtcbmRyaXZlcnMvcGNpL3RwaC5jOjIyMzpcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbmRyaXZlcnMvcGNpL3RwaC5jLTIyNC19XG4tLVxuZHJpdmVycy9wY2kvdHBoLmM9MjM2PUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtMjQ2LSAqXG5kcml2ZXJzL3BjaS90cGguYzoyNDc6ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLFxuZHJpdmVycy9wY2kvdHBoLmM6MjQ4OiAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuZHJpdmVycy9wY2kvdHBoLmM6MjQ5OiAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxuZHJpdmVycy9wY2kvdHBoLmMtMjUwLSAqL1xuZHJpdmVycy9wY2kvdHBoLmM9MjUxPXU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTI1Ni1cdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG5kcml2ZXJzL3BjaS90cGguYzoyNTc6XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbmRyaXZlcnMvcGNpL3RwaC5jLTI1OC1cdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbmRyaXZlcnMvcGNpL3RwaC5jOjI1OTpcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuZHJpdmVycy9wY2kvdHBoLmMtMjYwLVxuZHJpdmVycy9wY2kvdHBoLmMtMjYxLVx0LyogMGIxMCBpcyByZXNlcnZlZDsgZm9sZCBpdCBpbnRvIFwmIzM0O25vdCBzdXBwb3J0ZWRcJiMzNDsgKHNlZSBhYm92ZSkuICovXG5kcml2ZXJzL3BjaS90cGguYzoyNjI6XHR0cGhfY29tcCA9IEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKTtcbmRyaXZlcnMvcGNpL3RwaC5jOjI2MzpcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcbmRyaXZlcnMvcGNpL3RwaC5jOjI2NDpcdCAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcbmRyaXZlcnMvcGNpL3RwaC5jLTI2NS1cdFx0cmV0dXJuIHRwaF9jb21wO1xuZHJpdmVycy9wY2kvdHBoLmM6MjY2Olx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuZHJpdmVycy9wY2kvdHBoLmMtMjY3LX1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4Mi1cdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozODM6XHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzg0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy00MDAtXHRpZiAoKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NDAxOlx0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQwMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTUwPXN0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo1MTp7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTItI2VuZGlmXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmgtNjcyLSNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQMl9MVFJcdFx0MHgwMDAwMDgwMCAvKiBMYXRlbmN5IHRvbGVyYW5jZSByZXBvcnRpbmcgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oOjY3MzojZGVmaW5lICBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTS1x0MHgwMDAwMzAwMCAvKiBUUEggY29tcGxldGVyIHN1cHBvcnQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oLTY3NC0jZGVmaW5lICBQQ0lfRVhQX0RFVkNBUDJfT0JGRl9NQVNLXHQweDAwMGMwMDAwIC8qIE9CRkYgc3VwcG9ydCBtZWNoYW5pc20gKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC0xMDUyLS8qIFRQSCBDb21wbGV0ZXIgU3VwcG9ydCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmg6MTA1MzojZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FXHRcdDB4MCAvKiBOb25lICovXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaDoxMDU0OiNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZXHQweDEgLyogVFBIIG9ubHkgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oOjEwNTU6I2RlZmluZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSFx0MHgzIC8qIFRQSCBhbmQgRXh0ZW5kZWQgVFBIICovXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC0xMDU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQxMAoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAyMDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBDSSBUUEggTWV0YWRhdGEgUmV0cmlldmFsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoaXM/JiMzNDsgSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0cnlpbmcgdG8gZ2V0IFRQSCBtZXRhZGF0YSwgd2hpY2ggcmVsaWVzIG9uIGEgZGV2aWNlJiMzOTtzIGBQQ0lfRVhQX0RFVkNBUDJgIHJlZ2lzdGVyLiBDYW4gc3l6a2FsbGVyIGluamVjdCBhIFBDSSBkZXZpY2Ugd2l0aCB0aGlzIGZlYXR1cmU/IEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4gU3l6a2FsbGVyIGxldmVyYWdlcyBRRU1VJiMzOTtzIGRldmljZSBlbXVsYXRpb24sIGFuZCBpZiBRRU1VIGRvZXNuJiMzOTt0IG9mZmVyIGEgZGV2aWNlIHdpdGggVFBIIENvbXBsZXRlciBzdXBwb3J0LCB0aGlzIGlzIGRlYWQgaW4gdGhlIHdhdGVyIGZyb20gdGhlIGdldC1nby4gSSBtZWFuLCBzeXprYWxsZXIgaGFzIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSwgYW5kIHNvIG9uLi4uIGJ1dCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSB3YXkgdG8gc3ludGhlc2l6ZSBQQ0kgY29uZmlnIHNwYWNlLiBJdCByZWxpZXMgb24gdGhlICp2aXJ0dWFsKiBoYXJkd2FyZSwgd2hpY2ggaXMgdGhlIHByb2JsZW0uCgpBbHJpZ2h0LCB3aGF0IGlmIHdlIHVzZSBgQ09ORklHX1ZGSU9fUENJYCBhbmQgYmluZCBhIHZpcnR1YWwgZGV2aWNlIGxpa2UgYGUxMDAwZWAgb3IgYHZpcnRpby1wY2lgIHRvIGl0PyBCdXQgZG8gKnRob3NlKiBoYXZlIFRQSCBDb21wbGV0ZXIgc3VwcG9ydD8gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBkcml2ZXIgc2V0dGluZyB0aGF0IGZsYWcsIGl0JiMzOTtzIGEgaGFyZHdhcmUgdGhpbmcuIFRoZSBvbmx5IHdheSBJIHNlZSBpdCBoYXBwZW5pbmcgaXMgaWYgd2UgY291bGQgYWRkIHRoZSBjYXBhYmlsaXR5IG1hbnVhbGx5IGluIFFFTVUsIG1heWJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBwY2lfYWRkX2NhcGAsIGJ1dCB0aGF0JiMzOTtzIG5vdCBzdGFuZGFyZCBRRU1VLiBBbmQgZXZlbiBpZiB3ZSBjb3VsZCByZWFjaCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCB1cCB0byB0aGUgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCBjaGVjaywgaXMgaXQgcmVhbGx5IHdvcnRoIGZ1enppbmcganVzdCBmb3IgdGhhdD8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiBRRU1VLCBvciByZWx5IG9uIHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZS4KCk5vdywgdGhpcyBgbWx4NWAgcGFydCBpcyBzY3JlYW1pbmcgJiMzNDt2ZW5kb3Itc3BlY2lmaWMmIzM0Oy4gVGhhdCYjMzk7cyBhIE1lbGxhbm94IFNtYXJ0TklDIGRyaXZlciwgcmVxdWlyaW5nICpwaHlzaWNhbCogaGFyZHdhcmUuIERlZmluaXRlbHkgb3V0LiBUaGUgYHZmaW9gIHBhcnQsIGluIGB2ZmlvX3BjaV9kbWFidWYuY2AsIHJlbGllcyBvbiBhIFBDSSBkZXZpY2UgKndpdGgqIFRQSCBDb21wbGV0ZXIuIFNpbmNlIHRoaXMgaXMgYSBoYXJkd2FyZSBmZWF0dXJlIGRlc2lnbmVkIHRvIG9wdGltaXplIGNhY2hlIHBsYWNlbWVudCBpbiBwaHlzaWNhbCBDUFVzL3Jvb3QgY29tcGxleGVzIGFuZCB0aGUgc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGxpa2UgYGUxMDAwZWAsIGB2aXJ0aW8tbmV0YCBkb24mIzM5O3Qgc3VwcG9ydCBUUEgsIHRoaXMgcGF0aCBpcyB1bnJlYWNoYWJsZS4gQW5kIHRoZXJlJiMzOTtzIG5vIHdheSB0byBmYWtlIHRoYXQgZWl0aGVyLCBgdmZpby1wY2lgIGp1c3QgcGFzc2VzIHRocm91Z2ggdGhlIGV4aXN0aW5nIHBoeXNpY2FsIGRldmljZSYjMzk7cyBjb25maWcgc3BhY2UuIFRoZXJlZm9yZSwgbGluZSAzODQgb2YgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaXMgdGhlIGVuZCBvZiB0aGUgbGluZS4KCldhaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCBjYW4gYmUgcmVhY2hlZC4KCmBgYGMKCWlmICghdmRldi0mZ3Q7cGNpX29wcyB8fCAhdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzKQoJCXJldHVybiAtRU9QTk9UU1VQUDsKCgljb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi0mZ3Q7cGRldik7CglpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSkKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmBgYAoKSXQgaXMganVzdCAyIGBpZmAgc3RhdGVtZW50cyBiZWZvcmUgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGVyZSBhcmUgbm8gaW50ZXJlc3RpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIGhlcmUuIFRoZSBhY3R1YWwgY2hhbmdlcywgd2hpY2ggaW52b2x2ZSBzZXR0aW5nIFRQSCBtZXRhZGF0YSBhbmQgbG9ja2luZyB0aGUgZG1hLWJ1ZiwgYXJlIGFmdGVyIHRoZSBjaGVjay4gSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgZnVuY3Rpb25hbCBjb2RlIGlzIG5ldmVyIHJlYWNoZWQuIFNvIHRoZSByZWFjaGFibGUgcGFydCBpcyB0cml2aWFsIGFuZCBub3Qgd29ydGggZnV6emluZy4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIGBtbHg1YCBjaGFuZ2VzIG1vcmUgc3BlY2lmaWNhbGx5LiBUaGUgY2hhbmdlcyBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY2AsIGBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jYCBhcmUgYWxsIHRpZWQgdG8gdGhlIGBtbHg1YCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIGEgTWVsbGFub3ggQ29ubmVjdFggYWRhcHRlci4gUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgdGhvc2UuIFNvLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUuCgpUaGUgYGRtYS1idWZgIGNoYW5nZXMgYXJlIGFsc28gcHJvYmxlbWF0aWMuIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpbiBgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY2AgaXMgYSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24gYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGJ5IGBtbHg1YC4gU2luY2UgYG1seDVgIGlzIHVucmVhY2hhYmxlLCBzbyBpcyB0aGlzIG5ldyBmdW5jdGlvbi4KClRoZSBgcGNpYCBjaGFuZ2VzIGFyZSBqdXN0IGhlbHBlciBmdW5jdGlvbnM6IGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCBhbmQgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCBpbiBgZHJpdmVycy9wY2kvdHBoLmNgLiBUaGVzZSBhcmUgbmV3Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgbWV0YWRhdGEgcmV0cmlldmFsIGZyb20gRE1BIGJ1ZmZlcnMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBtbHg1YCBkcml2ZXIgKE1lbGxhbm94IENvbm5lY3RYKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIGluIGB2ZmlvLXBjaWAgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaW9jdGwuIFRoZSBWRklPIGlvY3RsIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gdGhlIHVuZGVybHlpbmcgUENJIGRldmljZSYjMzk7cyBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgcmVnaXN0ZXIgKGBQQ0lfRVhQX0RFVkNBUDJgKS4gU2luY2Ugc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGRvIG5vdCBpbXBsZW1lbnQgVFBIIENvbXBsZXRlciBzdXBwb3J0LCB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIGlvY3RsIHdpbGwgYWx3YXlzIHJldHVybiBgLUVPUE5PVFNVUFBgIGVhcmx5IGFuZCBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgaW4gYGRtYS1idWYuY2AgYW5kIGBwY2kvdHBoLmNgIGFyZSBvbmx5IGludm9rZWQgYnkgdGhlc2UgdW5yZWFjaGFibGUgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJiMzOTtzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM1OjU3LjE2MjM1MDY1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDU2MTUxOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgbWV0YWRhdGEgcmV0cmlldmFsIGZyb20gRE1BIGJ1ZmZlcnMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBtbHg1YCBkcml2ZXIgKE1lbGxhbm94IENvbm5lY3RYKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIGluIGB2ZmlvLXBjaWAgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaW9jdGwuIFRoZSBWRklPIGlvY3RsIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gdGhlIHVuZGVybHlpbmcgUENJIGRldmljZSdzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzU6NTcuMTYyMzYwNDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY5OTQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDI0ZDRhYzRiNjFjN2Y3MjBmNWFlM2QzZmZhMDM0NjNmMTQ3MzI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDY6MzU6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG5pbmRleCBkNTA0YzYzNmRjMjk0Li43MWYzMzU0NDJiYTc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXFxuQEAgLTkzOSw2ICs5MzksNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxcbiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKVxcbiAgKiAgICAgLSBkbWFfYnVmX3ZtYXAoKVxcbiAgKiAgICAgLSBkbWFfYnVmX3Z1bm1hcCgpXFxuKyAqICAgICAtIGRtYV9idWZfZ2V0X3BjaV90cGgoKVxcbiAgKlxcbiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxcbiAgKiAgICBmdW5jdGlvbnM6XFxuQEAgLTk3OSw2ICs5ODAsNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxcbiAgKiAgICAgLSBcXHUwMDI2ZG1hX2J1Zl9vcHMudW5tYXBfZG1hX2J1ZigpXFxuICAqICAgICAtIFxcdTAwMjZkbWFfYnVmX29wcy52bWFwKClcXG4gICogICAgIC0gXFx1MDAyNmRtYV9idWZfb3BzLnZ1bm1hcCgpXFxuKyAqICAgICAtIFxcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpXFxuICAqXFxuICAqIDMuIEV4cG9ydGVycyBtdXN0IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcXG4gICogICAgZnVuY3Rpb25zOlxcbkBAIC0xMTQ0LDYgKzExNDYsMzYgQEAgdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCBcXFwiRE1BX0JVRlxcXCIpO1xcbiBcXG4rLyoqXFxuKyAqIGRtYV9idWZfZ2V0X3BjaV90cGggLSBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgbWV0YWRhdGFcXG4rICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeVxcbisgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUXFxuKyAqIEBzdGVlcmluZ190YWc6IHJldHVybnMgdGhlIHJhdyBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlXFxuKyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludFxcbisgKlxcbisgKiBXcmFwcGVyIGZvciB0aGUgb3B0aW9uYWwgXFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxcbisgKlxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFxcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcXG4rICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZVxcbisgKiByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxcbisgKlxcbisgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlXFxuKyAqIGV4cG9ydGVyIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IG1hcHBpbmcgKHNpZ25hbGxlZCB0byB0aGUgaW1wb3J0ZXIgdmlhXFxuKyAqIFxcdTAwMjZkbWFfYnVmX2F0dGFjaF9vcHMuaW52YWxpZGF0ZV9tYXBwaW5ncykuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XFxuKyAqIG1hcHBpbmcgaXMgZXN0YWJsaXNoZWQgZm9sbG93aW5nIGludmFsaWRhdGlvbi5cXG4rICovXFxuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmICghZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFxcXCJETUFfQlVGXFxcIik7XFxuK1xcbiAvKipcXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xcbmluZGV4IDAyODA5MTE0ZmM3OWEuLmEyYjQ5N2Y2YjE2YmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXFxuQEAgLTYwLDYgKzYwLDcgQEBcXG4gTU9EVUxFX0FVVEhPUihcXFwiRWxpIENvaGVuIFxcdTAwM2NlbGlAbWVsbGFub3guY29tXFx1MDAzZVxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1lbGxhbm94IDV0aCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKENvbm5lY3RYIHNlcmllcykgSUIgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG4rTU9EVUxFX0lNUE9SVF9OUyhcXFwiRE1BX0JVRlxcXCIpO1xcbiBcXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaFxcbmluZGV4IDUyMjk4NGQ5NThiYmYuLmM2YTk1NmIyZWU4N2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXFxuQEAgLTY0Niw2ICs2NDYsMTUgQEAgZW51bSBtbHg1X21rZXlfdHlwZSB7XFxuIC8qIFVzZWQgZm9yIG5vbi1leGlzdGVudCBwaCB2YWx1ZSAqL1xcbiAjZGVmaW5lIE1MWDVfSUJfTk9fUEggMHhmZlxcbiBcXG4rc3RydWN0IGRtYV9idWY7XFxuK1xcbitzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoIHtcXG4rXFx0dTE2IHN0ZWVyaW5nX3RhZztcXG4rXFx0dTggcGg7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdGJvb2wgdmFsaWQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgbWx4NV9pYl9ta2V5IHtcXG4gXFx0dTMyIGtleTtcXG4gXFx0ZW51bSBtbHg1X21rZXlfdHlwZSB0eXBlO1xcbkBAIC03MjYsNiArNzM1LDcgQEAgc3RydWN0IG1seDVfaWJfbXIge1xcbiBcXHRcXHRcXHR1OCByZXZva2VkIDoxO1xcbiBcXHRcXHRcXHQvKiBJbmRpY2F0ZXMgcHJldmlvdXMgZG1hYnVmIHBhZ2UgZmF1bHQgb2NjdXJyZWQgKi9cXG4gXFx0XFx0XFx0dTggZG1hYnVmX2ZhdWx0ZWQ6MTtcXG4rXFx0XFx0XFx0c3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCBkbWFidWZfdHBoO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgbWx4NV9pYl9ta2V5IG51bGxfbW1rZXk7XFxuIFxcdFxcdH07XFxuIFxcdH07XFxuQEAgLTEzNDEsNiArMTM1MSw3IEBAIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9yZXJlZ191c2VyX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIGludCBmbGFncywgdTY0IHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHQgICAgdTY0IGxlbmd0aCwgdTY0IHZpcnRfYWRkciwgaW50IGFjY2Vzc19mbGFncyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xcbiBpbnQgbWx4NV9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xcbitpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zik7XFxuIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9hbGxvY19tcihzdHJ1Y3QgaWJfcGQgKnBkLCBlbnVtIGliX21yX3R5cGUgbXJfdHlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIHUzMiBtYXhfbnVtX3NnKTtcXG4gc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yX2ludGVncml0eShzdHJ1Y3QgaWJfcGQgKnBkLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xcbmluZGV4IGU2Yjc0OTU1ZDk1ZGMuLjQwNGM1ZDA4MWI4YWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcXG5AQCAtMzksNiArMzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImRtLmhcXFwiXFxuQEAgLTE2Nyw2ICsxNjgsNjEgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLIEdFTk1BU0tfVUxMKDIzLCAxNilcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxcbiBcXG4rc3RhdGljIHU4IG1seDVfaWJfdHBoX2tleV9waCh1OCBwaClcXG4re1xcbitcXHRpZiAocGggPT0gTUxYNV9JQl9OT19QSCB8fCBwaCA9PSAwKVxcbitcXHRcXHRwaCBePSBNTFg1X0lCX05PX1BIO1xcbitcXG4rXFx0cmV0dXJuIHBoO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcXG4re1xcbitcXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBtbHg1X3N0X2dldF9pbmRleChkZXYtXFx1MDAzZW1kZXYsIHN0X2luZGV4KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXFxuK3tcXG4rXFx0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWx4NV9zdF9kZWFsbG9jX2luZGV4KGRldi1cXHUwMDNlbWRldiwgc3RfaW5kZXgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXFxuK3tcXG4rXFx0dTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBrZXJuZWxfdmVuZG9yX2tleSk7XFxuK1xcbitcXHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XFxuK31cXG4rXFxuK2ludCBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggKnRwaCA9IFxcdTAwMjZtci1cXHUwMDNlZG1hYnVmX3RwaDtcXG4rXFx0dTE2IHN0ZWVyaW5nX3RhZztcXG4rXFx0dTggcGg7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXRwaC1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCB0cGgtXFx1MDAzZWV4dGVuZGVkLCBcXHUwMDI2c3RlZXJpbmdfdGFnLCBcXHUwMDI2cGgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChzdGVlcmluZ190YWcgIT0gdHBoLVxcdTAwM2VzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLVxcdTAwM2VwaClcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBtbHg1X2liX21yICpcXG4gX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcXG4gXFx0XFx0ICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLFxcbkBAIC0xODksMTMgKzI0NSwxMCBAQCBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXHRcXHRcXHRNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLIDpcXG4gXFx0XFx0XFx0MDtcXG4gXFxuLVxcdC8qIE5vcm1hbGl6ZSBwaDogc3dhcCAwIGFuZCBNTFg1X0lCX05PX1BIICovXFxuLVxcdGlmIChwaCA9PSBNTFg1X0lCX05PX1BIIHx8IHBoID09IDApXFxuLVxcdFxcdHBoIF49IE1MWDVfSUJfTk9fUEg7XFxuLVxcbiBcXHRtci1cXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XFxuIFxcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcXG4tXFx0XFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLCBwaCk7XFxuK1xcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyxcXG4rXFx0XFx0XFx0ICAgbWx4NV9pYl90cGhfa2V5X3BoKHBoKSk7XFxuIFxcdGVyciA9IGliX2ZybXJfcG9vbF9wb3AoXFx1MDAyNmRldi1cXHUwMDNlaWJfZGV2LCBcXHUwMDI2bXItXFx1MDAzZWlibXIpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGtmcmVlKG1yKTtcXG5AQCAtMjE4LDcgKzI3MSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAwIDpcXG4gXFx0XFx0XFx0XFx0ICAgICAgTUxYNV9GUk1SX1BPT0xTX0tFWV9BQ0NFU1NfTU9ERV9LU01fTUFTSyxcXG4gXFx0XFx0Lm51bV9kbWFfYmxvY2tzID0gbmRlc2NzLFxcbi1cXHRcXHQua2VybmVsX3ZlbmRvcl9rZXkgPSAwLCAvKiBubyBQSCBhbmQgbm8gU1QgaW5kZXggKi9cXG4rXFx0XFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cXG4rXFx0XFx0XFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgbWx4NV9pYl9tciAqbXI7XFxuIFxcdGludCByZXQ7XFxuQEAgLTU1Nyw2ICs2MTIsMTAgQEAgc3RhdGljIHN0cnVjdCBtbHg1X2liX21yICpyZWdfY3JlYXRlKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXHRtci1cXHUwMDNlaWJtci5wZCA9IHBkO1xcbiBcXHRtci1cXHUwMDNlYWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzO1xcbiBcXHRtci1cXHUwMDNlcGFnZV9zaGlmdCA9IG9yZGVyX2Jhc2VfMihwYWdlX3NpemUpO1xcbitcXHRtci1cXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XFxuK1xcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcXG4rXFx0XFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLFxcbitcXHRcXHRcXHQgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTtcXG4gXFxuIFxcdGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfbWtleV9pbik7XFxuIFxcdGlmIChwb3B1bGF0ZSlcXG5AQCAtNzUzLDYgKzgxMiwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcXG4gXFx0XFx0XFx0c3RfaW5kZXggPSBtZG1haC1cXHUwMDNlc3RfaW5kZXg7XFxuIFxcdH1cXG4gXFxuK1xcdGVyciA9IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHR9XFxuK1xcbiBcXHR4bHRfd2l0aF91bXIgPSBtbHg1cl91bXJfY2FuX2xvYWRfcGFzKGRldiwgdW1lbS1cXHUwMDNlbGVuZ3RoKTtcXG4gXFx0aWYgKHhsdF93aXRoX3Vtcikge1xcbiBcXHRcXHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgdW1lbSwgaW92YSwgYWNjZXNzX2ZsYWdzLFxcbkBAIC03NjksNiArODM0LDcgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VzbG93X3BhdGhfbXV0ZXgpO1xcbiBcXHR9XFxuIFxcdGlmIChJU19FUlIobXIpKSB7XFxuK1xcdFxcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcXG4gXFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QobXIpO1xcbiBcXHR9XFxuQEAgLTkwMyw2ICs5NjksNjMgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcXG4gXFx0LmludmFsaWRhdGVfbWFwcGluZ3MgPSBtbHg1X2liX2RtYWJ1Zl9pbnZhbGlkYXRlX2NiLFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgZ2V0X3BjaV90cGhfbXJfZG1hYnVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggKnRwaCxcXG4rXFx0XFx0XFx0XFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXFxuK3tcXG4rXFx0dTE2IGxvY2FsX3N0X2luZGV4O1xcbitcXHR1MTYgc3RlZXJpbmdfdGFnO1xcbitcXHR1OCBsb2NhbF9waDtcXG4rXFx0Ym9vbCBleHRlbmRlZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHN3aXRjaCAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShkZXYtXFx1MDAzZW1kZXYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XFxuK1xcdFxcdGV4dGVuZGVkID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBDSV9UUEhfUkVRX0VYVF9UUEg6XFxuK1xcdFxcdGV4dGVuZGVkID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpIG11c3QgcnVuIHVuZGVyIGRtYWJ1Zi1cXHUwMDNlcmVzdiwgYnV0IGRyb3AgdGhlIGxvY2tcXG4rXFx0ICogYmVmb3JlIG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKCk6IHRoYXQgYWxsb2NhdGVzIHdpdGggR0ZQX0tFUk5FTCxcXG4rXFx0ICogd2hpY2ggbXVzdCBub3QgcnVuIHVuZGVyIGRtYWJ1Zi1cXHUwMDNlcmVzdiBzaW5jZSByZWNsYWltIGNhbiByZS1lbnRlciB0aGVcXG4rXFx0ICogc2FtZSByZXNlcnZhdGlvbiBvYmplY3QgdGhyb3VnaCBhIGR5bmFtaWMgZXhwb3J0ZXIncyBtb3ZlX25vdGlmeSBwYXRoLlxcbitcXHQgKi9cXG4rXFx0ZG1hX3Jlc3ZfbG9jayhkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHRyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIFxcdTAwMjZzdGVlcmluZ190YWcsIFxcdTAwMjZsb2NhbF9waCk7XFxuK1xcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdFxcdG1seDVfaWJfZGJnKGRldiwgXFxcImdldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldi1cXHUwMDNlbWRldiwgc3RlZXJpbmdfdGFnLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxvY2FsX3N0X2luZGV4KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtbHg1X2liX2RiZyhkZXYsIFxcXCJzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0KnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7XFxuK1xcdCpwaCA9IGxvY2FsX3BoO1xcbitcXHR0cGgtXFx1MDAzZXN0ZWVyaW5nX3RhZyA9IHN0ZWVyaW5nX3RhZztcXG4rXFx0dHBoLVxcdTAwM2VwaCA9IGxvY2FsX3BoO1xcbitcXHR0cGgtXFx1MDAzZWV4dGVuZGVkID0gZXh0ZW5kZWQ7XFxuK1xcdHRwaC1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX21yICptcilcXG4re1xcbitcXHRtbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLFxcbitcXHRcXHRcXHRcXHQgIG1yLVxcdTAwM2VpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5KTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBpYl9tciAqXFxuIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxcbiBcXHRcXHQgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLFxcbkBAIC05MTMsNiArMTAzNiw3IEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxcbiBcXHRzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtXFx1MDAzZWRldmljZSk7XFxuIFxcdHN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7XFxuIFxcdHN0cnVjdCBpYl91bWVtX2RtYWJ1ZiAqdW1lbV9kbWFidWY7XFxuK1xcdHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggdHBoID0ge307XFxuIFxcdHUxNiBzdF9pbmRleCA9IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWDtcXG4gXFx0dTggcGggPSBNTFg1X0lCX05PX1BIO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC05NDUsMTggKzEwNjksMjkgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXFxuIFxcdFxcdHBoID0gZG1haC1cXHUwMDNlcGg7XFxuIFxcdFxcdGlmIChkbWFoLVxcdTAwM2V2YWxpZF9maWVsZHMgXFx1MDAyNiBCSVQoSUJfRE1BSF9DUFVfSURfRVhJU1RTKSlcXG4gXFx0XFx0XFx0c3RfaW5kZXggPSBtZG1haC1cXHUwMDNlc3RfaW5kZXg7XFxuK1xcbitcXHRcXHRlcnIgPSBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGliX3VtZW1fcmVsZWFzZShcXHUwMDI2dW1lbV9kbWFidWYtXFx1MDAzZXVtZW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGdldF9wY2lfdHBoX21yX2RtYWJ1ZihkZXYsIHVtZW1fZG1hYnVmLVxcdTAwM2VhdHRhY2gtXFx1MDAzZWRtYWJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRwaCwgXFx1MDAyNnN0X2luZGV4LCBcXHUwMDI2cGgpO1xcbiBcXHR9XFxuIFxcbiBcXHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgXFx1MDAyNnVtZW1fZG1hYnVmLVxcdTAwM2V1bWVtLCB2aXJ0X2FkZHIsXFxuIFxcdFxcdFxcdFxcdGFjY2Vzc19mbGFncywgYWNjZXNzX21vZGUsXFxuIFxcdFxcdFxcdFxcdHN0X2luZGV4LCBwaCk7XFxuIFxcdGlmIChJU19FUlIobXIpKSB7XFxuK1xcdFxcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcXG4gXFx0XFx0aWJfdW1lbV9yZWxlYXNlKFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSk7XFxuIFxcdFxcdHJldHVybiBFUlJfQ0FTVChtcik7XFxuIFxcdH1cXG4gXFxuIFxcdG1seDVfaWJfZGJnKGRldiwgXFxcIm1rZXkgMHgleFxcXFxuXFxcIiwgbXItXFx1MDAzZW1ta2V5LmtleSk7XFxuIFxcbitcXHRtci1cXHUwMDNlZG1hYnVmX3RwaCA9IHRwaDtcXG4gXFx0YXRvbWljX2FkZChpYl91bWVtX251bV9wYWdlcyhtci1cXHUwMDNldW1lbSksIFxcdTAwMjZkZXYtXFx1MDAzZW1kZXYtXFx1MDAzZXByaXYucmVnX3BhZ2VzKTtcXG4gXFx0dW1lbV9kbWFidWYtXFx1MDAzZXByaXZhdGUgPSBtcjtcXG4gXFx0aWYgKCFwaW5uZWRfbW9kZSkge1xcbkBAIC0xNDA1LDYgKzE1NDAsNyBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKVxcbiBcXHRpZiAobXItXFx1MDAzZWlibXIuZnJtci5wb29sKSB7XFxuIFxcdFxcdGlmICghbWx4NV91bXJfcmV2b2tlX21yX3dpdGhfbG9jayhtcikpIHtcXG4gXFx0XFx0XFx0aWJfZnJtcl9wb29sX3B1c2gobXItXFx1MDAzZWlibXIuZGV2aWNlLCBcXHUwMDI2bXItXFx1MDAzZWlibXIpO1xcbitcXHRcXHRcXHRtbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKG1yKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC0xNDMyLDYgKzE1NjgsOSBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKVxcbiBcXHRpZiAobXItXFx1MDAzZWlibXIuZnJtci5wb29sIFxcdTAwMjZcXHUwMDI2ICFyZXQpXFxuIFxcdFxcdGliX2ZybXJfcG9vbF9kcm9wKFxcdTAwMjZtci1cXHUwMDNlaWJtcik7XFxuIFxcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0bWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihtcik7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXFxuaW5kZXggMWJhZGVjOWJmNTI3MC4uN2MxNzMxYWEzZGQ5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXFxuQEAgLTg1Nyw2ICs4NTcsMTMgQEAgc3RhdGljIGludCBwYWdlZmF1bHRfZG1hYnVmX21yKHN0cnVjdCBtbHg1X2liX21yICptciwgc2l6ZV90IGJjbnQsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuK1xcdGVyciA9IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChtciwgdW1lbV9kbWFidWYtXFx1MDAzZWF0dGFjaC1cXHUwMDNlZG1hYnVmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpYl91bWVtX2RtYWJ1Zl91bm1hcF9wYWdlcyh1bWVtX2RtYWJ1Zik7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayh1bWVtX2RtYWJ1Zi1cXHUwMDNlYXR0YWNoLVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRwYWdlX3NpemUgPSBtbHg1X3VtZW1fZG1hYnVmX2ZpbmRfYmVzdF9wZ3N6KHVtZW1fZG1hYnVmLCBhY2Nlc3NfbW9kZSk7XFxuIFxcdGlmICghcGFnZV9zaXplKSB7XFxuIFxcdFxcdGliX3VtZW1fZG1hYnVmX3VubWFwX3BhZ2VzKHVtZW1fZG1hYnVmKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXFxuaW5kZXggN2NlZGMzNDg3OTBkYi4uYzYyYmNhZTdjNTQyMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcXG5AQCAtOTIsMjMgKzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIFxcdGtmcmVlKHN0KTtcXG4gfVxcbiBcXG4taW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxcbitpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcXG4rXFx0XFx0XFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xcbiBcXHRzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtXFx1MDAzZXN0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbiBcXHR1MzIgeGFfaWQ7XFxuLVxcdHUxNiB0YWc7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0aWYgKCFzdClcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXFx1MDAzZXBkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCBcXHUwMDI2dGFnKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuIFxcdGlmIChzdC1cXHUwMDNlZGlyZWN0X21vZGUpIHtcXG4gXFx0XFx0KnN0X2luZGV4ID0gdGFnO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMTUyLDggKzE0Nyw0OSBAQCBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdC1cXHUwMDNlbG9jayk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpO1xcbitcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxcbit7XFxuK1xcdHUxNiB0YWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlc3QpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3QoZGV2LVxcdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXFx1MDAyNnRhZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LCB0YWcsIHN0X2luZGV4KTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2FsbG9jX2luZGV4KTtcXG4gXFxuK2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xcbitcXHRzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtXFx1MDAzZXN0O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghc3QpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChzdC1cXHUwMDNlZGlyZWN0X21vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3QtXFx1MDAzZWxvY2spO1xcbitcXHRpZHhfZGF0YSA9IHhhX2xvYWQoXFx1MDAyNnN0LVxcdTAwM2VpZHhfeGEsIHN0X2luZGV4KTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2aWR4X2RhdGEtXFx1MDAzZXVzZWNvdW50KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfZ2V0X2luZGV4KTtcXG4rXFxuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xcbmluZGV4IDY1NWZmZDYwZTYyZjYuLmQwMjAyZmY3YTFiMjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcXG4rKysgYi9kcml2ZXJzL3BjaS90cGguY1xcbkBAIC0yMDAsNiArMjAwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZSk7XFxuIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnJwO1xcbitcXHR1OCB0cGhfY29tcDtcXG4gXFx0dTMyIHJlZztcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTIxMSw4ICsyMTIsNjAgQEAgc3RhdGljIHU4IGdldF9ycF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXR1cm4gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xcbitcXHQvKlxcbitcXHQgKiAwYjEwIGlzIHJlc2VydmVkOyB0cmVhdCBpdCBhcyBcXFwibm90IHN1cHBvcnRlZFxcXCIgc28gb25seSB0aGVcXG4rXFx0ICogYXJjaGl0ZWN0ZWQgZW5jb2RpbmdzIHJlYWNoIHRoZSBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkLlxcbitcXHQgKi9cXG4rXFx0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XFxuK1xcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcXG4rXFx0ICAgIHRwaF9jb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxcbitcXHRcXHRyZXR1cm4gdHBoX2NvbXA7XFxuK1xcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XFxuKyAqXFxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cXG4rICovXFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmVhZHMgdGhlIFxcXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFxcXCIgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cXG4rICogXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIHNvIGNhbGxlcnMgb25seSBuZWVkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdGhyZWVcXG4rICogZGVmaW5lZCB2YWx1ZXMuXFxuKyAqXFxuKyAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dTggdHBoX2NvbXA7XFxuK1xcdHUzMiByZWc7XFxuK1xcbitcXHRpZiAocGNpZV9jYXBhYmlsaXR5X3JlYWRfZHdvcmQocGRldiwgUENJX0VYUF9ERVZDQVAyLCBcXHUwMDI2cmVnKSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcXG4rXFxuK1xcdC8qIDBiMTAgaXMgcmVzZXJ2ZWQ7IGZvbGQgaXQgaW50byBcXFwibm90IHN1cHBvcnRlZFxcXCIgKHNlZSBhYm92ZSkuICovXFxuK1xcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xcbitcXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XFxuK1xcdCAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG4rXFx0XFx0cmV0dXJuIHRwaF9jb21wO1xcbitcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XFxuIFxcbiAvKiBXcml0ZSB0YWcgdG8gU1QgdGFibGUgLSBSZXR1cm4gMCBpZiBPSywgb3RoZXJ3aXNlIC1lcnJubyAqL1xcbiBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuaW5kZXggM2YxMWE5NjI0YjljMC4uNGU1ZTM0YTc3Yjc2ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTE2MjUsNiArMTYyNSw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5pbmRleCBjMTZmNDYwYzAxZDY4Li5mNjMwMTU4MjA0YjRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtcmVzdi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZmaW9fcGNpX3ByaXYuaFxcXCJcXG5AQCAtMTksNyArMjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbiBcXHR1MzIgbnJfcmFuZ2VzO1xcbiBcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVwZGF0ZXMgcHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XFxuK1xcdCAqIHByb3RlY3RlZCBieSBtZW1vcnlfbG9jay5cXG4rXFx0ICovXFxuK1xcdHUxNiB0cGhfc3RfZXh0O1xcbitcXHR1OCB0cGhfc3Q7XFxuK1xcdGJvb2wgcmV2b2tlZDtcXG4rXFx0dTggdHBoX3N0X3ZhbGlkOjE7XFxuK1xcdHU4IHRwaF9zdF9leHRfdmFsaWQ6MTtcXG4rXFx0dTggdHBoX3BoOjI7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuQEAgLTMwLDcgKzQxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRpZiAoIWF0dGFjaG1lbnQtXFx1MDAzZXBlZXIycGVlcilcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZXJldm9rZWQpXFxuK1xcdGlmIChSRUFEX09OQ0UocHJpdi1cXHUwMDNlcmV2b2tlZCkpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXFxuQEAgLTY5LDYgKzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCkge1xcbitcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXFx1MDAzZXRwaF9zdF9leHQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdCpzdGVlcmluZ190YWcgPSBwcml2LVxcdTAwM2V0cGhfc3Q7XFxuK1xcdH1cXG4rXFx0KnBoID0gcHJpdi1cXHUwMDNldHBoX3BoO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcXG4gXFx0XFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbkBAIC0xMDEsNiArMTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuIFxcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcXG4rXFx0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcXG4gXFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXFxuIFxcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcXG4gXFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXFxuQEAgLTMzMyw2ICszNjUsODYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbitcXHR1OCBjb21wO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF2ZGV2LVxcdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKHNldF90cGgpKTtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzZXRfdHBoLCBhcmcsIHNpemVvZihzZXRfdHBoKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0aWYgKHNldF90cGguZmxhZ3MgXFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHNldF90cGgucGggXFx1MDAyNiB+MHgzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmICgoc2V0X3RwaC5mbGFncyBcXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpO1xcbitcXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XFxuK1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbitcXHR9XFxuK1xcbitcXHRwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQHJldm9rZWQgYW5kIHRoZSBkbWEtYnVmL3ZkZXYgYXNzb2NpYXRpb24gYXJlIHRvcm4gZG93biB1bmRlclxcbitcXHQgKiBtZW1vcnlfbG9jayBieSB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKTsgaG9sZCBpdCB3aGlsZSB2YWxpZGF0aW5nXFxuK1xcdCAqIG93bmVyc2hpcCBhbmQgcHVibGlzaGluZyBzbyB0aGUgZG1hLWJ1ZiBjYW5ub3QgYmUgZGlzYXNzb2NpYXRlZCBmcm9tXFxuK1xcdCAqIEB2ZGV2IHVuZGVybmVhdGggdXMuIExvY2sgb3JkZXIgbWVtb3J5X2xvY2sgLVxcdTAwM2UgZG1hYnVmLVxcdTAwM2VyZXN2IG1hdGNoZXNcXG4rXFx0ICogdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKCkuXFxuK1xcdCAqL1xcbitcXHRkb3duX3JlYWQoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXZkZXYgIT0gdmRldikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2tfbWVtO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrX21lbTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xcbitcXHRwcml2LVxcdTAwM2V0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyBcXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1QpO1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3RfZXh0X3ZhbGlkID1cXG4rXFx0XFx0ISEoc2V0X3RwaC5mbGFncyBcXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTtcXG4rXFx0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdHJldCA9IDA7XFxuK1xcbitvdXRfdW5sb2NrX21lbTpcXG4rXFx0dXBfcmVhZChcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitvdXRfcHV0OlxcbitcXHRkbWFfYnVmX3B1dChkbWFidWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcXG5AQCAtMzQ3LDcgKzQ1OSw3IEBAIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmV2b2tlZCAhPSByZXZva2VkKSB7XFxuIFxcdFxcdFxcdGRtYV9yZXN2X2xvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4gXFx0XFx0XFx0aWYgKHJldm9rZWQpXFxuLVxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJldm9rZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZXJldm9rZWQsIHRydWUpO1xcbiBcXHRcXHRcXHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4gXFx0XFx0XFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgRE1BX1JFU1ZfVVNBR0VfQk9PS0tFRVAsIGZhbHNlLFxcbkBAIC0zNjksNyArNDgxLDcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXFxuIFxcdFxcdFxcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0ZG1hX3Jlc3ZfbG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbi1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXZva2VkID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UocHJpdi1cXHUwMDNlcmV2b2tlZCwgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5pbmRleCBmY2E5ZDBkZmFjOTBmLi4wNjNmMzc0ODQ3OGFlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5AQCAtMTE4LDYgKzExOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opO1xcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xcbiAjZWxzZVxcbkBAIC0xMjgsNiArMTMyLDE1IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHJldHVybiAtRU5PVFRZO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcXG5pbmRleCBkMTIwM2RhNTZmYzVmLi4xNGU4ZWI2MWE2MmMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcXG5AQCAtMTEzLDYgKzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiBcXG4rXFx0LyoqXFxuK1xcdCAqIEBnZXRfcGNpX3RwaDpcXG4rXFx0ICpcXG4rXFx0ICogUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIHN0ZWVyaW5nIG1ldGFkYXRhIGZvclxcbitcXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cXG4rXFx0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxcbitcXHQgKlxcbitcXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcXG4rXFx0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbitcXHQgKiBAc3RlZXJpbmdfdGFnOiBSZXR1cm5zIHRoZSByYXcgVFBIIHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZFxcbitcXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcXG4rXFx0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcXG4rXFx0ICpcXG4rXFx0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcXG4rXFx0ICogXFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXFxuK1xcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxcbitcXHQgKlxcbitcXHQgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvclxcbitcXHQgKiBkbWFfYnVmX2dldF9wY2lfdHBoKCkuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0ICAgdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XFxuK1xcbiBcXHQvKipcXG4gXFx0ICogQG1hcF9kbWFfYnVmOlxcbiBcXHQgKlxcbkBAIC01NjMsNiArNTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRcXHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4gaW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XFxuIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcXG4gXFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXFxuaW5kZXggYjE4NzFjMDgyMWQwYi4uZDI2ZTU3NDRjODQzYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG5AQCAtMTE4MiwxNiArMTE4MiwzMSBAQCBpbnQgbWx4NV9kbV9zd19pY21fZGVhbGxvYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIG1seDVfc3dfaWNtX3R5cGUgdHlwZVxcbiBcXHRcXHRcXHQgICB1NjQgbGVuZ3RoLCB1MTYgdWlkLCBwaHlzX2FkZHJfdCBhZGRyLCB1MzIgb2JqX2lkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgKnN0X2luZGV4KTtcXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcXG4gI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbiB7XFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbmluZGV4IGJlNjhjZDE3ZjJmODMuLjc3NDNhZjZmZTQzMjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbkBAIC05LDYgKzksOCBAQFxcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuK1xcbiAvKlxcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XFxuICAqIGRlcGVuZGluZyBvbiB0aGUgbWVtb3J5IHR5cGU6IFZvbGF0aWxlIE1lbW9yeSBvciBQZXJzaXN0ZW50IE1lbW9yeS4gV2hlbiBhXFxuQEAgLTMwLDYgKzMyLDggQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpO1xcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxcbkBAIC00MSw2ICs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4geyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cXG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH1cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuaW5kZXggNWRlNjE4YTNhNWVlZS4uNGMxYzcwYWFjMTUwOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsNDkgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLyoqXFxuKyAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhXFxuKyAqIHdpdGggYSB2ZmlvLWV4cG9ydGVkIGRtYS1idWYuIFRoZSBkbWEtYnVmIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnlcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxcbisgKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHNcXG4rICogY2FycnlpbmcgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgYWRkaXRpb25hbGx5IHJlcXVpcmUgdGhlIGRldmljZSB0b1xcbisgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGxcXG4rICogcmV0dXJucyAtRU9QTk9UU1VQUC5cXG4rICpcXG4rICogQGRtYWJ1Zl9mZCBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRi5cXG4rICpcXG4rICogOC1iaXQgU1QgKEBzdGVlcmluZ190YWcpIGFuZCAxNi1iaXQgRXh0ZW5kZWQgU1QgKEBzdGVlcmluZ190YWdfZXh0KSBhcmVcXG4rICogZGlzdGluY3QgbmFtZXNwYWNlcy4gQGZsYWdzIGlzIHRoZSBhdXRob3JpdGF0aXZlIHZhbGlkaXR5IG1hc2sgZm9yIHRoZVxcbisgKiB0d28gbmFtZXNwYWNlczogVkZJT19ETUFfQlVGX1RQSF9TVCBtYXJrcyBAc3RlZXJpbmdfdGFnIHZhbGlkIGFuZFxcbisgKiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBtYXJrcyBAc3RlZXJpbmdfdGFnX2V4dCB2YWxpZC4gQW4gaW1wb3J0ZXJcXG4rICogcmVxdWVzdHMgb25lIG5hbWVzcGFjZSBhbmQgcmVjZWl2ZXMgdGhlIG1hdGNoaW5nIHZhbHVlLlxcbisgKlxcbisgKiBFYWNoIFNFVCBmdWxseSByZXBsYWNlcyB0aGUgZG1hLWJ1ZidzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXNcXG4rICogb25seS4gQSBuYW1lc3BhY2Ugd2hvc2UgZmxhZyBiaXQgaXMgY2xlYXIgaXMgcmVwb3J0ZWQgYXMgdW5zdXBwb3J0ZWRcXG4rICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZVxcbisgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvclxcbisgKiBmdXR1cmUgaW1wb3J0ZXJzLlxcbisgKlxcbisgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cXG4rICpcXG4rICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby5cXG4rICpcXG4rICogVXNlcnNwYWNlIG11c3QgY29uZmlndXJlIFRQSCBiZWZvcmUgaGFuZGluZyB0aGUgZG1hLWJ1ZiBmZCB0byBhblxcbisgKiBpbXBvcnRlci5cXG4rICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxM1xcbitcXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDEpXFxuK1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XFxuK1xcdF9fczMyXFx0ZG1hYnVmX2ZkO1xcbitcXHRfX3UzMlxcdGZsYWdzO1xcbitcXHRfX3UxNlxcdHN0ZWVyaW5nX3RhZ19leHQ7XFxuK1xcdF9fdThcXHRzdGVlcmluZ190YWc7XFxuK1xcdF9fdThcXHRwaDtcXG4rfTtcXG4rXFxuIC8qIC0tLS0tLS0tIEFQSSBmb3IgVHlwZTEgVkZJTyBJT01NVSAtLS0tLS0tLSAqL1xcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM1OjU3Ljk3MDIzNTAwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwNjQ4MjU0NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgbWV0YWRhdGEgcmV0cmlldmFsIGZyb20gRE1BIGJ1ZmZlcnMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBtbHg1YCBkcml2ZXIgKE1lbGxhbm94IENvbm5lY3RYKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIGluIGB2ZmlvLXBjaWAgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaW9jdGwuIFRoZSBWRklPIGlvY3RsIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gdGhlIHVuZGVybHlpbmcgUENJIGRldmljZSdzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQyNGQ0YWM0YjYxYzdmNzIwZjVhZTNkM2ZmYTAzNDYzZjE0NzMyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDY6MzU6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuaW5kZXggZDUwNGM2MzZkYzI5NC4uNzFmMzM1NDQyYmE3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbkBAIC05MzksNiArOTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKVxuICAqICAgICAtIGRtYV9idWZfdm1hcCgpXG4gICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKVxuKyAqICAgICAtIGRtYV9idWZfZ2V0X3BjaV90cGgoKVxuICAqXG4gICogMi4gSW1wb3J0ZXJzIG11c3Qgbm90IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcbiAgKiAgICBmdW5jdGlvbnM6XG5AQCAtOTc5LDYgKzk4MCw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudW5tYXBfZG1hX2J1ZigpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudm1hcCgpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudnVubWFwKClcbisgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXG4gICogICAgZnVuY3Rpb25zOlxuQEAgLTExNDQsNiArMTE0NiwzNiBAQCB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxuIH1cbiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCBcIkRNQV9CVUZcIik7XG4gXG4rLyoqXG4rICogZG1hX2J1Zl9nZXRfcGNpX3RwaCAtIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBtZXRhZGF0YVxuKyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcbisgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUXG4rICogQHN0ZWVyaW5nX3RhZzogcmV0dXJucyB0aGUgcmF3IHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2VcbisgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcbisgKlxuKyAqIFdyYXBwZXIgZm9yIHRoZSBvcHRpb25hbCBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cbisgKlxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlXG4rICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZVxuKyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuXG4rICpcbisgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlXG4rICogZXhwb3J0ZXIgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbWFwcGluZyAoc2lnbmFsbGVkIHRvIHRoZSBpbXBvcnRlciB2aWFcbisgKiBcdTAwMjZkbWFfYnVmX2F0dGFjaF9vcHMuaW52YWxpZGF0ZV9tYXBwaW5ncykuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XG4rICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLlxuKyAqL1xuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbit7XG4rXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCBcIkRNQV9CVUZcIik7XG4rXG4gLyoqXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xuICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbmluZGV4IDAyODA5MTE0ZmM3OWEuLmEyYjQ5N2Y2YjE2YmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuQEAgLTYwLDYgKzYwLDcgQEBcbiBNT0RVTEVfQVVUSE9SKFwiRWxpIENvaGVuIFx1MDAzY2VsaUBtZWxsYW5veC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJEdWFsIEJTRC9HUExcIik7XG4rTU9EVUxFX0lNUE9SVF9OUyhcIkRNQV9CVUZcIik7XG4gXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG5pbmRleCA1MjI5ODRkOTU4YmJmLi5jNmE5NTZiMmVlODdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tbHg1X2liLmhcbkBAIC02NDYsNiArNjQ2LDE1IEBAIGVudW0gbWx4NV9ta2V5X3R5cGUge1xuIC8qIFVzZWQgZm9yIG5vbi1leGlzdGVudCBwaCB2YWx1ZSAqL1xuICNkZWZpbmUgTUxYNV9JQl9OT19QSCAweGZmXG4gXG4rc3RydWN0IGRtYV9idWY7XG4rXG4rc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCB7XG4rXHR1MTYgc3RlZXJpbmdfdGFnO1xuK1x0dTggcGg7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0Ym9vbCB2YWxpZDtcbit9O1xuK1xuIHN0cnVjdCBtbHg1X2liX21rZXkge1xuIFx0dTMyIGtleTtcbiBcdGVudW0gbWx4NV9ta2V5X3R5cGUgdHlwZTtcbkBAIC03MjYsNiArNzM1LDcgQEAgc3RydWN0IG1seDVfaWJfbXIge1xuIFx0XHRcdHU4IHJldm9rZWQgOjE7XG4gXHRcdFx0LyogSW5kaWNhdGVzIHByZXZpb3VzIGRtYWJ1ZiBwYWdlIGZhdWx0IG9jY3VycmVkICovXG4gXHRcdFx0dTggZG1hYnVmX2ZhdWx0ZWQ6MTtcbitcdFx0XHRzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoIGRtYWJ1Zl90cGg7XG4gXHRcdFx0c3RydWN0IG1seDVfaWJfbWtleSBudWxsX21ta2V5O1xuIFx0XHR9O1xuIFx0fTtcbkBAIC0xMzQxLDYgKzEzNTEsNyBAQCBzdHJ1Y3QgaWJfbXIgKm1seDVfaWJfcmVyZWdfdXNlcl9tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBpbnQgZmxhZ3MsIHU2NCBzdGFydCxcbiBcdFx0XHRcdCAgICB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLCBpbnQgYWNjZXNzX2ZsYWdzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xuIGludCBtbHg1X2liX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJtciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7XG4raW50IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYpO1xuIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9hbGxvY19tcihzdHJ1Y3QgaWJfcGQgKnBkLCBlbnVtIGliX21yX3R5cGUgbXJfdHlwZSxcbiBcdFx0XHQgICAgICAgdTMyIG1heF9udW1fc2cpO1xuIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9hbGxvY19tcl9pbnRlZ3JpdHkoc3RydWN0IGliX3BkICpwZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuaW5kZXggZTZiNzQ5NTVkOTVkYy4uNDA0YzVkMDgxYjhhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbkBAIC0zOSw2ICszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZG0uaFwiXG5AQCAtMTY3LDYgKzE2OCw2MSBAQCBzdGF0aWMgaW50IGdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyBHRU5NQVNLX1VMTCgyMywgMTYpXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxuIFxuK3N0YXRpYyB1OCBtbHg1X2liX3RwaF9rZXlfcGgodTggcGgpXG4re1xuK1x0aWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMClcbitcdFx0cGggXj0gTUxYNV9JQl9OT19QSDtcbitcbitcdHJldHVybiBwaDtcbit9XG4rXG4rc3RhdGljIGludCBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4re1xuK1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gbWx4NV9zdF9nZXRfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4re1xuK1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWx4NV9zdF9kZWFsbG9jX2luZGV4KGRldi1cdTAwM2VtZGV2LCBzdF9pbmRleCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXG4rXHRcdFx0XHQgICAgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXG4re1xuK1x0dTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssXG4rXHRcdFx0XHQga2VybmVsX3ZlbmRvcl9rZXkpO1xuK1xuK1x0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuK31cbitcbitpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zilcbit7XG4rXHRzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoICp0cGggPSBcdTAwMjZtci1cdTAwM2VkbWFidWZfdHBoO1xuK1x0dTE2IHN0ZWVyaW5nX3RhZztcbitcdHU4IHBoO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdHBoLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCB0cGgtXHUwMDNlZXh0ZW5kZWQsIFx1MDAyNnN0ZWVyaW5nX3RhZywgXHUwMDI2cGgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoc3RlZXJpbmdfdGFnICE9IHRwaC1cdTAwM2VzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLVx1MDAzZXBoKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxuIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdCAgICAgIGludCBhY2Nlc3NfZmxhZ3MsIGludCBhY2Nlc3NfbW9kZSxcbkBAIC0xODksMTMgKzI0NSwxMCBAQCBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRcdE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0sgOlxuIFx0XHRcdDA7XG4gXG4tXHQvKiBOb3JtYWxpemUgcGg6IHN3YXAgMCBhbmQgTUxYNV9JQl9OT19QSCAqL1xuLVx0aWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMClcbi1cdFx0cGggXj0gTUxYNV9JQl9OT19QSDtcbi1cbiBcdG1yLVx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxuIFx0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4tXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xuK1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0ssXG4rXHRcdFx0ICAgbWx4NV9pYl90cGhfa2V5X3BoKHBoKSk7XG4gXHRlcnIgPSBpYl9mcm1yX3Bvb2xfcG9wKFx1MDAyNmRldi1cdTAwM2VpYl9kZXYsIFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFx0aWYgKGVycikge1xuIFx0XHRrZnJlZShtcik7XG5AQCAtMjE4LDcgKzI3MSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgMCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLFxuIFx0XHQubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsXG4tXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqL1xuK1x0XHQua2VybmVsX3ZlbmRvcl9rZXkgPVxuK1x0XHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyxcbitcdFx0XHRcdCAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksXG4gXHR9O1xuIFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xuIFx0aW50IHJldDtcbkBAIC01NTcsNiArNjEyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqcmVnX2NyZWF0ZShzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdG1yLVx1MDAzZWlibXIucGQgPSBwZDtcbiBcdG1yLVx1MDAzZWFjY2Vzc19mbGFncyA9IGFjY2Vzc19mbGFncztcbiBcdG1yLVx1MDAzZXBhZ2Vfc2hpZnQgPSBvcmRlcl9iYXNlXzIocGFnZV9zaXplKTtcbitcdG1yLVx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxuK1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4rXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyxcbitcdFx0XHQgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTtcbiBcbiBcdGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfbWtleV9pbik7XG4gXHRpZiAocG9wdWxhdGUpXG5AQCAtNzUzLDYgKzgxMiwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdFx0XHRzdF9pbmRleCA9IG1kbWFoLVx1MDAzZXN0X2luZGV4O1xuIFx0fVxuIFxuK1x0ZXJyID0gbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0fVxuK1xuIFx0eGx0X3dpdGhfdW1yID0gbWx4NXJfdW1yX2Nhbl9sb2FkX3BhcyhkZXYsIHVtZW0tXHUwMDNlbGVuZ3RoKTtcbiBcdGlmICh4bHRfd2l0aF91bXIpIHtcbiBcdFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncyxcbkBAIC03NjksNiArODM0LDcgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlc2xvd19wYXRoX211dGV4KTtcbiBcdH1cbiBcdGlmIChJU19FUlIobXIpKSB7XG4rXHRcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiBcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1QobXIpO1xuIFx0fVxuQEAgLTkwMyw2ICs5NjksNjMgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIGdldF9wY2lfdHBoX21yX2RtYWJ1ZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbitcdFx0XHRcdCAgc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCAqdHBoLFxuK1x0XHRcdFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXG4re1xuK1x0dTE2IGxvY2FsX3N0X2luZGV4O1xuK1x0dTE2IHN0ZWVyaW5nX3RhZztcbitcdHU4IGxvY2FsX3BoO1xuK1x0Ym9vbCBleHRlbmRlZDtcbitcdGludCByZXQ7XG4rXG4rXHRzd2l0Y2ggKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoZGV2LVx1MDAzZW1kZXYtXHUwMDNlcGRldikpIHtcbitcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XG4rXHRcdGV4dGVuZGVkID0gZmFsc2U7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOlxuK1x0XHRleHRlbmRlZCA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIGRtYV9idWZfZ2V0X3BjaV90cGgoKSBtdXN0IHJ1biB1bmRlciBkbWFidWYtXHUwMDNlcmVzdiwgYnV0IGRyb3AgdGhlIGxvY2tcbitcdCAqIGJlZm9yZSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZygpOiB0aGF0IGFsbG9jYXRlcyB3aXRoIEdGUF9LRVJORUwsXG4rXHQgKiB3aGljaCBtdXN0IG5vdCBydW4gdW5kZXIgZG1hYnVmLVx1MDAzZXJlc3Ygc2luY2UgcmVjbGFpbSBjYW4gcmUtZW50ZXIgdGhlXG4rXHQgKiBzYW1lIHJlc2VydmF0aW9uIG9iamVjdCB0aHJvdWdoIGEgZHluYW1pYyBleHBvcnRlcidzIG1vdmVfbm90aWZ5IHBhdGguXG4rXHQgKi9cbitcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBcdTAwMjZzdGVlcmluZ190YWcsIFx1MDAyNmxvY2FsX3BoKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXG4rXHRcdFx0bWx4NV9pYl9kYmcoZGV2LCBcImdldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldi1cdTAwM2VtZGV2LCBzdGVlcmluZ190YWcsXG4rXHRcdFx0XHRcdCBcdTAwMjZsb2NhbF9zdF9pbmRleCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1seDVfaWJfZGJnKGRldiwgXCJzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0KnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7XG4rXHQqcGggPSBsb2NhbF9waDtcbitcdHRwaC1cdTAwM2VzdGVlcmluZ190YWcgPSBzdGVlcmluZ190YWc7XG4rXHR0cGgtXHUwMDNlcGggPSBsb2NhbF9waDtcbitcdHRwaC1cdTAwM2VleHRlbmRlZCA9IGV4dGVuZGVkO1xuK1x0dHBoLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4re1xuK1x0bWx4NV9pYl9wdXRfc3RfaGFuZGxlX3JlZihtcl90b19tZGV2KG1yKSxcbitcdFx0XHRcdCAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKlxuIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxuIFx0XHQgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLFxuQEAgLTkxMyw2ICsxMDM2LDcgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtXHUwMDNlZGV2aWNlKTtcbiBcdHN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWJfdW1lbV9kbWFidWYgKnVtZW1fZG1hYnVmO1xuK1x0c3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCB0cGggPSB7fTtcbiBcdHUxNiBzdF9pbmRleCA9IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWDtcbiBcdHU4IHBoID0gTUxYNV9JQl9OT19QSDtcbiBcdGludCBlcnI7XG5AQCAtOTQ1LDE4ICsxMDY5LDI5IEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxuIFx0XHRwaCA9IGRtYWgtXHUwMDNlcGg7XG4gXHRcdGlmIChkbWFoLVx1MDAzZXZhbGlkX2ZpZWxkcyBcdTAwMjYgQklUKElCX0RNQUhfQ1BVX0lEX0VYSVNUUykpXG4gXHRcdFx0c3RfaW5kZXggPSBtZG1haC1cdTAwM2VzdF9pbmRleDtcbitcbitcdFx0ZXJyID0gbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi1cdTAwM2VhdHRhY2gtXHUwMDNlZG1hYnVmLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2dHBoLCBcdTAwMjZzdF9pbmRleCwgXHUwMDI2cGgpO1xuIFx0fVxuIFxuIFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIFx1MDAyNnVtZW1fZG1hYnVmLVx1MDAzZXVtZW0sIHZpcnRfYWRkcixcbiBcdFx0XHRcdGFjY2Vzc19mbGFncywgYWNjZXNzX21vZGUsXG4gXHRcdFx0XHRzdF9pbmRleCwgcGgpO1xuIFx0aWYgKElTX0VSUihtcikpIHtcbitcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG4gXG4gXHRtbHg1X2liX2RiZyhkZXYsIFwibWtleSAweCV4XFxuXCIsIG1yLVx1MDAzZW1ta2V5LmtleSk7XG4gXG4rXHRtci1cdTAwM2VkbWFidWZfdHBoID0gdHBoO1xuIFx0YXRvbWljX2FkZChpYl91bWVtX251bV9wYWdlcyhtci1cdTAwM2V1bWVtKSwgXHUwMDI2ZGV2LVx1MDAzZW1kZXYtXHUwMDNlcHJpdi5yZWdfcGFnZXMpO1xuIFx0dW1lbV9kbWFidWYtXHUwMDNlcHJpdmF0ZSA9IG1yO1xuIFx0aWYgKCFwaW5uZWRfbW9kZSkge1xuQEAgLTE0MDUsNiArMTU0MCw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wpIHtcbiBcdFx0aWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkge1xuIFx0XHRcdGliX2ZybXJfcG9vbF9wdXNoKG1yLVx1MDAzZWlibXIuZGV2aWNlLCBcdTAwMjZtci1cdTAwM2VpYm1yKTtcbitcdFx0XHRtbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKG1yKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0fVxuQEAgLTE0MzIsNiArMTU2OCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wgXHUwMDI2XHUwMDI2ICFyZXQpXG4gXHRcdGliX2ZybXJfcG9vbF9kcm9wKFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFxuK1x0aWYgKCFyZXQpXG4rXHRcdG1seDVfaWJfbXJfcHV0X3N0X2hhbmRsZV9yZWYobXIpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuaW5kZXggMWJhZGVjOWJmNTI3MC4uN2MxNzMxYWEzZGQ5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuQEAgLTg1Nyw2ICs4NTcsMTMgQEAgc3RhdGljIGludCBwYWdlZmF1bHRfZG1hYnVmX21yKHN0cnVjdCBtbHg1X2liX21yICptciwgc2l6ZV90IGJjbnQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4rXHRlcnIgPSBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgobXIsIHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpYl91bWVtX2RtYWJ1Zl91bm1hcF9wYWdlcyh1bWVtX2RtYWJ1Zik7XG4rXHRcdGRtYV9yZXN2X3VubG9jayh1bWVtX2RtYWJ1Zi1cdTAwM2VhdHRhY2gtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuIFx0cGFnZV9zaXplID0gbWx4NV91bWVtX2RtYWJ1Zl9maW5kX2Jlc3RfcGdzeih1bWVtX2RtYWJ1ZiwgYWNjZXNzX21vZGUpO1xuIFx0aWYgKCFwYWdlX3NpemUpIHtcbiBcdFx0aWJfdW1lbV9kbWFidWZfdW5tYXBfcGFnZXModW1lbV9kbWFidWYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuaW5kZXggN2NlZGMzNDg3OTBkYi4uYzYyYmNhZTdjNTQyMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG5AQCAtOTIsMjMgKzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRrZnJlZShzdCk7XG4gfVxuIFxuLWludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuLVx0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLFxuK1x0XHRcdCAgICAgICB1MTYgKnN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbiBcdHN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi1cdTAwM2VzdDtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXHR1MzIgeGFfaWQ7XG4tXHR1MTYgdGFnO1xuLVx0aW50IHJldDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKCFzdClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKHN0LVx1MDAzZWRpcmVjdF9tb2RlKSB7XG4gXHRcdCpzdF9pbmRleCA9IHRhZztcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTUyLDggKzE0Nyw0OSBAQCBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKTtcbitcbitpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbit7XG4rXHR1MTYgdGFnO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZGV2LVx1MDAzZXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi1cdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXHUwMDI2dGFnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LCB0YWcsIHN0X2luZGV4KTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleCk7XG4gXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbit7XG4rXHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG4rXHRzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtXHUwMDNlc3Q7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghc3QpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChzdC1cdTAwM2VkaXJlY3RfbW9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuK1x0aWR4X2RhdGEgPSB4YV9sb2FkKFx1MDAyNnN0LVx1MDAzZWlkeF94YSwgc3RfaW5kZXgpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0ZWxzZVxuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWR4X2RhdGEtXHUwMDNldXNlY291bnQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9nZXRfaW5kZXgpO1xuK1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2Li5kMDIwMmZmN2ExYjI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMjAwLDYgKzIwMCw3IEBAIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUpO1xuIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHBjaV9kZXYgKnJwO1xuK1x0dTggdHBoX2NvbXA7XG4gXHR1MzIgcmVnO1xuIFx0aW50IHJldDtcbiBcbkBAIC0yMTEsOCArMjEyLDYwIEBAIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4rXHQvKlxuK1x0ICogMGIxMCBpcyByZXNlcnZlZDsgdHJlYXQgaXQgYXMgXCJub3Qgc3VwcG9ydGVkXCIgc28gb25seSB0aGVcbitcdCAqIGFyY2hpdGVjdGVkIGVuY29kaW5ncyByZWFjaCB0aGUgUmVxdWVzdGVyIEVuYWJsZSBmaWVsZC5cbitcdCAqL1xuK1x0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4rXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XG4rXHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4rXHRcdHJldHVybiB0cGhfY29tcDtcbitcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbit9XG4rXG4rLyoqXG4rICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJ3MgZW5hYmxlZCBUUEggcmVxdWVzdGVyIHR5cGVcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuKyAqXG4rICogUmV0dXJuOiBQQ0lfVFBIX1JFUV9ESVNBQkxFLCBQQ0lfVFBIX1JFUV9UUEhfT05MWSBvciBQQ0lfVFBIX1JFUV9FWFRfVFBILlxuKyAqL1xuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0cmV0dXJuIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlO1xuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xuK1xuKy8qKlxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuKyAqXG4rICogUmVhZHMgdGhlIFwiVFBIIENvbXBsZXRlciBTdXBwb3J0ZWRcIiBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlXG4rICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvXG4rICogXCJub3Qgc3VwcG9ydGVkXCIgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZVxuKyAqIGRlZmluZWQgdmFsdWVzLlxuKyAqXG4rICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxuKyAqL1xuK3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHU4IHRwaF9jb21wO1xuK1x0dTMyIHJlZztcbitcbitcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4rXHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbitcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1xuK1x0LyogMGIxMCBpcyByZXNlcnZlZDsgZm9sZCBpdCBpbnRvIFwibm90IHN1cHBvcnRlZFwiIChzZWUgYWJvdmUpLiAqL1xuK1x0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4rXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XG4rXHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4rXHRcdHJldHVybiB0cGhfY29tcDtcbitcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiB9XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XG4gXG4gLyogV3JpdGUgdGFnIHRvIFNUIHRhYmxlIC0gUmV0dXJuIDAgaWYgT0ssIG90aGVyd2lzZSAtZXJybm8gKi9cbiBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IDNmMTFhOTYyNGI5YzAuLjRlNWUzNGE3N2I3NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xNjI1LDYgKzE2MjUsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcbitcdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggYzE2ZjQ2MGMwMWQ2OC4uZjYzMDE1ODIwNGI0ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbkBAIC0zLDYgKzMsNyBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidmZpb19wY2lfcHJpdi5oXCJcbkBAIC0xOSw3ICsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbitcbitcdC8qXG4rXHQgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XG4rXHQgKiBwcm90ZWN0ZWQgYnkgbWVtb3J5X2xvY2suXG4rXHQgKi9cbitcdHUxNiB0cGhfc3RfZXh0O1xuK1x0dTggdHBoX3N0O1xuK1x0Ym9vbCByZXZva2VkO1xuK1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfc3RfZXh0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfcGg6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC0zMCw3ICs0MSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdGlmICghYXR0YWNobWVudC1cdTAwM2VwZWVyMnBlZXIpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXJldm9rZWQpXG4rXHRpZiAoUkVBRF9PTkNFKHByaXYtXHUwMDNlcmV2b2tlZCkpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXG5AQCAtNjksNiArODAsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxuK3tcbitcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4rXG4rXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRpZiAoZXh0ZW5kZWQpIHtcbitcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHQqc3RlZXJpbmdfdGFnID0gcHJpdi1cdTAwM2V0cGhfc3RfZXh0O1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF92YWxpZClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdDtcbitcdH1cbitcdCpwaCA9IHByaXYtXHUwMDNldHBoX3BoO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBzZ190YWJsZSAqc2d0LFxuIFx0XHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuQEAgLTEwMSw2ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsXG4rXHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxuIFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXG4gXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbkBAIC0zMzMsNiArMzY1LDg2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggc2V0X3RwaDtcbitcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuK1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbitcdHU4IGNvbXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuK1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGlmIChzZXRfdHBoLmZsYWdzIFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHNldF90cGgucGggXHUwMDI2IH4weDMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKChzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9wdXQ7XG4rXHR9XG4rXG4rXHRwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4rXG4rXHQvKlxuK1x0ICogQHJldm9rZWQgYW5kIHRoZSBkbWEtYnVmL3ZkZXYgYXNzb2NpYXRpb24gYXJlIHRvcm4gZG93biB1bmRlclxuK1x0ICogbWVtb3J5X2xvY2sgYnkgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCk7IGhvbGQgaXQgd2hpbGUgdmFsaWRhdGluZ1xuK1x0ICogb3duZXJzaGlwIGFuZCBwdWJsaXNoaW5nIHNvIHRoZSBkbWEtYnVmIGNhbm5vdCBiZSBkaXNhc3NvY2lhdGVkIGZyb21cbitcdCAqIEB2ZGV2IHVuZGVybmVhdGggdXMuIExvY2sgb3JkZXIgbWVtb3J5X2xvY2sgLVx1MDAzZSBkbWFidWYtXHUwMDNlcmVzdiBtYXRjaGVzXG4rXHQgKiB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoKS5cbitcdCAqL1xuK1x0ZG93bl9yZWFkKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNldmRldiAhPSB2ZGV2KSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3VubG9ja19tZW07XG4rXHR9XG4rXG4rXHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfdW5sb2NrX21lbTtcbitcbitcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XG4rXHRwcml2LVx1MDAzZXRwaF9waCAgICAgICAgID0gc2V0X3RwaC5waDtcbitcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XG4rXHRcdCEhKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRyZXQgPSAwO1xuK1xuK291dF91bmxvY2tfbWVtOlxuK1x0dXBfcmVhZChcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbitvdXRfcHV0OlxuK1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuQEAgLTM0Nyw3ICs0NTksNyBAQCB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbiBcdFx0aWYgKHByaXYtXHUwMDNlcmV2b2tlZCAhPSByZXZva2VkKSB7XG4gXHRcdFx0ZG1hX3Jlc3ZfbG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiBcdFx0XHRpZiAocmV2b2tlZClcbi1cdFx0XHRcdHByaXYtXHUwMDNlcmV2b2tlZCA9IHRydWU7XG4rXHRcdFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcmV2b2tlZCwgdHJ1ZSk7XG4gXHRcdFx0ZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHByaXYtXHUwMDNlZG1hYnVmKTtcbiBcdFx0XHRkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdixcbiBcdFx0XHRcdFx0ICAgICAgRE1BX1JFU1ZfVVNBR0VfQk9PS0tFRVAsIGZhbHNlLFxuQEAgLTM2OSw3ICs0ODEsNyBAQCB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbiBcdFx0XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSBmYWxzZTtcbitcdFx0XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VyZXZva2VkLCBmYWxzZSk7XG4gXHRcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZi4uMDYzZjM3NDg0NzhhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuQEAgLTExOCw2ICsxMTgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4gI2Vsc2VcbkBAIC0xMjgsNiArMTMyLDE1IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgIHNpemVfdCBhcmdzeilcbit7XG4rXHRyZXR1cm4gLUVOT1RUWTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5pbmRleCBkMTIwM2RhNTZmYzVmLi4xNGU4ZWI2MWE2MmMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5AQCAtMTEzLDYgKzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xuIFx0ICovXG4gXHR2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gXG4rXHQvKipcbitcdCAqIEBnZXRfcGNpX3RwaDpcbitcdCAqXG4rXHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4rXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cbitcdCAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS5cbitcdCAqXG4rXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcbitcdCAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbitcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4rXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcbitcdCAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpXG4rXHQgKlxuK1x0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcbitcdCAqIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXG4rXHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbitcdCAqXG4rXHQgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvclxuK1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxuK1x0ICovXG4rXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbitcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiArNTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuaW5kZXggYjE4NzFjMDgyMWQwYi4uZDI2ZTU3NDRjODQzYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXG5AQCAtMTE4MiwxNiArMTE4MiwzMSBAQCBpbnQgbWx4NV9kbV9zd19pY21fZGVhbGxvYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIG1seDVfc3dfaWNtX3R5cGUgdHlwZVxuIFx0XHRcdCAgIHU2NCBsZW5ndGgsIHUxNiB1aWQsIHBoeXNfYWRkcl90IGFkZHIsIHUzMiBvYmpfaWQpO1xuIFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbitcdFx0XHQgICAgICAgdTE2ICpzdF9pbmRleCk7XG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpO1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiAjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgICAgdTE2IHRhZywgdTE2ICpzdF9pbmRleClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXG4ge1xuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbitcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzLi43NzQzYWY2ZmU0MzI2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5AQCAtOSw2ICs5LDggQEBcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVxuK1xuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuICAqIGRlcGVuZGluZyBvbiB0aGUgbWVtb3J5IHR5cGU6IFZvbGF0aWxlIE1lbW9yeSBvciBQZXJzaXN0ZW50IE1lbW9yeS4gV2hlbiBhXG5AQCAtMzAsNiArMzIsOCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbkBAIC00MSw2ICs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZS4uNGMxYzcwYWFjMTUwOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbkBAIC0xNTM0LDYgKzE1MzQsNDkgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbisvKipcbisgKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIGFzc29jaWF0ZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YVxuKyAqIHdpdGggYSB2ZmlvLWV4cG9ydGVkIGRtYS1idWYuIFRoZSBkbWEtYnVmIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnlcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XG4rICogVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIERldmljZSBDYXBhYmlsaXRpZXMgMiAoYml0cyAxMzoxMik7IHJlcXVlc3RzXG4rICogY2FycnlpbmcgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgYWRkaXRpb25hbGx5IHJlcXVpcmUgdGhlIGRldmljZSB0b1xuKyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxuKyAqIHJldHVybnMgLUVPUE5PVFNVUFAuXG4rICpcbisgKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxuKyAqXG4rICogOC1iaXQgU1QgKEBzdGVlcmluZ190YWcpIGFuZCAxNi1iaXQgRXh0ZW5kZWQgU1QgKEBzdGVlcmluZ190YWdfZXh0KSBhcmVcbisgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBAZmxhZ3MgaXMgdGhlIGF1dGhvcml0YXRpdmUgdmFsaWRpdHkgbWFzayBmb3IgdGhlXG4rICogdHdvIG5hbWVzcGFjZXM6IFZGSU9fRE1BX0JVRl9UUEhfU1QgbWFya3MgQHN0ZWVyaW5nX3RhZyB2YWxpZCBhbmRcbisgKiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBtYXJrcyBAc3RlZXJpbmdfdGFnX2V4dCB2YWxpZC4gQW4gaW1wb3J0ZXJcbisgKiByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXG4rICpcbisgKiBFYWNoIFNFVCBmdWxseSByZXBsYWNlcyB0aGUgZG1hLWJ1ZidzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXNcbisgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZFxuKyAqIHRvIGZ1dHVyZSBpbXBvcnRlcnM7IGFuIGltcG9ydGVyIHRoYXQgaGFzIGFscmVhZHkgcmV0cmlldmVkIGEgdmFsdWVcbisgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvclxuKyAqIGZ1dHVyZSBpbXBvcnRlcnMuXG4rICpcbisgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbisgKlxuKyAqIFVuZGVmaW5lZCBAZmxhZ3MgYW5kIEBwaCBiaXRzIG11c3QgYWx3YXlzIGJlIHplcm8uXG4rICpcbisgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuXG4rICogaW1wb3J0ZXIuXG4rICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG4rXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcdFx0KDEgXHUwMDNjXHUwMDNjIDEpXG4rXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGgge1xuK1x0X19zMzJcdGRtYWJ1Zl9mZDtcbitcdF9fdTMyXHRmbGFncztcbitcdF9fdTE2XHRzdGVlcmluZ190YWdfZXh0O1xuK1x0X191OFx0c3RlZXJpbmdfdGFnO1xuK1x0X191OFx0cGg7XG4rfTtcbitcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM1OjU3Ljk3MDIzNjk2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzA1NDMxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgbGlzdCBvZiBtb2RpZmllZCBmaWxlcyBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogYGRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNgLCB0aGUgbWx4NSBpbmZpbmliYW5kIHN0dWZmLCBgZHJpdmVycy9wY2kvdHBoLmNgLCBhbmQgc2V2ZXJhbCBWRklPIGZpbGVzIChgdmZpb19wY2lfY29yZS5jYCwgYHZmaW9fcGNpX2RtYWJ1Zi5jYCwgZXRjLiksIHBsdXMgcmVsZXZhbnQgaGVhZGVycy4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGludHJvZHVjaW5nIGEgYGdldF9wY2lfdHBoYCBkbWEtYnVmIG9wZXJhdGlvbiB0byByZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgbWV0YWRhdGEuIEEgbmV3IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpcyBhZGRlZCB0byBzZXQgdGhpcyBtZXRhZGF0YSBvbiBhIFZGSU8gZXhwb3J0ZWQgZG1hLWJ1ZiwgYW5kIGl0IGxvb2tzIGxpa2UgbWx4NSBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMuXG5cbk5vdywgd2FpdCBhIHNlY29uZC4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgbWVudGlvbiBzb21lIGV4ZW1wdGlvbnMuIFwiQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIgLSB0aGF0J3MgdGhlIGNsYXVzZSBJIG5lZWQgdG8gY29uc2lkZXIuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBtbHg1IGZpdHMgdGhpcyBkZXNjcmlwdGlvbiwgcmlnaHQ/IFRoYXQgY291bGQgYmUgYSBxdWljayBvdXQsIGJ1dCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG5CdXQgd2FpdC4gVGhpcyBwYXRjaCBpcyBicm9hZGVyIHRoYW4gKmp1c3QqIG1seDUuIEl0IG1vZGlmaWVzIGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCwgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYCDigJMgYW5kIGNydWNpYWxseSwgVkZJTyBjYW4gYmUgcmVhY2hlZCBpbiBRRU1VLCByaWdodD8gV2UgaGF2ZSB2ZmlvLXBjaSB3aGljaCBjYW4gcHJlc2VudCByZWFsIGRldmljZXMsIGJ1dCBteSBtZW1vcnkgaXMsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gY29uZmlybSwgYnV0IHN5emthbGxlciBoYXMgc29tZSBWRklPIGRlc2NyaXB0aW9ucy4gVGhpcyBpcyB0aGUgYW5nbGUgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBJcyBWRklPIGZ1enphYmxlPyBUaGUgYW5zd2VyIHNob3VsZCBiZSB5ZXMuIFN5emthbGxlciBoYXMgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgVkZJTyBzdHVmZiwgd2hpY2ggaXMgcHJvbWlzaW5nLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzIGlmIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGlzIHJlYWNoYWJsZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGguIE9rYXksIGl0J3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIFdpdGggdGhlIFZGSU8gcGF0aCBvcGVuLCB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzY6MDcuOTQwNzgyMzEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTUxMDQ0NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MTA9aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOC1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyOTpcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYzMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnc3opO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zNjctXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNjg6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zNjktXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTE4PWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMC1cXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTIxOmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMi1cXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMzY9c3RhdGljIGlubGluZSBpbnRcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaDoxMzc6dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEzOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozNjowOS42MzU4OTIzNjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0ODY2OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgdmZpby1wY2kgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGgsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgbmV3IGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVhY2hhYmlsaXR5IG9mIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgLiBJcyB0aGlzIGEgbmV3IGVudHJ5IHBvaW50LCBvciBhIGZ1bmN0aW9uIHRoYXQncyBhbHJlYWR5IHdlbGwtdHJvZGRlbj8gS25vd2luZyB0aGUgYW5zd2VyIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUsIGFuZCB0aGVyZWZvcmUgYWxzbyBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgdGVzdGluZyByZWdpbWUgcmVxdWlyZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgb3RoZXIgZW50cnkgcG9pbnRzIGludm9rZSB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjEzLjI0MDc2MjcyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzMTAwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE1ODE9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgaGlzaV9hY2NfdmZpb19wY2lfbWlncm5fb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTg4LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IGhpc2lfYWNjX3ZmaW9faW9jdGxfZ2V0X3JlZ2lvbixcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE1ODk6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTU5MC1cXHQucmVhZCA9IGhpc2lfYWNjX3ZmaW9fcGNpX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE2MDI9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgaGlzaV9hY2NfdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjA5LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE2MTA6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYxMS1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYz0zMzU9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgaXNtX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQyLVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IGlzbV92ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM0MzpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jLTM0NC1cXHQucmVhZCA9IGlzbV92ZmlvX3BjaV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYz0xMzg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG1seDV2Zl9wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzkzLVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jOjEzOTQ6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM5NS1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwNjQ9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbnZncmFjZV9ncHVfcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNzEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gbnZncmFjZV9ncHVfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwNzI6XFx0LmRldmljZV9mZWF0dXJlXFx0PSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3My1cXHQucmVhZFxcdFxcdD0gbnZncmFjZV9ncHVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwODk9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbnZncmFjZV9ncHVfcGNpX2NvcmVfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA5Ni1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA5NzpcXHQuZGV2aWNlX2ZlYXR1cmVcXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk4LVxcdC5yZWFkXFx0XFx0PSB2ZmlvX3BjaV9jb3JlX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jPTE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBwZHNfdmZpb19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE5OC1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYzoxOTk6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMjAwLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE0OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTU2LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTU3OlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTU4LVxcdC5yZWFkXFx0XFx0PSB2ZmlvX3BjaV9jb3JlX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTgzPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MDktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYxMDppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxMS1cXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjM0LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjM1OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYzNi1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9sbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo5MjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkzLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV90cmFuX2xtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTMtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmlydGlvdmZfcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTE0OlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTE1LVxcdC5yZWFkID0gdmlydGlvdmZfcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNS1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjEzNjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNy1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTUyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB4ZV92ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MjktXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjUzMDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTMxLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTc0PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzUtXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjE3NjppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc3LVxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjE0Ljk1Mzg3MDQzOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDg5MDE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkZJTyBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgIGZ1bmN0aW9uIGFuZCBzZWVpbmcgdGhhdCBpdCdzIGFjdHVhbGx5IGludGVncmF0ZWQgYXMgdGhlIGAuZGV2aWNlX2ZlYXR1cmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHZmaW9fcGNpX29wc2Agc3RydWN0dXJlLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLCByZWFjaGFibGUgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGEgVkZJTyBkZXZpY2UgZmlsZSBkZXNjcmlwdG9yLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGNhbiB0aGlzIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBgc3l6X2t2bV9zZXR1cF9jcHVgLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwsIGJ1dCB0aGVyZSBpcyBhbHNvIGEgYHN5cy9saW51eC92ZmlvLnR4dGAgZmlsZSB0aGF0IGV4cGxpY2l0bHkgZGVzY3JpYmVzIFZGSU8gaW9jdGxzLiBJIHNob3VsZCBjaGVjayBpZiBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaXMgZXZlbiB0YXJnZXRlZCBieSBzeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzQwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjE4Ljc2Mjc3NDU3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgwMDA3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZGSU9fREVWSUNFX0ZFQVRVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL2NkeC9tYWluLmM9ODQ9c3RhdGljIGludCB2ZmlvX2NkeF9ibV9jdHJsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05Ny1cXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYzo5ODpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05OS1cXHRcXHRcXHRcXHQgc2l6ZW9mKG9wcykpO1xcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTA2LVxcdHN3aXRjaCAob3BzLm9wKSB7XFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM6MTA3OlxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9DTEVBUl9NQVNURVI6XFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTA4LVxcdFxcdHJldHVybiBjZHhfY2xlYXJfbWFzdGVyKGNkeF9kZXYpO1xcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjEwOTpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUX01BU1RFUjpcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMTAtXFx0XFx0cmV0dXJuIGNkeF9zZXRfbWFzdGVyKGNkeF9kZXYpO1xcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM9MTE2PXN0YXRpYyBpbnQgdmZpb19jZHhfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTE4LXtcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYzoxMTk6XFx0c3dpdGNoIChmbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSykge1xcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjEyMDpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfQlVTX01BU1RFUjpcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMjEtXFx0XFx0cmV0dXJuIHZmaW9fY2R4X2JtX2N0cmwoZGV2aWNlLCBmbGFncywgYXJnLCBhcmdzeik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTQ1OT1zdGF0aWMgbG9uZyBtbHg1dmZfcHJlY29weV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtNTA5LVxcdC8qXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYzo1MTA6XFx0ICogb3B0LWluIGZvciBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiBzZXJ2ZXNcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTUxMS1cXHQgKiBhcyBvcHQtaW4gZm9yIFZGSU9fUFJFQ09QWV9JTkZPX1JFSU5JVCBhcyB3ZWxsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0zOTQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX3BtX2VudHJ5KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMzk4LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjM5OTpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgMCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNDAwLVxcdGlmIChyZXQgIT0gMSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTQxMj1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfcG1fZW50cnlfd2l0aF93YWtldXAoXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00MjAtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6NDIxOlxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTQyMi1cXHRcXHRcXHRcXHQgc2l6ZW9mKGVudHJ5KSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz00Njk9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX3BtX2V4aXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00NzMtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6NDc0OlxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00NzUtXFx0aWYgKHJldCAhPSAxKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTU4Mz1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk1LVxcdCAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1OTY6XFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTU5Ny1cXHRcXHRcXHRcXHQgc2l6ZW9mKHV1aWQpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MTA9aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxNS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjE2OlxcdHN3aXRjaCAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX01BU0spIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjE3OlxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUlk6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxOC1cXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9wbV9lbnRyeSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYxOTpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZX1dJVEhfV0FLRVVQOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjAtXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfcG1fZW50cnlfd2l0aF93YWtldXAodmRldiwgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGFyZywgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MjI6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FWElUOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjMtXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfcG1fZXhpdCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyNDpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjUtXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyNjpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjI3LVxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyODpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjI2NzpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2OC1cXHRcXHRcXHRcXHQgc2l6ZW9mKGdldF9kbWFfYnVmKSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzg1LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Mzg2OlxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzg3LVxcdFxcdFxcdFxcdCBzaXplb2Yoc2V0X3RwaCkpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTkwNz12ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ19kZXZpY2Vfc3RhdGUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtOTIwLVxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjkyMTpcXHRcXHRcXHRcXHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgfFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzo5MjI6XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MjMtXFx0XFx0XFx0XFx0IHNpemVvZihtaWcpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MjktXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjkzMDpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCkge1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MzEtXFx0XFx0ZW51bSB2ZmlvX2RldmljZV9taWdfc3RhdGUgY3Vycl9zdGF0ZTtcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NDAtXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjk0MTpcXHQvKiBIYW5kbGUgdGhlIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUICovXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk0Mi1cXHRmaWxwID0gZGV2aWNlLVxcdTAwM2VtaWdfb3BzLVxcdTAwM2VtaWdyYXRpb25fc2V0X3N0YXRlKGRldmljZSwgbWlnLmRldmljZV9zdGF0ZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9OTU3PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uX2RhdGFfc2l6ZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NjctXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjk2ODpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtOTY5LVxcdFxcdFxcdFxcdCBzaXplb2YoZGF0YV9zaXplKSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9OTg1PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uX3ByZWNvcHlfaW5mb192MihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05OTItXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjk5MzpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgMCk7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk5NC1cXHRpZiAocmV0ICE9IDEpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTAwMT1zdGF0aWMgaW50IHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEwMTItXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEwMTM6XFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEwMTQtXFx0XFx0XFx0XFx0IHNpemVvZihtaWcpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMDg0PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbG9nZ2luZ19zdGFydChzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTAzLVxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjExMDQ6XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTA1LVxcdFxcdFxcdFxcdCBzaXplb2YoY29udHJvbCkpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTExNjg9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3N0b3Aoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTE3Ny1cXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMTc4OlxcdFxcdFxcdFxcdCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgMCk7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTExNzktXFx0aWYgKHJldCAhPSAxKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTExOTU9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3JlcG9ydChzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjEwLVxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyMTE6XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjEyLVxcdFxcdFxcdFxcdCBzaXplb2YocmVwb3J0KSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTIzOT1zdGF0aWMgaW50IHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI1Mi1cXHRpZiAoZmVhdHVyZS5mbGFncyBcXHUwMDI2XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNTM6XFx0ICAgIH4oVkZJT19ERVZJQ0VfRkVBVFVSRV9NQVNLIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgfFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU0OlxcdCAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSkpXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI1Ny1cXHQvKiBHRVQgXFx1MDAyNiBTRVQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBleGNlcHQgd2l0aCBQUk9CRSAqL1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU4OlxcdGlmICghKGZlYXR1cmUuZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU5OlxcdCAgICAoZmVhdHVyZS5mbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjYwOlxcdCAgICAoZmVhdHVyZS5mbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUKSlcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI2MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI2Mi1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI2MzpcXHRzd2l0Y2ggKGZlYXR1cmUuZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX01BU0spIHtcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI2NDpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OOlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjY1LVxcdFxcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbihcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjY3LVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjg6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19ERVZJQ0VfU1RBVEU6XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNjktXFx0XFx0cmV0dXJuIHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlnX2RldmljZV9zdGF0ZShcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjcxLVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNzI6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1NUQVJUOlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjczLVxcdFxcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RhcnQoXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI3NS1cXHRcXHRcXHRmZWF0dXJlLmFyZ3N6IC0gbWluc3opO1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjc2OlxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVE9QOlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjc3LVxcdFxcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RvcChcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjc5LVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODA6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1JFUE9SVDpcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI4MS1cXHRcXHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3JlcG9ydChcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjgzLVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODQ6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19EQVRBX1NJWkU6XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODUtXFx0XFx0cmV0dXJuIHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uX2RhdGFfc2l6ZShcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjg3LVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODg6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MjpcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI4OS1cXHRcXHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdyYXRpb25fcHJlY29weV9pbmZvX3YyKFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTEzNDU9c3RhdGljIGxvbmcgdmZpb19kZXZpY2VfZm9wc191bmxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEzNzctXFx0c3dpdGNoIChjbWQpIHtcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTM3ODpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkU6XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEzNzktXFx0XFx0cmV0ID0gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZShkZXZpY2UsIHVwdHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvLmg9Mzk9c3RydWN0IHZmaW9fZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpby5oLTExMy0gKiAgICAgICAgICAgICB0aGlzIGRldmljZSBpcyBhdHRhY2hlZCB0by5cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoxMTQ6ICogQGRldmljZV9mZWF0dXJlOiBPcHRpb25hbCwgZmlsbCBpbiB0aGUgVkZJT19ERVZJQ0VfRkVBVFVSRSBpb2N0bFxcbmluY2x1ZGUvbGludXgvdmZpby5oLTExNS0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpby5oPTIwMj1zdGF0aWMgaW5saW5lIGJvb2wgdmZpb19kZXZpY2VfY2Rldl9vcGVuZWQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMTEtICogICAgICAgICBkZXZpY2VzIHRoYXQgc3VwcG9ydCBtaWdyYXRpb24uIEl0J3MgbWFuZGF0b3J5IGZvclxcbmluY2x1ZGUvbGludXgvdmZpby5oOjIxMjogKiAgICAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIG1pZ3JhdGlvbiBzdXBwb3J0LlxcbmluY2x1ZGUvbGludXgvdmZpby5oLTIxMy0gKiAgICAgICAgIFRoZSByZXR1cm5lZCBGRCBpcyB1c2VkIGZvciBkYXRhIHRyYW5zZmVyIGFjY29yZGluZyB0byB0aGUgRlNNXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMTgtICogICAgICAgICBkZXZpY2VzIHRoYXQgc3VwcG9ydCBtaWdyYXRpb24uIEl0J3MgbWFuZGF0b3J5IGZvclxcbmluY2x1ZGUvbGludXgvdmZpby5oOjIxOTogKiAgICAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIG1pZ3JhdGlvbiBzdXBwb3J0LlxcbmluY2x1ZGUvbGludXgvdmZpby5oLTIyMC0gKiBAbWlncmF0aW9uX2dldF9kYXRhX3NpemU6IE9wdGlvbmFsIGNhbGxiYWNrIHRvIGdldCB0aGUgZXN0aW1hdGVkIGRhdGFcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMjEtICogICAgICAgICAgbGVuZ3RoIHRoYXQgd2lsbCBiZSByZXF1aXJlZCB0byBjb21wbGV0ZSBzdG9wIGNvcHkuIEl0J3MgbWFuZGF0b3J5IGZvclxcbmluY2x1ZGUvbGludXgvdmZpby5oOjIyMjogKiAgICAgICAgICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTiBtaWdyYXRpb24gc3VwcG9ydC5cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMjMtICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaD0yNDk9c3RydWN0IHZmaW9fbG9nX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNTgtLyoqXFxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjU5OiAqIHZmaW9fY2hlY2tfZmVhdHVyZSAtIFZhbGlkYXRlIHVzZXIgaW5wdXQgZm9yIHRoZSBWRklPX0RFVklDRV9GRUFUVVJFIGlvY3RsXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYwLSAqIEBmbGFnczogQXJnIGZyb20gdGhlIGRldmljZV9mZWF0dXJlIG9wXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYxLSAqIEBhcmdzejogQXJnIGZyb20gdGhlIGRldmljZV9mZWF0dXJlIG9wXFxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjYyOiAqIEBzdXBwb3J0ZWRfb3BzOiBDb21iaW5hdGlvbiBvZiBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCBhbmQgU0VUIHRoZSBkcml2ZXJcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNjMtICogICAgICAgICAgICAgICAgIHN1cHBvcnRzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNjYtICogRm9yIHVzZSBpbiBhIGRyaXZlcidzIGRldmljZV9mZWF0dXJlIG9wLiBDaGVja3MgdGhhdCB0aGUgaW5wdXRzIHRvIHRoZVxcbmluY2x1ZGUvbGludXgvdmZpby5oOjI2NzogKiBWRklPX0RFVklDRV9GRUFUVVJFIGlvY3RsIGFyZSBjb3JyZWN0IGZvciB0aGUgZHJpdmVyJ3MgZmVhdHVyZS4gUmV0dXJucyAxIGlmXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjY4LSAqIHRoZSBkcml2ZXIgc2hvdWxkIGV4ZWN1dGUgdGhlIGdldCBvciBzZXQsIG90aGVyd2lzZSB0aGUgcmVsZXZhbnRcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpby5oPTI3MT1zdGF0aWMgaW5saW5lIGludCB2ZmlvX2NoZWNrX2ZlYXR1cmUodTMyIGZsYWdzLCBzaXplX3QgYXJnc3osIHUzMiBzdXBwb3J0ZWRfb3BzLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjczLXtcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNzQ6XFx0aWYgKChmbGFncyBcXHUwMDI2IChWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSkgXFx1MDAyNlxcbmluY2x1ZGUvbGludXgvdmZpby5oLTI3NS1cXHQgICAgfnN1cHBvcnRlZF9vcHMpXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjc2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmluY2x1ZGUvbGludXgvdmZpby5oOjI3NzpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFKVxcbmluY2x1ZGUvbGludXgvdmZpby5oLTI3OC1cXHRcXHRyZXR1cm4gMDtcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNzktXFx0LyogV2l0aG91dCBQUk9CRSBvbmUgb2YgR0VUIG9yIFNFVCBtdXN0IGJlIHJlcXVlc3RlZCAqL1xcbmluY2x1ZGUvbGludXgvdmZpby5oOjI4MDpcXHRpZiAoIShmbGFncyBcXHUwMDI2IChWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSkpXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjgxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvbW11ZmQuaD0yMTE9c3RydWN0IGlvbW11X2lvYXNfbWFwIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pb21tdWZkLmgtMjM0LSAqIGRtYS1idWYgaW1wb3J0IHBhdGg7IGN1cnJlbnRseSBzdXBwb3J0ZWQgZG1hLWJ1ZnMgaW5jbHVkZSBzaW5nbGUtcmFuZ2VcXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oOjIzNTogKiBWRklPIFBDSSBkbWEtYnVmcyBleHBvcnRlZCB0aHJvdWdoIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgYW5kXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvbW11ZmQuaC0yMzYtICogb3RoZXIgZG1hLWJ1ZnMgbWF5IGJlIHJlamVjdGVkLiBBbGwgb3RoZXIgYXJndW1lbnRzIGFuZCBzZW1hbnRpY3MgbWF0Y2hcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9ODYxPXN0cnVjdCB2ZmlvX2RldmljZV9pb2V2ZW50ZmQge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NzctLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4Nzg6ICogVkZJT19ERVZJQ0VfRkVBVFVSRSAtIF9JT1dSKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTcsXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NzktICpcXHRcXHRcXHQgICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmUpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTg5Mz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTg5NS1cXHRfX3UzMlxcdGZsYWdzO1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODk2OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NQVNLXFx0KDB4ZmZmZikgLyogMTYtYml0IGZlYXR1cmUgaW5kZXggKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjg5NzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMTYpIC8qIEdldCBmZWF0dXJlIGludG8gZGF0YVtdICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4OTg6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDE3KSAvKiBTZXQgZmVhdHVyZSBmcm9tIGRhdGFbXSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODk5OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDE4KSAvKiBQcm9iZSBmZWF0dXJlIHN1cHBvcnQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTkwMC1cXHRfX3U4XFx0ZGF0YVtdO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDItXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo5MDM6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFXFx0XFx0X0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTcpXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDQtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTkxMy0gKiBAdG9rZW5fdXVpZF9wdHI6IFZhbGlkIGlmIFZGSU9fREVWSUNFX0JJTkRfRkxBR19UT0tFTi4gUG9pbnRzIHRvIGEgMTYgYnl0ZVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6OTE0OiAqICAgICAgICAgICAgICAgICAgVVVJRCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU4uXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MTUtICpcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtOTI1LSAqIGlnbm9yZWQuIFRoZSBvbmx5IGNhc2UgdG9kYXkgaXMgYSBQRi9WRiByZWxhdGlvbnNoaXAgd2hlcmUgdGhlIFZGIGJpbmQgbXVzdFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6OTI2OiAqIGJlIHByb3ZpZGVkIHRoZSBzYW1lIHRva2VuIGFzIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOIHByb3ZpZGVkIHRvXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MjctICogdGhlIFBGLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD05OTY9c3RydWN0IHZmaW9fZGV2aWNlX2RldGFjaF9pb21tdWZkX3B0IHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMS0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEwMTI6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1BDSV9WRl9UT0tFTlxcdCgwKVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMy1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxNS0gKiBJbmRpY2F0ZXMgdGhlIGRldmljZSBjYW4gc3VwcG9ydCB0aGUgbWlncmF0aW9uIEFQSSB0aHJvdWdoXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDE2OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX0RFVklDRV9TVEFURS4gSWYgdGhpcyBHRVQgc3VjY2VlZHMsIHRoZSBSVU5OSU5HIGFuZFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxNy0gKiBFUlJPUiBzdGF0ZXMgYXJlIGFsd2F5cyBzdXBwb3J0ZWQuIFN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3RhdGVzIGlzXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEwMzY9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA0MS19O1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTA0MjojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIDFcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNDMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDQ0LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDQ1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGV4ZWN1dGUgYSBtaWdyYXRpb24gc3RhdGUgY2hhbmdlIG9uIHRoZSBWRklPXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDQ2LSAqIGRldmljZS4gVGhlIG5ldyBzdGF0ZSBpcyBzdXBwbGllZCBpbiBkZXZpY2Vfc3RhdGUsIHNlZSBlbnVtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNjgtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEwNjk6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCwgZ2V0IHRoZSBjdXJyZW50IG1pZ3JhdGlvbiBzdGF0ZSBvZiB0aGUgVkZJT1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA3MC0gKiBkZXZpY2UsIGRhdGFfZmQgd2lsbCBiZSAtMS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTA3Mj1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9taWdfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDc1LX07XFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDc2OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREVWSUNFX1NUQVRFIDJcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNzctXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTExOTItICogICBzdXBwb3J0IHdpbGwgYmUgZGlzY292ZXJhYmxlIGJ5IGEgbmV3IGZsYWcgaW5cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjExOTM6ICogICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTi5cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTExOTQtICpcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTIzMS0gKiBzdXBwb3J0IHRoZW0uIFRoZSB1c2VyIGNhbiBkaXNjb3ZlciBpZiB0aGVzZSBzdGF0ZXMgYXJlIHN1cHBvcnRlZCBieSB1c2luZ1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTIzMjogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTi4gQnkgdXNpbmcgY29tYmluYXRpb24gdHJhbnNpdGlvbnMgdGhlIHVzZXIgY2FuXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMjMzLSAqIGF2b2lkIGtub3dpbmcgYWJvdXQgdGhlc2Ugb3B0aW9uYWwgc3RhdGVzIGlmIHRoZSBrZXJuZWwgZHJpdmVyIHN1cHBvcnRzIHRoZW0uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEyMzg9ZW51bSB2ZmlvX2RldmljZV9taWdfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMjc4LSAqIFZGSU9fUFJFQ09QWV9JTkZPX1JFSU5JVCBjYW4gYmUgcmVwb3J0ZWQgb25seSBhZnRlciB1c2Vyc3BhY2Ugb3B0cyBpbiB0b1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTI3OTogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92Mi4gV2l0aG91dCB0aGlzIG9wdC1pbiwgdGhlIGZsYWdzIGZpZWxkXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMjgwLSAqIG9mIHN0cnVjdCB2ZmlvX3ByZWNvcHlfaW5mbyBpcyByZXNlcnZlZCBmb3IgYnVnLWNvbXBhdGliaWxpdHkgcmVhc29ucy5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTMxND1zdHJ1Y3QgdmZpb19wcmVjb3B5X2luZm8ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzI0LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzI1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGFsbG93IHRoZSBkZXZpY2UgdG8gYmUgbW92ZWQgaW50byBhIGxvdyBwb3dlclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTMyNi0gKiBzdGF0ZSB3aXRoIHRoZSBwbGF0Zm9ybS1iYXNlZCBwb3dlciBtYW5hZ2VtZW50LiAgRGV2aWNlIHVzZSBvZiBsb3dlciBwb3dlclxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzM2LSAqIHdpdGggd2FrZS11cCBub3RpZmljYXRpb24sIHNlZVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTMzNzogKiBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWV9XSVRIX1dBS0VVUCBiZWxvdy4gIEFjY2VzcyB0byBtbWFwJ2RcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzMzgtICogZGV2aWNlIHJlZ2lvbnMgaXMgZGlzYWJsZWQgb24gTE9XX1BPV0VSX0VOVFJZIGFuZCBtYXkgb25seSBiZSByZXN1bWVkIGFmdGVyXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNDAtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzQxOiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUlkgM1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0Mi1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0NC0gKiBUaGlzIGRldmljZSBmZWF0dXJlIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhc1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM0NTogKiBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgdXNlclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0Ni0gKiBwcm92aWRlcyBhbiBldmVudGZkIGZvciB3YWtlLXVwIG5vdGlmaWNhdGlvbi4gIFdoZW4gdGhlIGRldmljZSBtb3ZlcyBvdXQgb2ZcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTM2ND1zdHJ1Y3QgdmZpb19kZXZpY2VfbG93X3Bvd2VyX2VudHJ5X3dpdGhfd2FrZXVwIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM2OC1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNjk6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWV9XSVRIX1dBS0VVUCA0XFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzcwLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3MS0vKlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM3MjogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCBkaXNhbGxvdyB1c2Ugb2YgZGV2aWNlIGxvdyBwb3dlciBzdGF0ZXMgYXNcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzM6ICogcHJldmlvdXNseSBlbmFibGVkIHZpYSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSBvclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM3NDogKiBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWV9XSVRIX1dBS0VVUCBkZXZpY2UgZmVhdHVyZXMuXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzc1LSAqIFRoaXMgZGV2aWNlIGZlYXR1cmUgSU9DVEwgbWF5IGl0c2VsZiBnZW5lcmF0ZSBhIHdha2V1cCBldmVudGZkIG5vdGlmaWNhdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzc3LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM3ODojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VYSVQgNVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3OS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzODAtLypcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODE6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBzdGFydC9zdG9wIGRldmljZSBETUEgbG9nZ2luZy5cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODI6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgdGhlIGRldmljZSBzdXBwb3J0c1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4My0gKiBETUEgbG9nZ2luZy5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4OC0gKiBkdXJpbmcgdGhlIHByZSBjb3B5IHBoYXNlIG9mIGxpdmUgbWlncmF0aW9uLiBPbmx5IERNQSBXUklURXMgYXJlIGxvZ2dlZCxcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODk6ICogYW5kIHRoaXMgQVBJIGlzIG5vdCBjb25uZWN0ZWQgdG8gVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREVWSUNFX1NUQVRFLlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM5MC0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNDE4PXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9sb2dnaW5nX3JhbmdlIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQyMi1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0MjM6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1NUQVJUIDZcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0MjQtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI1LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDI2OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgc3RvcCBkZXZpY2UgRE1BIGxvZ2dpbmcgdGhhdCB3YXMgc3RhcnRlZFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQyNzogKiBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1NUQVJUXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI4LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQyOTojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfU1RPUCA3XFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDMwLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMS0vKlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQzMjogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHJlYWQgYmFjayBhbmQgY2xlYXIgdGhlIGRldmljZSBETUEgbG9nXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDMzLSAqXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NDItICogVGhlIGlucHV0IHBhZ2Vfc2l6ZSBjYW4gYmUgYW55IHBvd2VyIG9mIHR3byB2YWx1ZSBhbmQgZG9lcyBub3QgaGF2ZSB0b1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ0MzogKiBtYXRjaCB0aGUgdmFsdWUgZ2l2ZW4gdG8gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVEFSVC4gVGhlIGRyaXZlclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ0NC0gKiB3aWxsIGZvcm1hdCBpdHMgaW50ZXJuYWwgbG9nZ2luZyB0byBtYXRjaCB0aGUgcmVwb3J0aW5nIHBhZ2Ugc2l6ZSwgcG9zc2libHlcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTQ1Nz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfbG9nZ2luZ19yZXBvcnQge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDYzLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ2NDojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfUkVQT1JUIDhcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjUtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDY2LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDY3OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgcmVhZCBiYWNrIHRoZSBlc3RpbWF0ZWQgZGF0YSBsZW5ndGggdGhhdCB3aWxsXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDY4LSAqIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHN0b3AgY29weS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTQ3Mz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9taWdfZGF0YV9zaXplIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3Ni1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0Nzc6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19EQVRBX1NJWkUgOVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3OC1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NzktLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDgwOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIHNldCBvciBjbGVhciB0aGUgQlVTIG1hc3RlcmluZyBmb3IgdGhlIGRldmljZVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ4MS0gKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHNwZWNpZmllZCBpbiBvcCBmbGFnLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNDkzPXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2J1c19tYXN0ZXIge1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5NC1cXHRfX3UzMiBvcDtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0OTU6I2RlZmluZVxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfQ0xFQVJfTUFTVEVSXFx0MFxcdC8qIENsZWFyIEJ1cyBNYXN0ZXIgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0OTY6I2RlZmluZVxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUX01BU1RFUlxcdFxcdDFcXHQvKiBTZXQgQnVzIE1hc3RlciAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5Ny19O1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ5ODojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfQlVTX01BU1RFUiAxMFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5OS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MDAtLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTAxOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgY3JlYXRlIGEgZG1hX2J1ZiBmZCBmb3IgdGhlXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTAyLSAqIHJlZ2lvbnMgc2VsZWN0ZWQuXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MTEtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTEyOiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIDExXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTEzLVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNTE5PXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTI5LSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTMwOiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyLlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUzMS0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTM0LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTUzNTojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUzNi1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MzctLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTM4OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTM5LSAqIHdpdGggYSB2ZmlvLWV4cG9ydGVkIGRtYS1idWYuIFRoZSBkbWEtYnVmIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnlcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1NDA6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0MS0gKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHNcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0NS0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTU0NjogKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0Ny0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTY2LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTU2NzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTNcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NjgtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xMTg9c3RhdGljIGludCB2ZmlvX2RldmljZV9mZWF0dXJlX2lvY3RsKGludCBmZCwgdTMyIGZsYWdzLCB2b2lkICpkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMtMTI4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jOjEyOTpcXHRyZXR1cm4gaW9jdGwoZmQsIFZGSU9fREVWSUNFX0ZFQVRVUkUsIGZlYXR1cmUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTEzMC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xMzI9c3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmVhdHVyZV9zZXQoaW50IGZkLCB1MTYgZmVhdHVyZSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYy0xMzMte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jOjEzNDpcXHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCB8IGZlYXR1cmU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMtMTM1LVxcdGludCByZXQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xNDE9dm9pZCB2ZmlvX2RldmljZV9zZXRfdmZfdG9rZW4oaW50IGZkLCBjb25zdCBjaGFyICp2Zl90b2tlbilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYzoxNDg6XFx0dmZpb19kZXZpY2VfZmVhdHVyZV9zZXQoZmQsIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0OS1cXHRcXHRcXHRcXHR0b2tlbl91dWlkLCBzaXplb2YodXVpZF90KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjIwLjQ0Mjc4ODA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgyMzI4ODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgVkZJTyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAsIGEgbmV3IGZlYXR1cmUgZm9yIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaW9jdGwuIEl0IGFsc28gY2hhbmdlcyB0aGUgTWVsbGFub3ggQ29ubmVjdFggZHJpdmVyLCBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvYCwgdG8gdXNlIHRoaXMgZG1hLWJ1ZiBUUEggbWV0YWRhdGEuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBiZSBmdXp6aW5nLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIEknbSB3b3JraW5nIGZyb20gc2F5IHRvIHNraXAgaXQgaWYgaXQncyBvbmx5IGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyB0aGUgY3J1eC4gTm93LCBtbHg1IGlzIGEgTWVsbGFub3ggQ29ubmVjdFggZHJpdmVyLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLiBJIGhhdmUgYSBsaXN0IGhlcmU6IGBody9uZXQvcm9ja2VyLmNgLCBgaHcvbmV0L2UxMDAwLmNgLCBgaHcvbmV0L3ZpcnRpby1uZXQuY2AsIGBody9uZXQvdm14bmV0My5jYC4uLiBidXQgbm8gbWx4NS5cblxuSG93ZXZlciwgdGhlIHBhdGNoIGRvZXNuJ3QganVzdCB0b3VjaCBtbHg1LiBJdCBhbHNvIG1vZGlmaWVzIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYC4gKlRoYXQqIGNoYW5nZXMgdGhpbmdzLiBJcyBWRklPIFBDSSBlbXVsYXRlZD8gWWVzLCBRRU1VIGhhcyBgdmZpby1wY2lgLiBCdXQgYHZmaW8tcGNpYCBpcyAqdXN1YWxseSogdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgZGV2aWNlcywgbm90IGVtdWxhdGVkIG9uZXMuIFNvLCB0aGUgcXVlc3Rpb24gcmVtYWluczogQ2FuIHdlIHRlc3QgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgd2l0aG91dCBuZWVkaW5nIGEgcGh5c2ljYWwgZGV2aWNlP1xuXG5MZXQncyBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYDpcblxuYGBgY1xuXHRpZiAoIXZkZXYtXHUwMDNlcGNpX29wcyB8fCAhdmRldi1cdTAwM2VwY2lfb3BzLVx1MDAzZWdldF9kbWFidWZfcGh5cylcblx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5cblx0Y29tcCA9IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtXHUwMDNlcGRldik7XG5cdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmBgYFxuXG5SaWdodCwgaXQgcmVxdWlyZXMgYHZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXNgLiBUaGF0J3MgdGhlIGNyaXRpY2FsIHBvaW50LiBXaG8gc2V0cyBgZ2V0X2RtYWJ1Zl9waHlzYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZnV6emFibGUgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzY6MjguMjY2MDgwODIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4MzE5NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9kbWFidWZfcGh5c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz05OTY9bnZncmFjZV9ncHVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDE5LVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwMjA6c3RhdGljIGludCBudmdyYWNlX2dldF9kbWFidWZfcGh5cyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKmNvcmVfdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDIxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNTUtXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA1NjpcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMoY29yZV92ZGV2LCBwcm92aWRlciwgcmVnaW9uX2luZGV4LFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNTctXFx0XFx0XFx0XFx0XFx0ICAgICBwaHlzX3ZlYywgZG1hX3JhbmdlcywgbnJfcmFuZ2VzKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9kZXZfb3BzID0ge1xcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwNjE6XFx0LmdldF9kbWFidWZfcGh5cyA9IG52Z3JhY2VfZ2V0X2RtYWJ1Zl9waHlzLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNjItfTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwODU9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9kZXZfY29yZV9vcHMgPSB7XFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA4NjpcXHQuZ2V0X2RtYWJ1Zl9waHlzID0gdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMsXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA4Ny19O1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RldmljZV9vcHMgdmZpb19wY2lfZGV2X29wcyA9IHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTczOlxcdC5nZXRfZG1hYnVmX3BoeXMgPSB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTc0LX07XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTIwMj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2ZpbGxfcGh5c192ZWMpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjAzLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MjA0OmludCB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yMDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICoqcHJvdmlkZXIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTIyMS19XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoyMjI6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjIzLVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjMtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoyNjQ6XFx0aWYgKCF2ZGV2LVxcdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXMpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjUtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zMDgtXFx0cHJpdi1cXHUwMDNlc2l6ZSA9IGxlbmd0aDtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjMwOTpcXHRyZXQgPSB2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXByb3ZpZGVyLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzEwLVxcdFxcdFxcdFxcdFxcdCAgICAgZ2V0X2RtYV9idWYucmVnaW9uX2luZGV4LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0zNjg9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM3OC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM3OTpcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXFx1MDAzZXBjaV9vcHMtXFx1MDAzZWdldF9kbWFidWZfcGh5cylcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4MC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD02MD1zdHJ1Y3QgdmZpb19wY2lfZGV2aWNlX29wcyB7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6NjE6XFx0aW50ICgqZ2V0X2RtYWJ1Zl9waHlzKShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtNjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTcwPWludCB2ZmlvX3BjaV9jb3JlX2ZpbGxfcGh5c192ZWMoc3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTczLVxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGxlbik7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6NzQ6aW50IHZmaW9fcGNpX2NvcmVfZ2V0X2RtYWJ1Zl9waHlzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC03NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTgyPXZmaW9fcGNpX2NvcmVfZmlsbF9waHlzX3ZlYyhzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtODgtfVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjg5OnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZ2V0X2RtYWJ1Zl9waHlzKFxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTkwLVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgc3RydWN0IHAycGRtYV9wcm92aWRlciAqKnByb3ZpZGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozNjozMC4wMzQ0MTE0MTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1Mzg0OTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWRklPIGFuZCBETUEtQlVGIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdmZpb19wY2lfZGV2X29wc2AgYW5kIHNlZSB0aGF0IGBnZXRfZG1hYnVmX3BoeXNgIGlzIHNldCB0byBgdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXNgIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNgLiBSaWdodCwgc28gc3RhbmRhcmQgYHZmaW8tcGNpYCBzaG91bGQsIGluIHRoZW9yeSwgc3VwcG9ydCBETUEtQlVGIGludGVncmF0aW9uLiBCdXQgaG9sZCBvbiwgdGhlcmUncyBhIGNydWNpYWwgY2hlY2sgd2l0aGluIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgOiBpdCBjYWxscyBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgLiBUaGlzLCBpbiB0dXJuLCBjaGVja3MgaWYgdGhlIFRQSCBjb21wbGV0ZXIgdHlwZSBpcyBzdXBwb3J0ZWQ7IGlmIG5vdCwgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0J3MgdGhlIHNuYWcuXG5cbk5vdywgbXkgbWFpbiBxdWVzdGlvbiBpczogZG9lcyBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50LCBhY3R1YWxseSAqZW11bGF0ZSogYSBQQ0kgZGV2aWNlIHdpdGggVFBIIGNvbXBsZXRlciBzdXBwb3J0PyBJdCdzIGEgUENJZSBmZWF0dXJlLCBzbyBpZiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpdCBwcm9wZXJseSwgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCB3aWxsIHJldHVybiB0aGF0IGRyZWFkZWQgYFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IFFFTVUgaGFuZGxlcyB0aGlzLiBJIGtub3cgdGhhdCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGlzIHJlYWRpbmcgZnJvbSB0aGUgYFBDSV9FWFBfREVWQ0FQMmAgcmVnaXN0ZXIuIFNvLCBjYW4gYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5zaWRlIFFFTVUgZXZlbiAqaGF2ZSogVFBIIGNvbXBsZXRlciBzdXBwb3J0PyBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24uXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBob3cgdGhlc2UgdGVzdHMgYXJlIHJ1bi4gQ291bGQgYHN5emthbGxlcmAgaW5qZWN0IFBDSSBkZXZpY2VzIHdpdGggVFBIIHRvIHRlc3Q/IEkga25vdyB0aGF0IGBzeXprYWxsZXJgIGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgUENJIGRldmljZSBpbmplY3RvciB0aGF0IEknbSBhd2FyZSBvZiwgYW5kIGl0IHVzZXMgUUVNVSB0byB0ZXN0LiBCdXQgd2hhdCBhYm91dCB2aXJ0dWFsIEhDSSBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGBzeXprYWxsZXJgIHJ1bnMgb24gUUVNVSwgc28gdGhlIHZpcnR1YWwgUENJIGRldmljZXMgd291bGQgZGVwZW5kIG9uIFFFTVUuIEJ1dCB0aGVuIGl0IHN0cnVjayBtZSwgYW5kIEkgcmVhbGlzZWQgdGhhdCBWRklPIGRldmljZXMgYXJlIHVzdWFsbHkgcGh5c2ljYWwgZGV2aWNlcyBwYXNzZWQgdGhyb3VnaC5cblxuRmluYWxseSwgZG9lcyBgc3l6a2FsbGVyYCB1c2UgbW9jayBWRklPIGRldmljZXM/IEkga25vdyBpdCBkb2VzIHNvbWV0aW1lcywgYW5kIG1heWJlIGl0IGRvZXMgaGVyZS4gU28sIGl0J3Mgd29ydGggY2hlY2tpbmcgdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9jayBWRklPIGRldmljZXMgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIGlmIHRob3NlIG1vY2sgVkZJTyBkZXZpY2VzIGhhdmUgVFBIIGNhcGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODY4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjM2LjY4ODI2MzMyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzA3OTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE2Njg9c3RhdGljIGludCBoaXNpX2FjY192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjkwLVxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2aGlzaV9hY2NfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTY5MTpcXHRyZXQgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2aGlzaV9hY2NfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTY5Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTM1NT1zdGF0aWMgaW50IGlzbV92ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNjctXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM2ODpcXHRyZXQgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2aXZwY2QtXFx1MDAzZWNvcmVfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzY5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTE0MDc9c3RhdGljIGludCBtbHg1dmZfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xNDE4LVxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2bXZkZXYtXFx1MDAzZWNvcmVfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jOjE0MTk6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNm12ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xNDIwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMzE5PXN0YXRpYyBpbnQgbnZncmFjZV9ncHVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMzYwLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEzNjE6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNm52ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTM2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jPTExMD1zdGF0aWMgaW50IHBkc192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3BjaV9kcnYuYy0xMjItXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jOjEyMzpcXHRlcnIgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2cGRzX3ZmaW8tXFx1MDAzZXZmaW9fY29yZWRldik7XFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jLTEyNC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jPTY0ND1xYXRfdmZfdmZpb19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYy02NTQtXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIFxcdTAwMjZxYXRfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYzo2NTU6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnFhdF92ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jLTY1Ni1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE3Nj1zdGF0aWMgaW50IHZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTkwLVxcdHZkZXYtXFx1MDAzZXBjaV9vcHMgPSBcXHUwMDI2dmZpb19wY2lfZGV2X29wcztcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTkxOlxcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xOTItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTIyMTc9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9yZWxlYXNlX2Rldik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjIxOC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMjE5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjIyMC17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzE4LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMzE5OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzIwLVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTE0OT1zdGF0aWMgaW50IHZpcnRpb3ZmX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xNzctXFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ2aXJ0dmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxNzg6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnZpcnR2ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTE3OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM9NTQzPXN0YXRpYyBpbnQgeGVfdmZpb19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jLTU1NC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYzo1NTU6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnhlX3ZkZXYtXFx1MDAzZWNvcmVfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01NTYtXFx0aWYgKHJldCkge1xcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTY4PXZvaWQgdmZpb19wY2lfY29yZV9yZWxlYXNlX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTY5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3MC12b2lkIHZmaW9fcGNpX2NvcmVfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzY6MzguMjcxMzQ3MTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyODk0MDcyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHZmaW8tcGNpYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggRE1BIGJ1ZmZlcnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSB0YXJnZXQgc3lzdGVtLCBsaWtlbHkgUUVNVSBydW5uaW5nIFN5emthbGxlciwgY2FuIGV2ZW4gcmVhY2ggdGhlIGtleSBjb2RlLlxuXG5Jbml0aWFsbHksIEkgc2VlIGB2ZmlvLXBjaWAgYmVpbmcgYm91bmQgdG8gUENJIGRldmljZXMuIFN5emthbGxlcidzIFFFTVUgc2V0dXAgc2hvdWxkIGFsbG93IHRoaXMuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCwgYXMgU3l6a2FsbGVyJ3MgUUVNVSB0eXBpY2FsbHkgZGVhbHMgd2l0aCB2aXJ0dWFsIGRldmljZXMuIENhbiBTeXprYWxsZXIgYmluZCBhIGRldmljZSB0byBgdmZpby1wY2lgIGFuZCBpbnRlcmFjdCB3aXRoIGl0PyBJIHN1c3BlY3QgaXQgY2FuIHZpYSBzeXNmcyB3cml0ZXMsIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybS5cblxuVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvYC4gQnV0LCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLCBhbnl0aGluZyB0aGF0IGRlYWxzIHdpdGggdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgbGlrZSBNZWxsYW5veCBDb25uZWN0WCBkcml2ZXJzIChgbWx4NWApIHRoYXQgcmVxdWlyZSAqcGh5c2ljYWwqIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGJ5IFFFTVUgaXMgdXN1YWxseSBjb25zaWRlcmVkIHVuaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIFdlIGNhbiBsYXJnZWx5IGlnbm9yZSBpdC5cblxuTG9va2luZyBhdCB0aGUgYHZmaW9gIHBhcnRzLCBzcGVjaWZpY2FsbHkgaW4gYHZmaW9fcGNpX2NvcmUuY2AgYW5kIGB2ZmlvX3BjaV9kbWFidWYuY2AsIHRoZSBmdW5jdGlvbiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCBjb21lcyB0byB0aGUgZm9yZWZyb250LiBUaGlzIGNoZWNrcyBmb3IgVFBIIENvbXBsZXRlciBzdXBwb3J0IHZpYSBgcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KWAuIENyaXRpY2FsbHksIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCBhIFBDSSBkZXZpY2UgKnN1cHBvcnRzKiBUUEguXG5cbk5vdywgaGVyZSdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBEb2VzIFFFTVUsIGluIGEgdHlwaWNhbCBTeXprYWxsZXIgc2V0dXAsICplbXVsYXRlKiBhbnkgUENJIGRldmljZSB0aGF0IGhhcyBUUEggQ29tcGxldGVyIGNhcGFiaWxpdGllcz8gVGhhdCBpcyB0aGUgY3J1eCBvZiB0aGUgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gY2hlY2sgUUVNVSdzIFBDSSBkZXZpY2UgZW11bGF0aW9uIGNhcGFiaWxpdGllcy4gSWYgUUVNVSBkb2VzIG5vdCBlbXVsYXRlIFRQSCwgdGhpcyB3aG9sZSBicmFuY2ggd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgbWVhbnMgaXQncyBzdGlsbCAqcmVhY2hhYmxlKiwgYnV0IGp1c3QgcmV0dXJucyBlYXJseS5cblxuVGhlcmUgaXMgYWxzbyBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLiAgSG93ZXZlciwgYGRtYV9idWZfZ2V0X3BjaV90cGhgIGlzIGNhbGxlZCBvbmx5IGJ5IGBtbHg1YCBpbiB0aGlzIHBhdGNoIGFuZCBpcyB0aGVyZWZvcmUgdW5yZWFjaGFibGUgaW4gYSBRRU1VIHNldHVwLlxuXG5Ib3dldmVyLCB0aGUga2V5IGZ1bmN0aW9uLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLiBJdCBhY3F1aXJlcyBhIGRtYS1idWYgZnJvbSBhIGZpbGUgZGVzY3JpcHRvciBhbmQgc2V0cyBzb21lIGZpZWxkcywgd2hpY2ggYXJlIG9ubHkgcmVhZCBieSB0aGUgdW5yZWFjaGFibGUgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLiBTbyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgaW9jdGwgcHJvdmlkZXMgYSBmdXp6YWJsZSBzdXJmYWNlLlxuXG5JZiBUUEggaXMgKm5vdCogc3VwcG9ydGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIGFuZCB0aGF0IGlzIGFsbCB0aGF0IGNhbiBoYXBwZW4uXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KWAsIHdoZXJlIGB2ZGV2LVx1MDAzZXBkZXZgIGlzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIGluIFFFTVUuICBJIG5lZWQgdG8gY2hlY2sgaG93IFRQSCBpcyBzdXBwb3J0ZWQgb24gdGhvc2UuIFRoaXMgd291bGQgaW52b2x2ZSBjaGVja2luZyBRRU1VJ3Mgc291cmNlIGNvZGUsIHRvIGxvb2sgZm9yIGFueSBlbXVsYXRlZCBQQ0kgZGV2aWNlIHdoaWNoIGV4cG9zZXMgVFBIIGNvbXBsZXRlciBjYXBhYmlsaXRpZXMsIGkuZS4gYFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWWAgb3IgYFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIYC4gSWYgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlIGZlYXR1cmUsIHdlIHdpbGwgZ2V0IHRoZSBlYXJseSByZXR1cm4sIHdoaWNoIGlzIGFyZ3VhYmx5IG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGxlYW5zIHRvd2FyZHMgdGhpcyBiZWluZyAqbGVzcyogZnJ1aXRmdWwuIFRoZSBwYXRjaCBpcyBpbnRlcmVzdGluZywgYXMgaXQgaW52b2x2ZXMgZG1hLWJ1ZiBpb2N0bCwgYW5kIGxvY2tzIGFyZSBhY3F1aXJlZC4gSG93ZXZlciwgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgUUVNVSwgaXQncyB1bmxpa2VseSB3ZSdsbCB0cmlnZ2VyIGFueSByZWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gU28gdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGlvY3RsLiBCdXQgaW4gYSByZWd1bGFyIFFFTVUgU3l6a2FsbGVyIHNldHVwLCBpZiB3ZSBjYW4ndCBnZXQgcGFzdCB0aGUgY2hlY2sgZm9yIFRQSCBzdXBwb3J0LCBpdCB3aWxsIGp1c3QgcmV0dXJuIGVhcmx5LCBvciBzZXQgZmllbGRzIHRoYXQgYXJlIG5vdCByZWFkLiAgSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBub3QganVzdCBhbiAqZWFybHkgcmV0dXJuKiBzaXR1YXRpb24sIGJ1dCBwb3RlbnRpYWxseSBhICptaXNzaW5nIGZlYXR1cmUqIGluIHN0YW5kYXJkIFFFTVUgc2V0IHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHZpYWJpbGl0eSBvZiB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYyNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6Mzc6MDEuMTY1NDIyODQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4Mjk1Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvdHBoLmM9MjAwPXN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy0yMTgtXFx0ICovXFxuZHJpdmVycy9wY2kvdHBoLmM6MjE5OlxcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xcbmRyaXZlcnMvcGNpL3RwaC5jOjIyMDpcXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XFxuZHJpdmVycy9wY2kvdHBoLmM6MjIxOlxcdCAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG5kcml2ZXJzL3BjaS90cGguYy0yMjItXFx0XFx0cmV0dXJuIHRwaF9jb21wO1xcbmRyaXZlcnMvcGNpL3RwaC5jOjIyMzpcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuZHJpdmVycy9wY2kvdHBoLmMtMjI0LX1cXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jPTIzNj1FWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtMjQ2LSAqXFxuZHJpdmVycy9wY2kvdHBoLmM6MjQ3OiAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG5kcml2ZXJzL3BjaS90cGguYzoyNDg6ICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuZHJpdmVycy9wY2kvdHBoLmM6MjQ5OiAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbmRyaXZlcnMvcGNpL3RwaC5jLTI1MC0gKi9cXG5kcml2ZXJzL3BjaS90cGguYz0yNTE9dTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy0yNTYtXFx0aWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXFx1MDAyNnJlZykpXFxuZHJpdmVycy9wY2kvdHBoLmM6MjU3OlxcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcXG5kcml2ZXJzL3BjaS90cGguYy0yNTgtXFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUihyZWcpKVxcbmRyaXZlcnMvcGNpL3RwaC5jOjI1OTpcXHRcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuZHJpdmVycy9wY2kvdHBoLmMtMjYwLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTI2MS1cXHQvKiAwYjEwIGlzIHJlc2VydmVkOyBmb2xkIGl0IGludG8gXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIChzZWUgYWJvdmUpLiAqL1xcbmRyaXZlcnMvcGNpL3RwaC5jOjI2MjpcXHR0cGhfY29tcCA9IEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKTtcXG5kcml2ZXJzL3BjaS90cGguYzoyNjM6XFx0aWYgKHRwaF9jb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSB8fFxcbmRyaXZlcnMvcGNpL3RwaC5jOjI2NDpcXHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXFxuZHJpdmVycy9wY2kvdHBoLmMtMjY1LVxcdFxcdHJldHVybiB0cGhfY29tcDtcXG5kcml2ZXJzL3BjaS90cGguYzoyNjY6XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbmRyaXZlcnMvcGNpL3RwaC5jLTI2Ny19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzgyLVxcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM4MzpcXHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4NC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQwMC1cXHRpZiAoKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjQwMTpcXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQwMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD01MD1zdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjUxOnsgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTItI2VuZGlmXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC02NzItI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX0xUUlxcdFxcdDB4MDAwMDA4MDAgLyogTGF0ZW5jeSB0b2xlcmFuY2UgcmVwb3J0aW5nICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmg6NjczOiNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLXFx0MHgwMDAwMzAwMCAvKiBUUEggY29tcGxldGVyIHN1cHBvcnQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC02NzQtI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX09CRkZfTUFTS1xcdDB4MDAwYzAwMDAgLyogT0JGRiBzdXBwb3J0IG1lY2hhbmlzbSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmgtMTA1Mi0vKiBUUEggQ29tcGxldGVyIFN1cHBvcnQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaDoxMDUzOiNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkVcXHRcXHQweDAgLyogTm9uZSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oOjEwNTQ6I2RlZmluZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFlcXHQweDEgLyogVFBIIG9ubHkgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaDoxMDU1OiNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEhcXHQweDMgLyogVFBIIGFuZCBFeHRlbmRlZCBUUEggKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC0xMDU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozNzowMi45MTM3MjY5NDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3MDQ3MDA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUENJIFRQSCBNZXRhZGF0YSBSZXRyaWV2YWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoaXM/XCIgSXQgc2VlbXMgbGlrZSBpdCdzIHRyeWluZyB0byBnZXQgVFBIIG1ldGFkYXRhLCB3aGljaCByZWxpZXMgb24gYSBkZXZpY2UncyBgUENJX0VYUF9ERVZDQVAyYCByZWdpc3Rlci4gQ2FuIHN5emthbGxlciBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggdGhpcyBmZWF0dXJlPyBJdCBkb2Vzbid0IGxvb2sgbGlrZSBpdC4gU3l6a2FsbGVyIGxldmVyYWdlcyBRRU1VJ3MgZGV2aWNlIGVtdWxhdGlvbiwgYW5kIGlmIFFFTVUgZG9lc24ndCBvZmZlciBhIGRldmljZSB3aXRoIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCwgdGhpcyBpcyBkZWFkIGluIHRoZSB3YXRlciBmcm9tIHRoZSBnZXQtZ28uIEkgbWVhbiwgc3l6a2FsbGVyIGhhcyBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGFuZCBzbyBvbi4uLiBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSB3YXkgdG8gc3ludGhlc2l6ZSBQQ0kgY29uZmlnIHNwYWNlLiBJdCByZWxpZXMgb24gdGhlICp2aXJ0dWFsKiBoYXJkd2FyZSwgd2hpY2ggaXMgdGhlIHByb2JsZW0uXG5cbkFscmlnaHQsIHdoYXQgaWYgd2UgdXNlIGBDT05GSUdfVkZJT19QQ0lgIGFuZCBiaW5kIGEgdmlydHVhbCBkZXZpY2UgbGlrZSBgZTEwMDBlYCBvciBgdmlydGlvLXBjaWAgdG8gaXQ/IEJ1dCBkbyAqdGhvc2UqIGhhdmUgVFBIIENvbXBsZXRlciBzdXBwb3J0PyBJJ20gbm90IHNlZWluZyBhbnkgZHJpdmVyIHNldHRpbmcgdGhhdCBmbGFnLCBpdCdzIGEgaGFyZHdhcmUgdGhpbmcuIFRoZSBvbmx5IHdheSBJIHNlZSBpdCBoYXBwZW5pbmcgaXMgaWYgd2UgY291bGQgYWRkIHRoZSBjYXBhYmlsaXR5IG1hbnVhbGx5IGluIFFFTVUsIG1heWJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBwY2lfYWRkX2NhcGAsIGJ1dCB0aGF0J3Mgbm90IHN0YW5kYXJkIFFFTVUuIEFuZCBldmVuIGlmIHdlIGNvdWxkIHJlYWNoIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIHVwIHRvIHRoZSBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGNoZWNrLCBpcyBpdCByZWFsbHkgd29ydGggZnV6emluZyBqdXN0IGZvciB0aGF0PyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIFFFTVUsIG9yIHJlbHkgb24gc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLlxuXG5Ob3csIHRoaXMgYG1seDVgIHBhcnQgaXMgc2NyZWFtaW5nIFwidmVuZG9yLXNwZWNpZmljXCIuIFRoYXQncyBhIE1lbGxhbm94IFNtYXJ0TklDIGRyaXZlciwgcmVxdWlyaW5nICpwaHlzaWNhbCogaGFyZHdhcmUuIERlZmluaXRlbHkgb3V0LiBUaGUgYHZmaW9gIHBhcnQsIGluIGB2ZmlvX3BjaV9kbWFidWYuY2AsIHJlbGllcyBvbiBhIFBDSSBkZXZpY2UgKndpdGgqIFRQSCBDb21wbGV0ZXIuIFNpbmNlIHRoaXMgaXMgYSBoYXJkd2FyZSBmZWF0dXJlIGRlc2lnbmVkIHRvIG9wdGltaXplIGNhY2hlIHBsYWNlbWVudCBpbiBwaHlzaWNhbCBDUFVzL3Jvb3QgY29tcGxleGVzIGFuZCB0aGUgc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGxpa2UgYGUxMDAwZWAsIGB2aXJ0aW8tbmV0YCBkb24ndCBzdXBwb3J0IFRQSCwgdGhpcyBwYXRoIGlzIHVucmVhY2hhYmxlLiBBbmQgdGhlcmUncyBubyB3YXkgdG8gZmFrZSB0aGF0IGVpdGhlciwgYHZmaW8tcGNpYCBqdXN0IHBhc3NlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBwaHlzaWNhbCBkZXZpY2UncyBjb25maWcgc3BhY2UuIFRoZXJlZm9yZSwgbGluZSAzODQgb2YgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaXMgdGhlIGVuZCBvZiB0aGUgbGluZS5cblxuV2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGNhbiBiZSByZWFjaGVkLlxuXG5gYGBjXG5cdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcblx0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXG5cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuYGBgXG5cbkl0IGlzIGp1c3QgMiBgaWZgIHN0YXRlbWVudHMgYmVmb3JlIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhlcmUgYXJlIG5vIGludGVyZXN0aW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyBoZXJlLiBUaGUgYWN0dWFsIGNoYW5nZXMsIHdoaWNoIGludm9sdmUgc2V0dGluZyBUUEggbWV0YWRhdGEgYW5kIGxvY2tpbmcgdGhlIGRtYS1idWYsIGFyZSBhZnRlciB0aGUgY2hlY2suIElmIHRoZSBjaGVjayBmYWlscywgdGhlIGZ1bmN0aW9uYWwgY29kZSBpcyBuZXZlciByZWFjaGVkLiBTbyB0aGUgcmVhY2hhYmxlIHBhcnQgaXMgdHJpdmlhbCBhbmQgbm90IHdvcnRoIGZ1enppbmcuXG5cbk9rYXksIGxldCdzIHJldmlldyB0aGUgYG1seDVgIGNoYW5nZXMgbW9yZSBzcGVjaWZpY2FsbHkuIFRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNgIGFyZSBhbGwgdGllZCB0byB0aGUgYG1seDVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgYSBNZWxsYW5veCBDb25uZWN0WCBhZGFwdGVyLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSB0aG9zZS4gU28sIHRoYXQncyBkZWZpbml0ZWx5IHVucmVhY2hhYmxlLlxuXG5UaGUgYGRtYS1idWZgIGNoYW5nZXMgYXJlIGFsc28gcHJvYmxlbWF0aWMuIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpbiBgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY2AgaXMgYSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24gYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGJ5IGBtbHg1YC4gU2luY2UgYG1seDVgIGlzIHVucmVhY2hhYmxlLCBzbyBpcyB0aGlzIG5ldyBmdW5jdGlvbi5cblxuVGhlIGBwY2lgIGNoYW5nZXMgYXJlIGp1c3QgaGVscGVyIGZ1bmN0aW9uczogYHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGVgIGFuZCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGluIGBkcml2ZXJzL3BjaS90cGguY2AuIFRoZXNlIGFyZSBuZXdcblxuIiwiSW5wdXRUb2tlbnMiOjQxNDEwLCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6Mzc6MjguNjE4NDMzNzQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpIG1ldGFkYXRhIHJldHJpZXZhbCBmcm9tIERNQSBidWZmZXJzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBsb2NhdGVkIGluIHRoZSBgbWx4NWAgZHJpdmVyIChNZWxsYW5veCBDb25uZWN0WCksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIGFuZCBpbiBgdmZpby1wY2lgIHZpYSB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIGlvY3RsLiBUaGUgVkZJTyBpb2N0bCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIHRoZSB1bmRlcmx5aW5nIFBDSSBkZXZpY2UncyBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgcmVnaXN0ZXIgKGBQQ0lfRVhQX0RFVkNBUDJgKS4gU2luY2Ugc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGRvIG5vdCBpbXBsZW1lbnQgVFBIIENvbXBsZXRlciBzdXBwb3J0LCB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIGlvY3RsIHdpbGwgYWx3YXlzIHJldHVybiBgLUVPUE5PVFNVUFBgIGVhcmx5IGFuZCBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgaW4gYGRtYS1idWYuY2AgYW5kIGBwY2kvdHBoLmNgIGFyZSBvbmx5IGludm9rZWQgYnkgdGhlc2UgdW5yZWFjaGFibGUgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJ3MgRGV2aWNlIENhcGFiaWxpdGllcyAyIHJlZ2lzdGVyIChgUENJX0VYUF9ERVZDQVAyYCkuIFNpbmNlIHN0YW5kYXJkIFFFTVUgZW11bGF0ZWQgZGV2aWNlcyBkbyBub3QgaW1wbGVtZW50IFRQSCBDb21wbGV0ZXIgc3VwcG9ydCwgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBpb2N0bCB3aWxsIGFsd2F5cyByZXR1cm4gYC1FT1BOT1RTVVBQYCBlYXJseSBhbmQgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIGluIGBkbWEtYnVmLmNgIGFuZCBgcGNpL3RwaC5jYCBhcmUgb25seSBpbnZva2VkIGJ5IHRoZXNlIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowpm9cz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 06:11:01 +0000 UTC FinishedAt: 2026-08-02 06:37:29 +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+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJiMzOTtzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZkMjRkNGFjNGI2MWM3ZjcyMGY1YWUzZDNmZmEwMzQ2M2YxNDczMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA2OjM1OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXG5pbmRleCBkNTA0YzYzNmRjMjk0Li43MWYzMzU0NDJiYTc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuQEAgLTkzOSw2ICYjNDM7OTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKVxuICAqICAgICAtIGRtYV9idWZfdm1hcCgpXG4gICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKVxuJiM0MzsgKiAgICAgLSBkbWFfYnVmX2dldF9wY2lfdHBoKClcbiAgKlxuICAqIDIuIEltcG9ydGVycyBtdXN0IG5vdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXG4gICogICAgZnVuY3Rpb25zOlxuQEAgLTk3OSw2ICYjNDM7OTgwLDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy51bm1hcF9kbWFfYnVmKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52bWFwKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52dW5tYXAoKVxuJiM0MzsgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXG4gICogICAgZnVuY3Rpb25zOlxuQEAgLTExNDQsNiAmIzQzOzExNDYsMzYgQEAgdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiB9XG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4mIzQzOyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcbiYjNDM7ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuJiM0MzsgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcbiYjNDM7ICpcbiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuJiM0MzsgKlxuJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIC1FT1BOT1RTVVBQIGlmIHRoZVxuJiM0MzsgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4mIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByZXR1cm5lZCBzdGVlcmluZyB0YWcgYW5kIHByb2Nlc3NpbmcgaGludCBhcmUgb25seSB2YWxpZCB1bnRpbCB0aGVcbiYjNDM7ICogZXhwb3J0ZXIgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbWFwcGluZyAoc2lnbmFsbGVkIHRvIHRoZSBpbXBvcnRlciB2aWFcbiYjNDM7ICogXHUwMDI2ZG1hX2J1Zl9hdHRhY2hfb3BzLmludmFsaWRhdGVfbWFwcGluZ3MpLiBJbXBvcnRlcnMgbXVzdCByZS1xdWVyeSBhZnRlciBhIG5ld1xuJiM0MzsgKiBtYXBwaW5nIGlzIGVzdGFibGlzaGVkIGZvbGxvd2luZyBpbnZhbGlkYXRpb24uXG4mIzQzOyAqL1xuJiM0MztpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuJiM0MztcbiAvKipcbiAgKiBkbWFfYnVmX21hcF9hdHRhY2htZW50IC0gUmV0dXJucyB0aGUgc2NhdHRlcmxpc3QgdGFibGUgb2YgdGhlIGF0dGFjaG1lbnQ7XG4gICogbWFwcGVkIGludG8gX2RldmljZV8gYWRkcmVzcyBzcGFjZS4gSXMgYSB3cmFwcGVyIGZvciBtYXBfZG1hX2J1ZigpIG9mIHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuaW5kZXggMDI4MDkxMTRmYzc5YS4uYTJiNDk3ZjZiMTZiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXG5AQCAtNjAsNiAmIzQzOzYwLDcgQEBcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0VsaSBDb2hlbiBcdTAwM2NlbGlAbWVsbGFub3guY29tXHUwMDNlXCYjMzQ7KTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4gXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG5pbmRleCA1MjI5ODRkOTU4YmJmLi5jNmE5NTZiMmVlODdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tbHg1X2liLmhcbkBAIC02NDYsNiAmIzQzOzY0NiwxNSBAQCBlbnVtIG1seDVfbWtleV90eXBlIHtcbiAvKiBVc2VkIGZvciBub24tZXhpc3RlbnQgcGggdmFsdWUgKi9cbiAjZGVmaW5lIE1MWDVfSUJfTk9fUEggMHhmZlxuIFxuJiM0MztzdHJ1Y3QgZG1hX2J1ZjtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGgge1xuJiM0MztcdHUxNiBzdGVlcmluZ190YWc7XG4mIzQzO1x0dTggcGg7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZDtcbiYjNDM7XHRib29sIHZhbGlkO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbWx4NV9pYl9ta2V5IHtcbiBcdHUzMiBrZXk7XG4gXHRlbnVtIG1seDVfbWtleV90eXBlIHR5cGU7XG5AQCAtNzI2LDYgJiM0Mzs3MzUsNyBAQCBzdHJ1Y3QgbWx4NV9pYl9tciB7XG4gXHRcdFx0dTggcmV2b2tlZCA6MTtcbiBcdFx0XHQvKiBJbmRpY2F0ZXMgcHJldmlvdXMgZG1hYnVmIHBhZ2UgZmF1bHQgb2NjdXJyZWQgKi9cbiBcdFx0XHR1OCBkbWFidWZfZmF1bHRlZDoxO1xuJiM0MztcdFx0XHRzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoIGRtYWJ1Zl90cGg7XG4gXHRcdFx0c3RydWN0IG1seDVfaWJfbWtleSBudWxsX21ta2V5O1xuIFx0XHR9O1xuIFx0fTtcbkBAIC0xMzQxLDYgJiM0MzsxMzUxLDcgQEAgc3RydWN0IGliX21yICptbHg1X2liX3JlcmVnX3VzZXJfbXIoc3RydWN0IGliX21yICppYl9tciwgaW50IGZsYWdzLCB1NjQgc3RhcnQsXG4gXHRcdFx0XHQgICAgdTY0IGxlbmd0aCwgdTY0IHZpcnRfYWRkciwgaW50IGFjY2Vzc19mbGFncyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTtcbiBpbnQgbWx4NV9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xuJiM0MztpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zik7XG4gc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yKHN0cnVjdCBpYl9wZCAqcGQsIGVudW0gaWJfbXJfdHlwZSBtcl90eXBlLFxuIFx0XHRcdCAgICAgICB1MzIgbWF4X251bV9zZyk7XG4gc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yX2ludGVncml0eShzdHJ1Y3QgaWJfcGQgKnBkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jXG5pbmRleCBlNmI3NDk1NWQ5NWRjLi40MDRjNWQwODFiOGFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuQEAgLTM5LDYgJiM0MzszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcmRtYS9mcm1yX3Bvb2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2liX3VtZW1fb2RwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtkbS5oXCYjMzQ7XG5AQCAtMTY3LDYgJiM0MzsxNjgsNjEgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0sgR0VOTUFTS19VTEwoMjMsIDE2KVxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyBHRU5NQVNLX1VMTCgxNSwgMClcbiBcbiYjNDM7c3RhdGljIHU4IG1seDVfaWJfdHBoX2tleV9waCh1OCBwaClcbiYjNDM7e1xuJiM0MztcdGlmIChwaCA9PSBNTFg1X0lCX05PX1BIIHx8IHBoID09IDApXG4mIzQzO1x0XHRwaCBePSBNTFg1X0lCX05PX1BIO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGg7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWx4NV9zdF9nZXRfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3RfaW5kZXggPSBGSUVMRF9HRVQoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyxcbiYjNDM7XHRcdFx0XHQga2VybmVsX3ZlbmRvcl9rZXkpO1xuJiM0MztcbiYjNDM7XHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCAqdHBoID0gXHUwMDI2bXItXHUwMDNlZG1hYnVmX3RwaDtcbiYjNDM7XHR1MTYgc3RlZXJpbmdfdGFnO1xuJiM0MztcdHU4IHBoO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdHBoLVx1MDAzZXZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIHRwaC1cdTAwM2VleHRlbmRlZCwgXHUwMDI2c3RlZXJpbmdfdGFnLCBcdTAwMjZwaCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RlZXJpbmdfdGFnICE9IHRwaC1cdTAwM2VzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLVx1MDAzZXBoKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqXG4gX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdFx0ICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLFxuQEAgLTE4OSwxMyAmIzQzOzI0NSwxMCBAQCBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRcdE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0sgOlxuIFx0XHRcdDA7XG4gXG4tXHQvKiBOb3JtYWxpemUgcGg6IHN3YXAgMCBhbmQgTUxYNV9JQl9OT19QSCAqL1xuLVx0aWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMClcbi1cdFx0cGggXj0gTUxYNV9JQl9OT19QSDtcbi1cbiBcdG1yLVx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxuIFx0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4tXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xuJiM0MztcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLFxuJiM0MztcdFx0XHQgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTtcbiBcdGVyciA9IGliX2ZybXJfcG9vbF9wb3AoXHUwMDI2ZGV2LVx1MDAzZWliX2RldiwgXHUwMDI2bXItXHUwMDNlaWJtcik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGtmcmVlKG1yKTtcbkBAIC0yMTgsNyAmIzQzOzI3MSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgMCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLFxuIFx0XHQubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsXG4tXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqL1xuJiM0MztcdFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cbiYjNDM7XHRcdFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksXG4gXHR9O1xuIFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xuIFx0aW50IHJldDtcbkBAIC01NTcsNiAmIzQzOzYxMiwxMCBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKnJlZ19jcmVhdGUoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRtci1cdTAwM2VpYm1yLnBkID0gcGQ7XG4gXHRtci1cdTAwM2VhY2Nlc3NfZmxhZ3MgPSBhY2Nlc3NfZmxhZ3M7XG4gXHRtci1cdTAwM2VwYWdlX3NoaWZ0ID0gb3JkZXJfYmFzZV8yKHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0bXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4mIzQzO1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0ssXG4mIzQzO1x0XHRcdCAgIG1seDVfaWJfdHBoX2tleV9waChwaCkpO1xuIFxuIFx0aW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9ta2V5X2luKTtcbiBcdGlmIChwb3B1bGF0ZSlcbkBAIC03NTMsNiAmIzQzOzgxMiwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdFx0XHRzdF9pbmRleCA9IG1kbWFoLVx1MDAzZXN0X2luZGV4O1xuIFx0fVxuIFxuJiM0MztcdGVyciA9IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0eGx0X3dpdGhfdW1yID0gbWx4NXJfdW1yX2Nhbl9sb2FkX3BhcyhkZXYsIHVtZW0tXHUwMDNlbGVuZ3RoKTtcbiBcdGlmICh4bHRfd2l0aF91bXIpIHtcbiBcdFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncyxcbkBAIC03NjksNiAmIzQzOzgzNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKmNyZWF0ZV9yZWFsX21yKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXNsb3dfcGF0aF9tdXRleCk7XG4gXHR9XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuJiM0MztcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UodW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG5AQCAtOTAzLDYgJiM0Mzs5NjksNjMgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBnZXRfcGNpX3RwaF9tcl9kbWFidWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoICp0cGgsXG4mIzQzO1x0XHRcdFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbG9jYWxfc3RfaW5kZXg7XG4mIzQzO1x0dTE2IHN0ZWVyaW5nX3RhZztcbiYjNDM7XHR1OCBsb2NhbF9waDtcbiYjNDM7XHRib29sIGV4dGVuZGVkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShkZXYtXHUwMDNlbWRldi1cdTAwM2VwZGV2KSkge1xuJiM0MztcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XG4mIzQzO1x0XHRleHRlbmRlZCA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOlxuJiM0MztcdFx0ZXh0ZW5kZWQgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpIG11c3QgcnVuIHVuZGVyIGRtYWJ1Zi1cdTAwM2VyZXN2LCBidXQgZHJvcCB0aGUgbG9ja1xuJiM0MztcdCAqIGJlZm9yZSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZygpOiB0aGF0IGFsbG9jYXRlcyB3aXRoIEdGUF9LRVJORUwsXG4mIzQzO1x0ICogd2hpY2ggbXVzdCBub3QgcnVuIHVuZGVyIGRtYWJ1Zi1cdTAwM2VyZXN2IHNpbmNlIHJlY2xhaW0gY2FuIHJlLWVudGVyIHRoZVxuJiM0MztcdCAqIHNhbWUgcmVzZXJ2YXRpb24gb2JqZWN0IHRocm91Z2ggYSBkeW5hbWljIGV4cG9ydGVyJiMzOTtzIG1vdmVfbm90aWZ5IHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0ZG1hX3Jlc3ZfbG9jayhkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBcdTAwMjZzdGVlcmluZ190YWcsIFx1MDAyNmxvY2FsX3BoKTtcbiYjNDM7XHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRcdG1seDVfaWJfZGJnKGRldiwgXCYjMzQ7Z2V0X3BjaV90cGggZmFpbGVkICglZClcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYtXHUwMDNlbWRldiwgc3RlZXJpbmdfdGFnLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNmxvY2FsX3N0X2luZGV4KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtbHg1X2liX2RiZyhkZXYsIFwmIzM0O3N0X2FsbG9jX2luZGV4X2J5X3RhZyBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpzdF9pbmRleCA9IGxvY2FsX3N0X2luZGV4O1xuJiM0MztcdCpwaCA9IGxvY2FsX3BoO1xuJiM0MztcdHRwaC1cdTAwM2VzdGVlcmluZ190YWcgPSBzdGVlcmluZ190YWc7XG4mIzQzO1x0dHBoLVx1MDAzZXBoID0gbG9jYWxfcGg7XG4mIzQzO1x0dHBoLVx1MDAzZWV4dGVuZGVkID0gZXh0ZW5kZWQ7XG4mIzQzO1x0dHBoLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4mIzQzO3tcbiYjNDM7XHRtbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLFxuJiM0MztcdFx0XHRcdCAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBpYl9tciAqXG4gcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRcdCAgIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsXG5AQCAtOTEzLDYgJiM0MzsxMDM2LDcgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtXHUwMDNlZGV2aWNlKTtcbiBcdHN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWJfdW1lbV9kbWFidWYgKnVtZW1fZG1hYnVmO1xuJiM0MztcdHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggdHBoID0ge307XG4gXHR1MTYgc3RfaW5kZXggPSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVg7XG4gXHR1OCBwaCA9IE1MWDVfSUJfTk9fUEg7XG4gXHRpbnQgZXJyO1xuQEAgLTk0NSwxOCAmIzQzOzEwNjksMjkgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRcdHBoID0gZG1haC1cdTAwM2VwaDtcbiBcdFx0aWYgKGRtYWgtXHUwMDNldmFsaWRfZmllbGRzIFx1MDAyNiBCSVQoSUJfRE1BSF9DUFVfSURfRVhJU1RTKSlcbiBcdFx0XHRzdF9pbmRleCA9IG1kbWFoLVx1MDAzZXN0X2luZGV4O1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0Z2V0X3BjaV90cGhfbXJfZG1hYnVmKGRldiwgdW1lbV9kbWFidWYtXHUwMDNlYXR0YWNoLVx1MDAzZWRtYWJ1ZixcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZ0cGgsIFx1MDAyNnN0X2luZGV4LCBcdTAwMjZwaCk7XG4gXHR9XG4gXG4gXHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSwgdmlydF9hZGRyLFxuIFx0XHRcdFx0YWNjZXNzX2ZsYWdzLCBhY2Nlc3NfbW9kZSxcbiBcdFx0XHRcdHN0X2luZGV4LCBwaCk7XG4gXHRpZiAoSVNfRVJSKG1yKSkge1xuJiM0MztcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG4gXG4gXHRtbHg1X2liX2RiZyhkZXYsIFwmIzM0O21rZXkgMHgleFxcblwmIzM0OywgbXItXHUwMDNlbW1rZXkua2V5KTtcbiBcbiYjNDM7XHRtci1cdTAwM2VkbWFidWZfdHBoID0gdHBoO1xuIFx0YXRvbWljX2FkZChpYl91bWVtX251bV9wYWdlcyhtci1cdTAwM2V1bWVtKSwgXHUwMDI2ZGV2LVx1MDAzZW1kZXYtXHUwMDNlcHJpdi5yZWdfcGFnZXMpO1xuIFx0dW1lbV9kbWFidWYtXHUwMDNlcHJpdmF0ZSA9IG1yO1xuIFx0aWYgKCFwaW5uZWRfbW9kZSkge1xuQEAgLTE0MDUsNiAmIzQzOzE1NDAsNyBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKVxuIFx0aWYgKG1yLVx1MDAzZWlibXIuZnJtci5wb29sKSB7XG4gXHRcdGlmICghbWx4NV91bXJfcmV2b2tlX21yX3dpdGhfbG9jayhtcikpIHtcbiBcdFx0XHRpYl9mcm1yX3Bvb2xfcHVzaChtci1cdTAwM2VpYm1yLmRldmljZSwgXHUwMDI2bXItXHUwMDNlaWJtcik7XG4mIzQzO1x0XHRcdG1seDVfaWJfbXJfcHV0X3N0X2hhbmRsZV9yZWYobXIpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTQzMiw2ICYjNDM7MTU2OCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wgXHUwMDI2XHUwMDI2ICFyZXQpXG4gXHRcdGliX2ZybXJfcG9vbF9kcm9wKFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFxuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihtcik7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuaW5kZXggMWJhZGVjOWJmNTI3MC4uN2MxNzMxYWEzZGQ5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuQEAgLTg1Nyw2ICYjNDM7ODU3LDEzIEBAIHN0YXRpYyBpbnQgcGFnZWZhdWx0X2RtYWJ1Zl9tcihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIsIHNpemVfdCBiY250LFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdGVyciA9IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChtciwgdW1lbV9kbWFidWYtXHUwMDNlYXR0YWNoLVx1MDAzZWRtYWJ1Zik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWJfdW1lbV9kbWFidWZfdW5tYXBfcGFnZXModW1lbV9kbWFidWYpO1xuJiM0MztcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwYWdlX3NpemUgPSBtbHg1X3VtZW1fZG1hYnVmX2ZpbmRfYmVzdF9wZ3N6KHVtZW1fZG1hYnVmLCBhY2Nlc3NfbW9kZSk7XG4gXHRpZiAoIXBhZ2Vfc2l6ZSkge1xuIFx0XHRpYl91bWVtX2RtYWJ1Zl91bm1hcF9wYWdlcyh1bWVtX2RtYWJ1Zik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG5pbmRleCA3Y2VkYzM0ODc5MGRiLi5jNjJiY2FlN2M1NDIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcbkBAIC05MiwyMyAmIzQzOzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRrZnJlZShzdCk7XG4gfVxuIFxuLWludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuLVx0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuJiM0MztpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpXG4ge1xuIFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xuIFx0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuIFx0dW5zaWduZWQgbG9uZyBpbmRleDtcbiBcdHUzMiB4YV9pZDtcbi1cdHUxNiB0YWc7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKCFzdClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKHN0LVx1MDAzZWRpcmVjdF9tb2RlKSB7XG4gXHRcdCpzdF9pbmRleCA9IHRhZztcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTUyLDggJiM0MzsxNDcsNDkgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRtdXRleF91bmxvY2soXHUwMDI2c3QtXHUwMDNlbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpO1xuJiM0MztcbiYjNDM7aW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHRhZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWRldi1cdTAwM2VzdClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleCk7XG4gXG4mIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG4mIzQzO1x0c3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LVx1MDAzZXN0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRpZiAoc3QtXHUwMDNlZGlyZWN0X21vZGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZHhfZGF0YSA9IHhhX2xvYWQoXHUwMDI2c3QtXHUwMDNlaWR4X3hhLCBzdF9pbmRleCk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWR4X2RhdGEtXHUwMDNldXNlY291bnQpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2dldF9pbmRleCk7XG4mIzQzO1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2Li5kMDIwMmZmN2ExYjI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMjAwLDYgJiM0MzsyMDAsNyBAQCBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKTtcbiBzdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpycDtcbiYjNDM7XHR1OCB0cGhfY29tcDtcbiBcdHUzMiByZWc7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTIxMSw4ICYjNDM7MjEyLDYwIEBAIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAwYjEwIGlzIHJlc2VydmVkOyB0cmVhdCBpdCBhcyBcJiMzNDtub3Qgc3VwcG9ydGVkXCYjMzQ7IHNvIG9ubHkgdGhlXG4mIzQzO1x0ICogYXJjaGl0ZWN0ZWQgZW5jb2RpbmdzIHJlYWNoIHRoZSBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xuJiM0MztcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcbiYjNDM7XHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4mIzQzO1x0XHRyZXR1cm4gdHBoX2NvbXA7XG4mIzQzO1x0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgXCYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWRcJiMzNDsgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxuJiM0MzsgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbiYjNDM7ICogXCYjMzQ7bm90IHN1cHBvcnRlZFwmIzM0OyBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4mIzQzOyAqIGRlZmluZWQgdmFsdWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4mIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuJiM0MzsgKiAgICAgICAgICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTggdHBoX2NvbXA7XG4mIzQzO1x0dTMyIHJlZztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXHUwMDI2cmVnKSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiYjNDM7XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1xuJiM0MztcdC8qIDBiMTAgaXMgcmVzZXJ2ZWQ7IGZvbGQgaXQgaW50byBcJiMzNDtub3Qgc3VwcG9ydGVkXCYjMzQ7IChzZWUgYWJvdmUpLiAqL1xuJiM0MztcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xuJiM0MztcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcbiYjNDM7XHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4mIzQzO1x0XHRyZXR1cm4gdHBoX2NvbXA7XG4mIzQzO1x0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XG4gXG4gLyogV3JpdGUgdGFnIHRvIFNUIHRhYmxlIC0gUmV0dXJuIDAgaWYgT0ssIG90aGVyd2lzZSAtZXJybm8gKi9cbiBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IDNmMTFhOTYyNGI5YzAuLjRlNWUzNGE3N2I3NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xNjI1LDYgJiM0MzsxNjI1LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbmluZGV4IGMxNmY0NjBjMDFkNjguLmY2MzAxNTgyMDRiNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZmaW9fcGNpX3ByaXYuaFwmIzM0O1xuQEAgLTE5LDcgJiM0MzsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XG4mIzQzO1x0ICogcHJvdGVjdGVkIGJ5IG1lbW9yeV9sb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdHUxNiB0cGhfc3RfZXh0O1xuJiM0MztcdHU4IHRwaF9zdDtcbiYjNDM7XHRib29sIHJldm9rZWQ7XG4mIzQzO1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4mIzQzO1x0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9waDoyO1xuIH07XG4gXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuQEAgLTMwLDcgJiM0Mzs0MSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdGlmICghYXR0YWNobWVudC1cdTAwM2VwZWVyMnBlZXIpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXJldm9rZWQpXG4mIzQzO1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXJldm9rZWQpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKVxuQEAgLTY5LDYgJiM0Mzs4MCwyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGV4dGVuZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0X2V4dDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0O1xuJiM0MztcdH1cbiYjNDM7XHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcbiBcdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbkBAIC0xMDEsNiAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbiYjNDM7XHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxuIFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXG4gXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbkBAIC0zMzMsNiAmIzQzOzM2NSw4NiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHR1OCBjb21wO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAoc2V0X3RwaC5mbGFncyBcdTAwMjYgfihWRklPX0RNQV9CVUZfVFBIX1NUIHwgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfdHBoLnBoIFx1MDAyNiB+MHgzKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICgoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjb21wICE9IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRkbWFidWYgPSBkbWFfYnVmX2dldChzZXRfdHBoLmRtYWJ1Zl9mZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBAcmV2b2tlZCBhbmQgdGhlIGRtYS1idWYvdmRldiBhc3NvY2lhdGlvbiBhcmUgdG9ybiBkb3duIHVuZGVyXG4mIzQzO1x0ICogbWVtb3J5X2xvY2sgYnkgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCk7IGhvbGQgaXQgd2hpbGUgdmFsaWRhdGluZ1xuJiM0MztcdCAqIG93bmVyc2hpcCBhbmQgcHVibGlzaGluZyBzbyB0aGUgZG1hLWJ1ZiBjYW5ub3QgYmUgZGlzYXNzb2NpYXRlZCBmcm9tXG4mIzQzO1x0ICogQHZkZXYgdW5kZXJuZWF0aCB1cy4gTG9jayBvcmRlciBtZW1vcnlfbG9jayAtXHUwMDNlIGRtYWJ1Zi1cdTAwM2VyZXN2IG1hdGNoZXNcbiYjNDM7XHQgKiB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkb3duX3JlYWQoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNldmRldiAhPSB2ZGV2KSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrX21lbTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9ja19tZW07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3BoICAgICAgICAgPSBzZXRfdHBoLnBoO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbiYjNDM7XHRwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxuJiM0MztcdFx0ISEoc2V0X3RwaC5mbGFncyBcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpO1xuJiM0MztcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0cmV0ID0gMDtcbiYjNDM7XG4mIzQzO291dF91bmxvY2tfbWVtOlxuJiM0MztcdHVwX3JlYWQoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO291dF9wdXQ6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuQEAgLTM0Nyw3ICYjNDM7NDU5LDcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4gXHRcdGlmIChwcml2LVx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xuIFx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4gXHRcdFx0aWYgKHJldm9rZWQpXG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VyZXZva2VkLCB0cnVlKTtcbiBcdFx0XHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cdTAwM2VkbWFidWYpO1xuIFx0XHRcdGRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2LFxuIFx0XHRcdFx0XHQgICAgICBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCwgZmFsc2UsXG5AQCAtMzY5LDcgJiM0Mzs0ODEsNyBAQCB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbiBcdFx0XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSBmYWxzZTtcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcmV2b2tlZCwgZmFsc2UpO1xuIFx0XHRcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuIFx0XHRcdH1cbiBcdFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbmluZGV4IGZjYTlkMGRmYWM5MGYuLjA2M2YzNzQ4NDc4YWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbkBAIC0xMTgsNiAmIzQzOzExOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcbiBcdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4gI2Vsc2VcbkBAIC0xMjgsNiAmIzQzOzEzMiwxNSBAQCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU5PVFRZO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuaW5kZXggZDEyMDNkYTU2ZmM1Zi4uMTRlOGViNjFhNjJjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuQEAgLTExMyw2ICYjNDM7MTEzLDI5IEBAIHN0cnVjdCBkbWFfYnVmX29wcyB7XG4gXHQgKi9cbiBcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAZ2V0X3BjaV90cGg6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4mIzQzO1x0ICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uXG4mIzQzO1x0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhXG4mIzQzO1x0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxuJiM0MztcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4mIzQzO1x0ICogICAgICAgICAgICAgICAgbmFtZXNwYWNlXG4mIzQzO1x0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoXG4mIzQzO1x0ICogXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FT1BOT1RTVVBQIHdoZW5cbiYjNDM7XHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJldHVybmVkIG1ldGFkYXRhIGZvbGxvd3MgdGhlIGxpZmV0aW1lIHJ1bGVzIGRvY3VtZW50ZWQgZm9yXG4mIzQzO1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdGludCAoKmdldF9wY2lfdHBoKShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbiYjNDM7XG4gXHQvKipcbiBcdCAqIEBtYXBfZG1hX2J1ZjpcbiBcdCAqXG5AQCAtNTYzLDYgJiM0Mzs1ODYsOCBAQCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRcdCAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuJiM0MztpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbiBcbiBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbmluZGV4IGIxODcxYzA4MjFkMGIuLmQyNmU1NzQ0Yzg0M2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuQEAgLTExODIsMTYgJiM0MzsxMTgyLDMxIEBAIGludCBtbHg1X2RtX3N3X2ljbV9kZWFsbG9jKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gbWx4NV9zd19pY21fdHlwZSB0eXBlXG4gXHRcdFx0ICAgdTY0IGxlbmd0aCwgdTE2IHVpZCwgcGh5c19hZGRyX3QgYWRkciwgdTMyIG9ial9pZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuJiM0MztpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpO1xuJiM0MztpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpO1xuICNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUxNiB0YWcsIHUxNiAqc3RfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZGVhbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4ge1xuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbmluZGV4IGJlNjhjZDE3ZjJmODMuLjc3NDNhZjZmZTQzMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbiYjNDM7XG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0zMCw2ICYjNDM7MzIsOCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4mIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuQEAgLTQxLDYgJiM0Mzs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbmluZGV4IDVkZTYxOGEzYTVlZWUuLjRjMWM3MGFhYzE1MDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICYjNDM7MTUzNCw0OSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuJiM0MzsvKipcbiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbiYjNDM7ICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XG4mIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuJiM0MzsgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXG4mIzQzOyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxuJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxuJiM0MzsgKlxuJiM0MzsgKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxuJiM0MzsgKlxuJiM0MzsgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxuJiM0MzsgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBAZmxhZ3MgaXMgdGhlIGF1dGhvcml0YXRpdmUgdmFsaWRpdHkgbWFzayBmb3IgdGhlXG4mIzQzOyAqIHR3byBuYW1lc3BhY2VzOiBWRklPX0RNQV9CVUZfVFBIX1NUIG1hcmtzIEBzdGVlcmluZ190YWcgdmFsaWQgYW5kXG4mIzQzOyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlclxuJiM0MzsgKiByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJiMzOTtzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXNcbiYjNDM7ICogb25seS4gQSBuYW1lc3BhY2Ugd2hvc2UgZmxhZyBiaXQgaXMgY2xlYXIgaXMgcmVwb3J0ZWQgYXMgdW5zdXBwb3J0ZWRcbiYjNDM7ICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZVxuJiM0MzsgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvclxuJiM0MzsgKiBmdXR1cmUgaW1wb3J0ZXJzLlxuJiM0MzsgKlxuJiM0MzsgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbiYjNDM7ICpcbiYjNDM7ICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby5cbiYjNDM7ICpcbiYjNDM7ICogVXNlcnNwYWNlIG11c3QgY29uZmlndXJlIFRQSCBiZWZvcmUgaGFuZGluZyB0aGUgZG1hLWJ1ZiBmZCB0byBhblxuJiM0MzsgKiBpbXBvcnRlci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxM1xuJiM0MztcbiYjNDM7I2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUXHRcdCgxIFx1MDAzY1x1MDAzYyAxKVxuJiM0MztcbiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGgge1xuJiM0MztcdF9fczMyXHRkbWFidWZfZmQ7XG4mIzQzO1x0X191MzJcdGZsYWdzO1xuJiM0MztcdF9fdTE2XHRzdGVlcmluZ190YWdfZXh0O1xuJiM0MztcdF9fdThcdHN0ZWVyaW5nX3RhZztcbiYjNDM7XHRfX3U4XHRwaDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJiMzOTtzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkMjRkNGFjNGI2MWM3ZjcyMGY1YWUzZDNmZmEwMzQ2M2YxNDczMjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDA2OjM1OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKaW5kZXggZDUwNGM2MzZkYzI5NC4uNzFmMzM1NDQyYmE3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCkBAIC05MzksNiAmIzQzOzkzOSw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKQogICogICAgIC0gZG1hX2J1Zl92bWFwKCkKICAqICAgICAtIGRtYV9idWZfdnVubWFwKCkKJiM0MzsgKiAgICAgLSBkbWFfYnVmX2dldF9wY2lfdHBoKCkKICAqCiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZQogICogICAgZnVuY3Rpb25zOgpAQCAtOTc5LDYgJiM0Mzs5ODAsNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQogICogICAgIC0gJmFtcDtkbWFfYnVmX29wcy51bm1hcF9kbWFfYnVmKCkKICAqICAgICAtICZhbXA7ZG1hX2J1Zl9vcHMudm1hcCgpCiAgKiAgICAgLSAmYW1wO2RtYV9idWZfb3BzLnZ1bm1hcCgpCiYjNDM7ICogICAgIC0gJmFtcDtkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpCiAgKgogICogMy4gRXhwb3J0ZXJzIG11c3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZQogICogICAgZnVuY3Rpb25zOgpAQCAtMTE0NCw2ICYjNDM7MTE0NiwzNiBAQCB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQogfQogRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgJiMzNDtETUFfQlVGJiMzNDspOwogCiYjNDM7LyoqCiYjNDM7ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCAtIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBtZXRhZGF0YQomIzQzOyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnkKJiM0MzsgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUCiYjNDM7ICogQHN0ZWVyaW5nX3RhZzogcmV0dXJucyB0aGUgcmF3IHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2UKJiM0MzsgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnQKJiM0MzsgKgomIzQzOyAqIFdyYXBwZXIgZm9yIHRoZSBvcHRpb25hbCAmYW1wO2RtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLgomIzQzOyAqCiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCAmYW1wO2RtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIC1FT1BOT1RTVVBQIGlmIHRoZQomIzQzOyAqIGV4cG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgb3IgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUKJiM0MzsgKiByZXF1ZXN0ZWQgbmFtZXNwYWNlLgomIzQzOyAqCiYjNDM7ICogVGhlIHJldHVybmVkIHN0ZWVyaW5nIHRhZyBhbmQgcHJvY2Vzc2luZyBoaW50IGFyZSBvbmx5IHZhbGlkIHVudGlsIHRoZQomIzQzOyAqIGV4cG9ydGVyIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IG1hcHBpbmcgKHNpZ25hbGxlZCB0byB0aGUgaW1wb3J0ZXIgdmlhCiYjNDM7ICogJmFtcDtkbWFfYnVmX2F0dGFjaF9vcHMuaW52YWxpZGF0ZV9tYXBwaW5ncykuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3CiYjNDM7ICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLgomIzQzOyAqLwomIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCkKJiM0Mzt7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmICghZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiYjNDM7CiAvKioKICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDsKICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYwppbmRleCAwMjgwOTExNGZjNzlhLi5hMmI0OTdmNmIxNmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jCkBAIC02MCw2ICYjNDM7NjAsNyBAQAogTU9EVUxFX0FVVEhPUigmIzM0O0VsaSBDb2hlbiAmbHQ7ZWxpQG1lbGxhbm94LmNvbSZndDsmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNZWxsYW5veCA1dGggZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChDb25uZWN0WCBzZXJpZXMpIElCIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7RHVhbCBCU0QvR1BMJiMzNDspOwomIzQzO01PRFVMRV9JTVBPUlRfTlMoJiMzNDtETUFfQlVGJiMzNDspOwogCiBzdHJ1Y3QgbWx4NV9pYl9ldmVudF93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaAppbmRleCA1MjI5ODRkOTU4YmJmLi5jNmE5NTZiMmVlODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tbHg1X2liLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oCkBAIC02NDYsNiAmIzQzOzY0NiwxNSBAQCBlbnVtIG1seDVfbWtleV90eXBlIHsKIC8qIFVzZWQgZm9yIG5vbi1leGlzdGVudCBwaCB2YWx1ZSAqLwogI2RlZmluZSBNTFg1X0lCX05PX1BIIDB4ZmYKIAomIzQzO3N0cnVjdCBkbWFfYnVmOwomIzQzOwomIzQzO3N0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggewomIzQzOwl1MTYgc3RlZXJpbmdfdGFnOwomIzQzOwl1OCBwaDsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG1seDVfaWJfbWtleSB7CiAJdTMyIGtleTsKIAllbnVtIG1seDVfbWtleV90eXBlIHR5cGU7CkBAIC03MjYsNiAmIzQzOzczNSw3IEBAIHN0cnVjdCBtbHg1X2liX21yIHsKIAkJCXU4IHJldm9rZWQgOjE7CiAJCQkvKiBJbmRpY2F0ZXMgcHJldmlvdXMgZG1hYnVmIHBhZ2UgZmF1bHQgb2NjdXJyZWQgKi8KIAkJCXU4IGRtYWJ1Zl9mYXVsdGVkOjE7CiYjNDM7CQkJc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCBkbWFidWZfdHBoOwogCQkJc3RydWN0IG1seDVfaWJfbWtleSBudWxsX21ta2V5OwogCQl9OwogCX07CkBAIC0xMzQxLDYgJiM0MzsxMzUxLDcgQEAgc3RydWN0IGliX21yICptbHg1X2liX3JlcmVnX3VzZXJfbXIoc3RydWN0IGliX21yICppYl9tciwgaW50IGZsYWdzLCB1NjQgc3RhcnQsCiAJCQkJICAgIHU2NCBsZW5ndGgsIHU2NCB2aXJ0X2FkZHIsIGludCBhY2Nlc3NfZmxhZ3MsCiAJCQkJICAgIHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOwogaW50IG1seDVfaWJfZGVyZWdfbXIoc3RydWN0IGliX21yICppYm1yLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKJiM0MztpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zik7CiBzdHJ1Y3QgaWJfbXIgKm1seDVfaWJfYWxsb2NfbXIoc3RydWN0IGliX3BkICpwZCwgZW51bSBpYl9tcl90eXBlIG1yX3R5cGUsCiAJCQkgICAgICAgdTMyIG1heF9udW1fc2cpOwogc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yX2ludGVncml0eShzdHJ1Y3QgaWJfcGQgKnBkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmMKaW5kZXggZTZiNzQ5NTVkOTVkYy4uNDA0YzVkMDgxYjhhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jCkBAIC0zOSw2ICYjNDM7MzksNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtyZG1hL2ZybXJfcG9vbHMuaCZndDsKICNpbmNsdWRlICZsdDtyZG1hL2liX3VtZW1fb2RwLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2RtLmgmIzM0OwpAQCAtMTY3LDYgJiM0MzsxNjgsNjEgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwKICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyBHRU5NQVNLX1VMTCgyMywgMTYpCiAjZGVmaW5lIE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0sgR0VOTUFTS19VTEwoMTUsIDApCiAKJiM0MztzdGF0aWMgdTggbWx4NV9pYl90cGhfa2V5X3BoKHU4IHBoKQomIzQzO3sKJiM0MzsJaWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMCkKJiM0MzsJCXBoIF49IE1MWDVfSUJfTk9fUEg7CiYjNDM7CiYjNDM7CXJldHVybiBwaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiBtbHg1X3N0X2dldF9pbmRleChkZXYtJmd0O21kZXYsIHN0X2luZGV4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltbHg1X3N0X2RlYWxsb2NfaW5kZXgoZGV2LSZndDttZGV2LCBzdF9pbmRleCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiYjNDM7CQkJCSAgICAgIHU2NCBrZXJuZWxfdmVuZG9yX2tleSkKJiM0Mzt7CiYjNDM7CXUxNiBzdF9pbmRleCA9IEZJRUxEX0dFVChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLAomIzQzOwkJCQkga2VybmVsX3ZlbmRvcl9rZXkpOwomIzQzOwomIzQzOwltbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCAqdHBoID0gJmFtcDttci0mZ3Q7ZG1hYnVmX3RwaDsKJiM0MzsJdTE2IHN0ZWVyaW5nX3RhZzsKJiM0MzsJdTggcGg7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdHBoLSZndDt2YWxpZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwomIzQzOwlyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgdHBoLSZndDtleHRlbmRlZCwgJmFtcDtzdGVlcmluZ190YWcsICZhbXA7cGgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChzdGVlcmluZ190YWcgIT0gdHBoLSZndDtzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLSZndDtwaCkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKgogX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSwKIAkJICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLApAQCAtMTg5LDEzICYjNDM7MjQ1LDEwIEBAIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJCQlNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLIDoKIAkJCTA7CiAKLQkvKiBOb3JtYWxpemUgcGg6IHN3YXAgMCBhbmQgTUxYNV9JQl9OT19QSCAqLwotCWlmIChwaCA9PSBNTFg1X0lCX05PX1BIIHx8IHBoID09IDApCi0JCXBoIF49IE1MWDVfSUJfTk9fUEg7Ci0KIAltci0mZ3Q7aWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9CiAJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHwKLQkJRklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLCBwaCk7CiYjNDM7CQlGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0ssCiYjNDM7CQkJICAgbWx4NV9pYl90cGhfa2V5X3BoKHBoKSk7CiAJZXJyID0gaWJfZnJtcl9wb29sX3BvcCgmYW1wO2Rldi0mZ3Q7aWJfZGV2LCAmYW1wO21yLSZndDtpYm1yKTsKIAlpZiAoZXJyKSB7CiAJCWtmcmVlKG1yKTsKQEAgLTIxOCw3ICYjNDM7MjcxLDkgQEAgc3RydWN0IG1seDVfaWJfbXIgKm1seDVfbXJfY2FjaGVfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsCiAJCQkJICAgICAgMCA6CiAJCQkJICAgICAgTUxYNV9GUk1SX1BPT0xTX0tFWV9BQ0NFU1NfTU9ERV9LU01fTUFTSywKIAkJLm51bV9kbWFfYmxvY2tzID0gbmRlc2NzLAotCQkua2VybmVsX3ZlbmRvcl9rZXkgPSAwLCAvKiBubyBQSCBhbmQgbm8gU1QgaW5kZXggKi8KJiM0MzsJCS5rZXJuZWxfdmVuZG9yX2tleSA9CiYjNDM7CQkJRklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLAomIzQzOwkJCQkgICBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpLAogCX07CiAJc3RydWN0IG1seDVfaWJfbXIgKm1yOwogCWludCByZXQ7CkBAIC01NTcsNiAmIzQzOzYxMiwxMCBAQCBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKnJlZ19jcmVhdGUoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJbXItJmd0O2libXIucGQgPSBwZDsKIAltci0mZ3Q7YWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzOwogCW1yLSZndDtwYWdlX3NoaWZ0ID0gb3JkZXJfYmFzZV8yKHBhZ2Vfc2l6ZSk7CiYjNDM7CW1yLSZndDtpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5ID0KJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHwKJiM0MzsJCUZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywKJiM0MzsJCQkgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTsKIAogCWlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfbWtleV9pbik7CiAJaWYgKHBvcHVsYXRlKQpAQCAtNzUzLDYgJiM0Mzs4MTIsMTIgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJCQlzdF9pbmRleCA9IG1kbWFoLSZndDtzdF9pbmRleDsKIAl9CiAKJiM0MzsJZXJyID0gbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWJfdW1lbV9yZWxlYXNlKHVtZW0pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJfQomIzQzOwogCXhsdF93aXRoX3VtciA9IG1seDVyX3Vtcl9jYW5fbG9hZF9wYXMoZGV2LCB1bWVtLSZndDtsZW5ndGgpOwogCWlmICh4bHRfd2l0aF91bXIpIHsKIAkJbXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncywKQEAgLTc2OSw2ICYjNDM7ODM0LDcgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sCiAJCW11dGV4X3VubG9jaygmYW1wO2Rldi0mZ3Q7c2xvd19wYXRoX211dGV4KTsKIAl9CiAJaWYgKElTX0VSUihtcikpIHsKJiM0MzsJCW1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTsKIAkJaWJfdW1lbV9yZWxlYXNlKHVtZW0pOwogCQlyZXR1cm4gRVJSX0NBU1QobXIpOwogCX0KQEAgLTkwMyw2ICYjNDM7OTY5LDYzIEBAIHN0YXRpYyBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2hfb3BzIG1seDVfaWJfZG1hYnVmX2F0dGFjaF9vcHMgPSB7CiAJLmludmFsaWRhdGVfbWFwcGluZ3MgPSBtbHg1X2liX2RtYWJ1Zl9pbnZhbGlkYXRlX2NiLAogfTsKIAomIzQzO3N0YXRpYyB2b2lkIGdldF9wY2lfdHBoX21yX2RtYWJ1ZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKJiM0MzsJCQkJICBzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoICp0cGgsCiYjNDM7CQkJCSAgdTE2ICpzdF9pbmRleCwgdTggKnBoKQomIzQzO3sKJiM0MzsJdTE2IGxvY2FsX3N0X2luZGV4OwomIzQzOwl1MTYgc3RlZXJpbmdfdGFnOwomIzQzOwl1OCBsb2NhbF9waDsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoIChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKGRldi0mZ3Q7bWRldi0mZ3Q7cGRldikpIHsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9UUEhfT05MWToKJiM0MzsJCWV4dGVuZGVkID0gZmFsc2U7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOgomIzQzOwkJZXh0ZW5kZWQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpIG11c3QgcnVuIHVuZGVyIGRtYWJ1Zi0mZ3Q7cmVzdiwgYnV0IGRyb3AgdGhlIGxvY2sKJiM0MzsJICogYmVmb3JlIG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKCk6IHRoYXQgYWxsb2NhdGVzIHdpdGggR0ZQX0tFUk5FTCwKJiM0MzsJICogd2hpY2ggbXVzdCBub3QgcnVuIHVuZGVyIGRtYWJ1Zi0mZ3Q7cmVzdiBzaW5jZSByZWNsYWltIGNhbiByZS1lbnRlciB0aGUKJiM0MzsJICogc2FtZSByZXNlcnZhdGlvbiBvYmplY3QgdGhyb3VnaCBhIGR5bmFtaWMgZXhwb3J0ZXImIzM5O3MgbW92ZV9ub3RpZnkgcGF0aC4KJiM0MzsJICovCiYjNDM7CWRtYV9yZXN2X2xvY2soZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJcmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCAmYW1wO3N0ZWVyaW5nX3RhZywgJmFtcDtsb2NhbF9waCk7CiYjNDM7CWRtYV9yZXN2X3VubG9jayhkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAocmV0ICE9IC1FT1BOT1RTVVBQKQomIzQzOwkJCW1seDVfaWJfZGJnKGRldiwgJiMzNDtnZXRfcGNpX3RwaCBmYWlsZWQgKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LSZndDttZGV2LCBzdGVlcmluZ190YWcsCiYjNDM7CQkJCQkgJmFtcDtsb2NhbF9zdF9pbmRleCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1seDVfaWJfZGJnKGRldiwgJiMzNDtzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CSpzdF9pbmRleCA9IGxvY2FsX3N0X2luZGV4OwomIzQzOwkqcGggPSBsb2NhbF9waDsKJiM0MzsJdHBoLSZndDtzdGVlcmluZ190YWcgPSBzdGVlcmluZ190YWc7CiYjNDM7CXRwaC0mZ3Q7cGggPSBsb2NhbF9waDsKJiM0MzsJdHBoLSZndDtleHRlbmRlZCA9IGV4dGVuZGVkOwomIzQzOwl0cGgtJmd0O3ZhbGlkID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpCiYjNDM7ewomIzQzOwltbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLAomIzQzOwkJCQkgIG1yLSZndDtpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGliX21yICoKIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLAogCQkgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLApAQCAtOTEzLDYgJiM0MzsxMDM2LDcgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsCiAJc3RydWN0IG1seDVfaWJfZGV2ICpkZXYgPSB0b19tZGV2KHBkLSZndDtkZXZpY2UpOwogCXN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7CiAJc3RydWN0IGliX3VtZW1fZG1hYnVmICp1bWVtX2RtYWJ1ZjsKJiM0MzsJc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCB0cGggPSB7fTsKIAl1MTYgc3RfaW5kZXggPSBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVg7CiAJdTggcGggPSBNTFg1X0lCX05PX1BIOwogCWludCBlcnI7CkBAIC05NDUsMTggJiM0MzsxMDY5LDI5IEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLAogCQlwaCA9IGRtYWgtJmd0O3BoOwogCQlpZiAoZG1haC0mZ3Q7dmFsaWRfZmllbGRzICZhbXA7IEJJVChJQl9ETUFIX0NQVV9JRF9FWElTVFMpKQogCQkJc3RfaW5kZXggPSBtZG1haC0mZ3Q7c3RfaW5kZXg7CiYjNDM7CiYjNDM7CQllcnIgPSBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWliX3VtZW1fcmVsZWFzZSgmYW1wO3VtZW1fZG1hYnVmLSZndDt1bWVtKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJZ2V0X3BjaV90cGhfbXJfZG1hYnVmKGRldiwgdW1lbV9kbWFidWYtJmd0O2F0dGFjaC0mZ3Q7ZG1hYnVmLAomIzQzOwkJCQkgICAgICAmYW1wO3RwaCwgJmFtcDtzdF9pbmRleCwgJmFtcDtwaCk7CiAJfQogCiAJbXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsICZhbXA7dW1lbV9kbWFidWYtJmd0O3VtZW0sIHZpcnRfYWRkciwKIAkJCQlhY2Nlc3NfZmxhZ3MsIGFjY2Vzc19tb2RlLAogCQkJCXN0X2luZGV4LCBwaCk7CiAJaWYgKElTX0VSUihtcikpIHsKJiM0MzsJCW1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTsKIAkJaWJfdW1lbV9yZWxlYXNlKCZhbXA7dW1lbV9kbWFidWYtJmd0O3VtZW0pOwogCQlyZXR1cm4gRVJSX0NBU1QobXIpOwogCX0KIAogCW1seDVfaWJfZGJnKGRldiwgJiMzNDtta2V5IDB4JXhcbiYjMzQ7LCBtci0mZ3Q7bW1rZXkua2V5KTsKIAomIzQzOwltci0mZ3Q7ZG1hYnVmX3RwaCA9IHRwaDsKIAlhdG9taWNfYWRkKGliX3VtZW1fbnVtX3BhZ2VzKG1yLSZndDt1bWVtKSwgJmFtcDtkZXYtJmd0O21kZXYtJmd0O3ByaXYucmVnX3BhZ2VzKTsKIAl1bWVtX2RtYWJ1Zi0mZ3Q7cHJpdmF0ZSA9IG1yOwogCWlmICghcGlubmVkX21vZGUpIHsKQEAgLTE0MDUsNiAmIzQzOzE1NDAsNyBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKQogCWlmIChtci0mZ3Q7aWJtci5mcm1yLnBvb2wpIHsKIAkJaWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkgewogCQkJaWJfZnJtcl9wb29sX3B1c2gobXItJmd0O2libXIuZGV2aWNlLCAmYW1wO21yLSZndDtpYm1yKTsKJiM0MzsJCQltbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKG1yKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTQzMiw2ICYjNDM7MTU2OCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpCiAJaWYgKG1yLSZndDtpYm1yLmZybXIucG9vbCAmYW1wOyZhbXA7ICFyZXQpCiAJCWliX2ZybXJfcG9vbF9kcm9wKCZhbXA7bXItJmd0O2libXIpOwogCiYjNDM7CWlmICghcmV0KQomIzQzOwkJbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihtcik7CiYjNDM7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYwppbmRleCAxYmFkZWM5YmY1MjcwLi43YzE3MzFhYTNkZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYwpAQCAtODU3LDYgJiM0Mzs4NTcsMTMgQEAgc3RhdGljIGludCBwYWdlZmF1bHRfZG1hYnVmX21yKHN0cnVjdCBtbHg1X2liX21yICptciwgc2l6ZV90IGJjbnQsCiAJCXJldHVybiBlcnI7CiAJfQogCiYjNDM7CWVyciA9IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChtciwgdW1lbV9kbWFidWYtJmd0O2F0dGFjaC0mZ3Q7ZG1hYnVmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWJfdW1lbV9kbWFidWZfdW5tYXBfcGFnZXModW1lbV9kbWFidWYpOwomIzQzOwkJZG1hX3Jlc3ZfdW5sb2NrKHVtZW1fZG1hYnVmLSZndDthdHRhY2gtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiAJcGFnZV9zaXplID0gbWx4NV91bWVtX2RtYWJ1Zl9maW5kX2Jlc3RfcGdzeih1bWVtX2RtYWJ1ZiwgYWNjZXNzX21vZGUpOwogCWlmICghcGFnZV9zaXplKSB7CiAJCWliX3VtZW1fZG1hYnVmX3VubWFwX3BhZ2VzKHVtZW1fZG1hYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYwppbmRleCA3Y2VkYzM0ODc5MGRiLi5jNjJiY2FlN2M1NDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jCkBAIC05MiwyMyAmIzQzOzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpCiAJa2ZyZWUoc3QpOwogfQogCi1pbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLAomIzQzOwkJCSAgICAgICB1MTYgKnN0X2luZGV4KQogewogCXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKIAlzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtJmd0O3N0OwogCXVuc2lnbmVkIGxvbmcgaW5kZXg7CiAJdTMyIHhhX2lkOwotCXUxNiB0YWc7Ci0JaW50IHJldDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoIXN0KQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi0mZ3Q7cGRldiwgbWVtX3R5cGUsIGNwdV91aWQsICZhbXA7dGFnKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKHN0LSZndDtkaXJlY3RfbW9kZSkgewogCQkqc3RfaW5kZXggPSB0YWc7CiAJCXJldHVybiAwOwpAQCAtMTUyLDggJiM0MzsxNDcsNDkgQEAgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJbXV0ZXhfdW5sb2NrKCZhbXA7c3QtJmd0O2xvY2spOwogCXJldHVybiByZXQ7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpOwomIzQzOwomIzQzO2ludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCXVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KQomIzQzO3sKJiM0MzsJdTE2IHRhZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O3N0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi0mZ3Q7cGRldiwgbWVtX3R5cGUsIGNwdV91aWQsICZhbXA7dGFnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhkZXYsIHRhZywgc3RfaW5kZXgpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXgpOwogCiYjNDM7aW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKJiM0MzsJc3RydWN0IG1seDVfc3QgKnN0ID0gZGV2LSZndDtzdDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghc3QpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWlmIChzdC0mZ3Q7ZGlyZWN0X21vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3N0LSZndDtsb2NrKTsKJiM0MzsJaWR4X2RhdGEgPSB4YV9sb2FkKCZhbXA7c3QtJmd0O2lkeF94YSwgc3RfaW5kZXgpOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFpZHhfZGF0YSkpCiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwllbHNlCiYjNDM7CQlyZWZjb3VudF9pbmMoJmFtcDtpZHhfZGF0YS0mZ3Q7dXNlY291bnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtzdC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfZ2V0X2luZGV4KTsKJiM0MzsKIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KQogewogCXN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3RwaC5jIGIvZHJpdmVycy9wY2kvdHBoLmMKaW5kZXggNjU1ZmZkNjBlNjJmNi4uZDAyMDJmZjdhMWIyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvdHBoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvdHBoLmMKQEAgLTIwMCw2ICYjNDM7MjAwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZSk7CiBzdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpycDsKJiM0MzsJdTggdHBoX2NvbXA7CiAJdTMyIHJlZzsKIAlpbnQgcmV0OwogCkBAIC0yMTEsOCAmIzQzOzIxMiw2MCBAQCBzdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWlmIChyZXQpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKTsKJiM0MzsJLyoKJiM0MzsJICogMGIxMCBpcyByZXNlcnZlZDsgdHJlYXQgaXQgYXMgJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gb25seSB0aGUKJiM0MzsJICogYXJjaGl0ZWN0ZWQgZW5jb2RpbmdzIHJlYWNoIHRoZSBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkLgomIzQzOwkgKi8KJiM0MzsJdHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7CiYjNDM7CWlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHwKJiM0MzsJICAgIHRwaF9jb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKQomIzQzOwkJcmV0dXJuIHRwaF9jb21wOwomIzQzOwlyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguCiYjNDM7ICovCiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfcmVxX3R5cGU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlICYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWQmIzM0OyBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlCiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvCiYjNDM7ICogJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZQomIzQzOyAqIGRlZmluZWQgdmFsdWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLAomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvcgomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILgomIzQzOyAqLwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdTggdHBoX2NvbXA7CiYjNDM7CXUzMiByZWc7CiYjNDM7CiYjNDM7CWlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsICZhbXA7cmVnKSkKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsKJiM0MzsJaWYgKFBDSV9QT1NTSUJMRV9FUlJPUihyZWcpKQomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwomIzQzOwomIzQzOwkvKiAwYjEwIGlzIHJlc2VydmVkOyBmb2xkIGl0IGludG8gJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgKHNlZSBhYm92ZSkuICovCiYjNDM7CXRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpOwomIzQzOwlpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8CiYjNDM7CSAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSCkKJiM0MzsJCXJldHVybiB0cGhfY29tcDsKJiM0MzsJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwogfQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfY29tcGxldGVyX3R5cGUpOwogCiAvKiBXcml0ZSB0YWcgdG8gU1QgdGFibGUgLSBSZXR1cm4gMCBpZiBPSywgb3RoZXJ3aXNlIC1lcnJubyAqLwogc3RhdGljIGludCB3cml0ZV90YWdfdG9fc3RfdGFibGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpbmRleCwgdTE2IHRhZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggM2YxMWE5NjI0YjljMC4uNGU1ZTM0YTc3Yjc2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTE2MjUsNiAmIzQzOzE2MjUsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwogCWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOgogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwomIzQzOwljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsCiYjNDM7CQkJCQkJCSBhcmdzeik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMKaW5kZXggYzE2ZjQ2MGMwMWQ2OC4uZjYzMDE1ODIwNGI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCkBAIC0zLDYgJiM0MzszLDcgQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1yZXN2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7dmZpb19wY2lfcHJpdi5oJiMzNDsKQEAgLTE5LDcgJiM0MzsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7CiAJdTMyIG5yX3JhbmdlczsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Ci0JdTggcmV2b2tlZCA6IDE7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVwZGF0ZXMgcHJvdGVjdGVkIGJ5IGRtYWJ1Zi0mZ3Q7cmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5CiYjNDM7CSAqIHByb3RlY3RlZCBieSBtZW1vcnlfbG9jay4KJiM0MzsJICovCiYjNDM7CXUxNiB0cGhfc3RfZXh0OwomIzQzOwl1OCB0cGhfc3Q7CiYjNDM7CWJvb2wgcmV2b2tlZDsKJiM0MzsJdTggdHBoX3N0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF9zdF9leHRfdmFsaWQ6MTsKJiM0MzsJdTggdHBoX3BoOjI7CiB9OwogCiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCkBAIC0zMCw3ICYjNDM7NDEsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJaWYgKCFhdHRhY2htZW50LSZndDtwZWVyMnBlZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChwcml2LSZndDtyZXZva2VkKQomIzQzOwlpZiAoUkVBRF9PTkNFKHByaXYtJmd0O3Jldm9rZWQpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKQpAQCAtNjksNiAmIzQzOzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLAomIzQzOwkJCQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwomIzQzOwlkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtJmd0O3Jlc3YpOwomIzQzOwomIzQzOwlpZiAoZXh0ZW5kZWQpIHsKJiM0MzsJCWlmICghcHJpdi0mZ3Q7dHBoX3N0X2V4dF92YWxpZCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkqc3RlZXJpbmdfdGFnID0gcHJpdi0mZ3Q7dHBoX3N0X2V4dDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmICghcHJpdi0mZ3Q7dHBoX3N0X3ZhbGlkKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCSpzdGVlcmluZ190YWcgPSBwcml2LSZndDt0cGhfc3Q7CiYjNDM7CX0KJiM0MzsJKnBoID0gcHJpdi0mZ3Q7dHBoX3BoOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAJCQkJICAgc3RydWN0IHNnX3RhYmxlICpzZ3QsCiAJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQpAQCAtMTAxLDYgJiM0MzsxMzIsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZikKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0gewogCS5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCwKJiM0MzsJLmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCwKIAkubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCwKIAkudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsCiAJLnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsCkBAIC0zMzMsNiAmIzQzOzM2NSw4NiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQkgICAgICB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgICAgICBzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBzZXRfdHBoOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJdTggY29tcDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDtwY2lfb3BzIHx8ICF2ZGV2LSZndDtwY2lfb3BzLSZndDtnZXRfZG1hYnVmX3BoeXMpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCQkgc2l6ZW9mKHNldF90cGgpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChzZXRfdHBoLmZsYWdzICZhbXA7IH4oVkZJT19ETUFfQlVGX1RQSF9TVCB8IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoc2V0X3RwaC5waCAmYW1wOyB+MHgzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICgoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgJmFtcDsmYW1wOwomIzQzOwkgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwlpZiAoZG1hYnVmLSZndDtvcHMgIT0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEByZXZva2VkIGFuZCB0aGUgZG1hLWJ1Zi92ZGV2IGFzc29jaWF0aW9uIGFyZSB0b3JuIGRvd24gdW5kZXIKJiM0MzsJICogbWVtb3J5X2xvY2sgYnkgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCk7IGhvbGQgaXQgd2hpbGUgdmFsaWRhdGluZwomIzQzOwkgKiBvd25lcnNoaXAgYW5kIHB1Ymxpc2hpbmcgc28gdGhlIGRtYS1idWYgY2Fubm90IGJlIGRpc2Fzc29jaWF0ZWQgZnJvbQomIzQzOwkgKiBAdmRldiB1bmRlcm5lYXRoIHVzLiBMb2NrIG9yZGVyIG1lbW9yeV9sb2NrIC0mZ3Q7IGRtYWJ1Zi0mZ3Q7cmVzdiBtYXRjaGVzCiYjNDM7CSAqIHZmaW9fcGNpX2RtYV9idWZfbW92ZSgpLgomIzQzOwkgKi8KJiM0MzsJZG93bl9yZWFkKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7dmRldiAhPSB2ZGV2KSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfdW5sb2NrX21lbTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3VubG9ja19tZW07CiYjNDM7CiYjNDM7CXByaXYtJmd0O3RwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0OwomIzQzOwlwcml2LSZndDt0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUKTsKJiM0MzsJcHJpdi0mZ3Q7dHBoX3N0X2V4dF92YWxpZCA9CiYjNDM7CQkhIShzZXRfdHBoLmZsYWdzICZhbXA7IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTsKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CXJldCA9IDA7CiYjNDM7CiYjNDM7b3V0X3VubG9ja19tZW06CiYjNDM7CXVwX3JlYWQoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7b3V0X3B1dDoKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCkKIHsKIAlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKQEAgLTM0Nyw3ICYjNDM7NDU5LDcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpCiAJCWlmIChwcml2LSZndDtyZXZva2VkICE9IHJldm9rZWQpIHsKIAkJCWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKIAkJCWlmIChyZXZva2VkKQotCQkJCXByaXYtJmd0O3Jldm9rZWQgPSB0cnVlOwomIzQzOwkJCQlXUklURV9PTkNFKHByaXYtJmd0O3Jldm9rZWQsIHRydWUpOwogCQkJZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHByaXYtJmd0O2RtYWJ1Zik7CiAJCQlkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LAogCQkJCQkgICAgICBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCwgZmFsc2UsCkBAIC0zNjksNyAmIzQzOzQ4MSw3IEBAIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKQogCQkJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7CiAJCQl9IGVsc2UgewogCQkJCWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKLQkJCQlwcml2LSZndDtyZXZva2VkID0gZmFsc2U7CiYjNDM7CQkJCVdSSVRFX09OQ0UocHJpdi0mZ3Q7cmV2b2tlZCwgZmFsc2UpOwogCQkJCWRtYV9yZXN2X3VubG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YpOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCmluZGV4IGZjYTlkMGRmYWM5MGYuLjA2M2YzNzQ4NDc4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oCkBAIC0xMTgsNiAmIzQzOzExOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKIAkJCQkgIHNpemVfdCBhcmdzeik7CiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBmbGFncywKJiM0MzsJCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBhcmdzeik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpOwogI2Vsc2UKQEAgLTEyOCw2ICYjNDM7MTMyLDE1IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogewogCXJldHVybiAtRU5PVFRZOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwkJCQkgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU5PVFRZOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAppbmRleCBkMTIwM2RhNTZmYzVmLi4xNGU4ZWI2MWE2MmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaApAQCAtMTEzLDYgJiM0MzsxMTMsMjkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsKIAkgKi8KIAl2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiAKJiM0MzsJLyoqCiYjNDM7CSAqIEBnZXRfcGNpX3RwaDoKJiM0MzsJICoKJiM0MzsJICogUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIHN0ZWVyaW5nIG1ldGFkYXRhIGZvcgomIzQzOwkgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb24KJiM0MzsJICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLgomIzQzOwkgKgomIzQzOwkgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGEKJiM0MzsJICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVAomIzQzOwkgKiBAc3RlZXJpbmdfdGFnOiBSZXR1cm5zIHRoZSByYXcgVFBIIHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZAomIzQzOwkgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2UKJiM0MzsJICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSkKJiM0MzsJICoKJiM0MzsJICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGgKJiM0MzsJICogJmFtcDtkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVPUE5PVFNVUFAgd2hlbgomIzQzOwkgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS4KJiM0MzsJICoKJiM0MzsJICogUmV0dXJuZWQgbWV0YWRhdGEgZm9sbG93cyB0aGUgbGlmZXRpbWUgcnVsZXMgZG9jdW1lbnRlZCBmb3IKJiM0MzsJICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJICAgdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7CiYjNDM7CiAJLyoqCiAJICogQG1hcF9kbWFfYnVmOgogCSAqCkBAIC01NjMsNiAmIzQzOzU4Niw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKIAkJICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwomIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7CiAKIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgKaW5kZXggYjE4NzFjMDgyMWQwYi4uZDI2ZTU3NDRjODQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaApAQCAtMTE4MiwxNiAmIzQzOzExODIsMzEgQEAgaW50IG1seDVfZG1fc3dfaWNtX2RlYWxsb2Moc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSBtbHg1X3N3X2ljbV90eXBlIHR5cGUKIAkJCSAgIHU2NCBsZW5ndGgsIHUxNiB1aWQsIHBoeXNfYWRkcl90IGFkZHIsIHUzMiBvYmpfaWQpOwogCiAjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7aW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsCiYjNDM7CQkJICAgICAgIHUxNiAqc3RfaW5kZXgpOwomIzQzO2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpOwogaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJCQl1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7CiBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7CiAjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsCiYjNDM7CQkJCQkgICAgIHUxNiB0YWcsIHUxNiAqc3RfaW5kZXgpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsCiAJCQkJICAgICAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpCiB7CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9kZWFsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCkKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCmluZGV4IGJlNjhjZDE3ZjJmODMuLjc3NDNhZjZmZTQzMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oCkBAIC05LDYgJiM0Mzs5LDggQEAKICNpZm5kZWYgTElOVVhfUENJX1RQSF9ICiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSAogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaV9yZWdzLmgmZ3Q7CiYjNDM7CiAvKgogICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudAogICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGEKQEAgLTMwLDYgJiM0MzszMiw4IEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7CiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCXVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKQEAgLTQxLDYgJiM0Mzs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9CiYjNDM7c3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCmluZGV4IDVkZTYxOGEzYTVlZWUuLjRjMWM3MGFhYzE1MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaApAQCAtMTUzNCw2ICYjNDM7MTUzNCw0OSBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHsKICAqLwogI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTIKIAomIzQzOy8qKgomIzQzOyAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhCiYjNDM7ICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieQomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnQKJiM0MzsgKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHMKJiM0MzsgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvCiYjNDM7ICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsCiYjNDM7ICogcmV0dXJucyAtRU9QTk9UU1VQUC4KJiM0MzsgKgomIzQzOyAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuCiYjNDM7ICoKJiM0MzsgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZQomIzQzOyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIEBmbGFncyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSB2YWxpZGl0eSBtYXNrIGZvciB0aGUKJiM0MzsgKiB0d28gbmFtZXNwYWNlczogVkZJT19ETUFfQlVGX1RQSF9TVCBtYXJrcyBAc3RlZXJpbmdfdGFnIHZhbGlkIGFuZAomIzQzOyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlcgomIzQzOyAqIHJlcXVlc3RzIG9uZSBuYW1lc3BhY2UgYW5kIHJlY2VpdmVzIHRoZSBtYXRjaGluZyB2YWx1ZS4KJiM0MzsgKgomIzQzOyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJiMzOTtzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXMKJiM0MzsgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZAomIzQzOyAqIHRvIGZ1dHVyZSBpbXBvcnRlcnM7IGFuIGltcG9ydGVyIHRoYXQgaGFzIGFscmVhZHkgcmV0cmlldmVkIGEgdmFsdWUKJiM0MzsgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvcgomIzQzOyAqIGZ1dHVyZSBpbXBvcnRlcnMuCiYjNDM7ICoKJiM0MzsgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS4KJiM0MzsgKgomIzQzOyAqIFVuZGVmaW5lZCBAZmxhZ3MgYW5kIEBwaCBiaXRzIG11c3QgYWx3YXlzIGJlIHplcm8uCiYjNDM7ICoKJiM0MzsgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuCiYjNDM7ICogaW1wb3J0ZXIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzCiYjNDM7CiYjNDM7I2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUCQkoMSAmbHQ7Jmx0OyAwKQomIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQJCSgxICZsdDsmbHQ7IDEpCiYjNDM7CiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggewomIzQzOwlfX3MzMglkbWFidWZfZmQ7CiYjNDM7CV9fdTMyCWZsYWdzOwomIzQzOwlfX3UxNglzdGVlcmluZ190YWdfZXh0OwomIzQzOwlfX3U4CXN0ZWVyaW5nX3RhZzsKJiM0MzsJX191OAlwaDsKJiM0Mzt9OwomIzQzOwogLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovCiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGNoYW5nZXMgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIGxpc3Qgb2YgbW9kaWZpZWQgZmlsZXMgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWU6IGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCwgdGhlIG1seDUgaW5maW5pYmFuZCBzdHVmZiwgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYW5kIHNldmVyYWwgVkZJTyBmaWxlcyAoYHZmaW9fcGNpX2NvcmUuY2AsIGB2ZmlvX3BjaV9kbWFidWYuY2AsIGV0Yy4pLCBwbHVzIHJlbGV2YW50IGhlYWRlcnMuIFRoYXQmIzM5O3MgYSBkZWNlbnQgc3ByZWFkLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGludHJvZHVjaW5nIGEgYGdldF9wY2lfdHBoYCBkbWEtYnVmIG9wZXJhdGlvbiB0byByZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgbWV0YWRhdGEuIEEgbmV3IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpcyBhZGRlZCB0byBzZXQgdGhpcyBtZXRhZGF0YSBvbiBhIFZGSU8gZXhwb3J0ZWQgZG1hLWJ1ZiwgYW5kIGl0IGxvb2tzIGxpa2UgbWx4NSBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMuCgpOb3csIHdhaXQgYSBzZWNvbmQuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gc29tZSBleGVtcHRpb25zLiAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IC0gdGhhdCYjMzk7cyB0aGUgY2xhdXNlIEkgbmVlZCB0byBjb25zaWRlci4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IG1seDUgZml0cyB0aGlzIGRlc2NyaXB0aW9uLCByaWdodD8gVGhhdCBjb3VsZCBiZSBhIHF1aWNrIG91dCwgYnV0IGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgpCdXQgd2FpdC4gVGhpcyBwYXRjaCBpcyBicm9hZGVyIHRoYW4gKmp1c3QqIG1seDUuIEl0IG1vZGlmaWVzIGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCwgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYCDigJMgYW5kIGNydWNpYWxseSwgVkZJTyBjYW4gYmUgcmVhY2hlZCBpbiBRRU1VLCByaWdodD8gV2UgaGF2ZSB2ZmlvLXBjaSB3aGljaCBjYW4gcHJlc2VudCByZWFsIGRldmljZXMsIGJ1dCBteSBtZW1vcnkgaXMsIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBzeXprYWxsZXIgaGFzIHNvbWUgVkZJTyBkZXNjcmlwdGlvbnMuIFRoaXMgaXMgdGhlIGFuZ2xlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSXMgVkZJTyBmdXp6YWJsZT8gVGhlIGFuc3dlciBzaG91bGQgYmUgeWVzLiBTeXprYWxsZXIgaGFzIGBzeXpfa3ZtX3NldHVwX2NwdWAgYW5kIFZGSU8gc3R1ZmYsIHdoaWNoIGlzIHByb21pc2luZy4KClRoZSBrZXkgcXVlc3Rpb24gbm93IGJlY29tZXMgaWYgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaXMgcmVhY2hhYmxlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgcGF0aC4gT2theSwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIFdpdGggdGhlIFZGSU8gcGF0aCBvcGVuLCB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MTA9aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjgtXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjI5Olx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjMwLVx0XHRcdFx0XHRcdFx0IGFyZ3N6KTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zNjctXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM2ODppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY5LVx0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTExOD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTIwLVx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTIxOmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTIyLVx0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTEzNj1zdGF0aWMgaW5saW5lIGludFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTM3OnZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEzOC1cdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1OTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBOZXcgdmZpby1wY2kgUGF0Y2gqKgoKQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2FsbCBwYXRoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIG5ldyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSByZWFjaGFiaWxpdHkgb2YgYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIElzIHRoaXMgYSBuZXcgZW50cnkgcG9pbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyBhbHJlYWR5IHdlbGwtdHJvZGRlbj8gS25vd2luZyB0aGUgYW5zd2VyIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUsIGFuZCB0aGVyZWZvcmUgYWxzbyBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgdGVzdGluZyByZWdpbWUgcmVxdWlyZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IG90aGVyIGVudHJ5IHBvaW50cyBpbnZva2UgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNTgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX21pZ3JuX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1ODgtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBoaXNpX2FjY192ZmlvX2lvY3RsX2dldF9yZWdpb24sXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE1ODk6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE1OTAtXHQucmVhZCA9IGhpc2lfYWNjX3ZmaW9fcGNpX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYz0xNjAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGhpc2lfYWNjX3ZmaW9fcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MDktXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE2MTA6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jLTE2MTEtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM9MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIGlzbV9wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDItXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSBpc21fdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM0MzpcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNDQtXHQucmVhZCA9IGlzbV92ZmlvX3BjaV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9MTM4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBtbHg1dmZfcGNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzOTMtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jOjEzOTQ6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTEzOTUtXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3MS1cdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IG52Z3JhY2VfZ3B1X2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwNzI6XHQuZGV2aWNlX2ZlYXR1cmVcdD0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3My1cdC5yZWFkXHRcdD0gbnZncmFjZV9ncHVfcmVhZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9jb3JlX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk2LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA5NzpcdC5kZXZpY2VfZmVhdHVyZVx0PSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk4LVx0LnJlYWRcdFx0PSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYz0xOTE9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgcGRzX3ZmaW9fb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMTk4LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYzoxOTk6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTIwMC1cdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYz0xNDk9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNTYtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTU3Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE1OC1cdC5yZWFkXHRcdD0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE1ODM9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MDktXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjEwOmludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MTEtXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYzNC19XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjM1OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjM2LVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9sbV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkxLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjkyOlx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkzLVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV90cmFuX2xtX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTEzLVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmlydGlvdmZfcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxMTQ6XHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTE1LVx0LnJlYWQgPSB2aXJ0aW92Zl9wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMzUtXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTM2Olx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNy1cdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTUyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB4ZV92ZmlvX3BjaV9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTI5LVx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM6NTMwOlx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTMxLVx0LnJlYWQgPSB2ZmlvX3BjaV9jb3JlX3JlYWQsXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTc0PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3NS1cdFx0dW5zaWduZWQgbG9uZyBhcmcpO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTc2OmludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3Ny1cdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVkZJTyBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgZnVuY3Rpb24gYW5kIHNlZWluZyB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IGludGVncmF0ZWQgYXMgdGhlIGAuZGV2aWNlX2ZlYXR1cmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHZmaW9fcGNpX29wc2Agc3RydWN0dXJlLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLCByZWFjaGFibGUgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGEgVkZJTyBkZXZpY2UgZmlsZSBkZXNjcmlwdG9yLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGNhbiB0aGlzIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBgc3l6X2t2bV9zZXR1cF9jcHVgLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwsIGJ1dCB0aGVyZSBpcyBhbHNvIGEgYHN5cy9saW51eC92ZmlvLnR4dGAgZmlsZSB0aGF0IGV4cGxpY2l0bHkgZGVzY3JpYmVzIFZGSU8gaW9jdGxzLiBJIHNob3VsZCBjaGVjayBpZiBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaXMgZXZlbiB0YXJnZXRlZCBieSBzeXprYWxsZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VkZJT19ERVZJQ0VfRkVBVFVSRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vY2R4L21haW4uYz04ND1zdGF0aWMgaW50IHZmaW9fY2R4X2JtX2N0cmwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05Ny1cbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjk4Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05OS1cdFx0XHRcdCBzaXplb2Yob3BzKSk7XG4tLVxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTA2LVx0c3dpdGNoIChvcHMub3ApIHtcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjEwNzpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9DTEVBUl9NQVNURVI6XG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMDgtXHRcdHJldHVybiBjZHhfY2xlYXJfbWFzdGVyKGNkeF9kZXYpO1xuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM6MTA5Olx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVF9NQVNURVI6XG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMTAtXHRcdHJldHVybiBjZHhfc2V0X21hc3RlcihjZHhfZGV2KTtcbi0tXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYz0xMTY9c3RhdGljIGludCB2ZmlvX2NkeF9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTE4LXtcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjExOTpcdHN3aXRjaCAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSykge1xuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM6MTIwOlx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0JVU19NQVNURVI6XG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMjEtXHRcdHJldHVybiB2ZmlvX2NkeF9ibV9jdHJsKGRldmljZSwgZmxhZ3MsIGFyZywgYXJnc3opO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM9NDU5PXN0YXRpYyBsb25nIG1seDV2Zl9wcmVjb3B5X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtNTA5LVx0LypcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6NTEwOlx0ICogb3B0LWluIGZvciBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiBzZXJ2ZXNcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtNTExLVx0ICogYXMgb3B0LWluIGZvciBWRklPX1BSRUNPUFlfSU5GT19SRUlOSVQgYXMgd2VsbFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTM5ND1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfcG1fZW50cnkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMzk4LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Mzk5Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNDAwLVx0aWYgKHJldCAhPSAxKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTQxMj1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfcG1fZW50cnlfd2l0aF93YWtldXAoXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNDIwLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6NDIxOlx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00MjItXHRcdFx0XHQgc2l6ZW9mKGVudHJ5KSk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9NDY5PXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9wbV9leGl0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTQ3My1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjQ3NDpcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTQ3NS1cdGlmIChyZXQgIT0gMSlcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTgzPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk1LVx0ICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNTk2Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk3LVx0XHRcdFx0IHNpemVvZih1dWlkKSk7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTYxMD1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxNS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MTY6XHRzd2l0Y2ggKGZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX01BU0spIHtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MTc6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxOC1cdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfcG1fZW50cnkodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYxOTpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUllfV0lUSF9XQUtFVVA6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjIwLVx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9wbV9lbnRyeV93aXRoX3dha2V1cCh2ZGV2LCBmbGFncyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjEtXHRcdFx0XHRcdFx0XHQgIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyMjpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRVhJVDpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjMtXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX3BtX2V4aXQodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyNDpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU46XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjI1LVx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MjY6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjctXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjI4Olx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MjUzPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2Ni1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MjY3Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2OC1cdFx0XHRcdCBzaXplb2YoZ2V0X2RtYV9idWYpKTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4NS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Mzg2Olx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4Ny1cdFx0XHRcdCBzaXplb2Yoc2V0X3RwaCkpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz05MDc9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdfZGV2aWNlX3N0YXRlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MjAtXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjkyMTpcdFx0XHRcdCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCB8XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6OTIyOlx0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTkyMy1cdFx0XHRcdCBzaXplb2YobWlnKSk7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTkyOS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzo5MzA6XHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUKSB7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtOTMxLVx0XHRlbnVtIHZmaW9fZGV2aWNlX21pZ19zdGF0ZSBjdXJyX3N0YXRlO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NDAtXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6OTQxOlx0LyogSGFuZGxlIHRoZSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCAqL1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk0Mi1cdGZpbHAgPSBkZXZpY2UtXHUwMDNlbWlnX29wcy1cdTAwM2VtaWdyYXRpb25fc2V0X3N0YXRlKGRldmljZSwgbWlnLmRldmljZV9zdGF0ZSk7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTk1Nz12ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbl9kYXRhX3NpemUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk2Ny1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzo5Njg6XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NjktXHRcdFx0XHQgc2l6ZW9mKGRhdGFfc2l6ZSkpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz05ODU9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdyYXRpb25fcHJlY29weV9pbmZvX3YyKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05OTItXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6OTkzOlx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIDApO1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk5NC1cdGlmIChyZXQgIT0gMSlcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTAwMT1zdGF0aWMgaW50IHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMDEyLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEwMTM6XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMDE0LVx0XHRcdFx0IHNpemVvZihtaWcpKTtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTA4ND12ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RhcnQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTExMDMtXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjExMDQ6XHRcdFx0XHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTEwNS1cdFx0XHRcdCBzaXplb2YoY29udHJvbCkpO1xuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMTY4PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbG9nZ2luZ19zdG9wKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTc3LVx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMTc4Olx0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTc5LVx0aWYgKHJldCAhPSAxKVxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMTk1PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbG9nZ2luZ19yZXBvcnQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyMTAtXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyMTE6XHRcdFx0XHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTIxMi1cdFx0XHRcdCBzaXplb2YocmVwb3J0KSk7XG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTEyMzk9c3RhdGljIGludCB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjUyLVx0aWYgKGZlYXR1cmUuZmxhZ3MgXHUwMDI2XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI1MzpcdCAgICB+KFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSyB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIHxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU0Olx0ICAgICAgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFKSlcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjU1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI1Ny1cdC8qIEdFVCBcdTAwMjYgU0VUIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgZXhjZXB0IHdpdGggUFJPQkUgKi9cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU4Olx0aWYgKCEoZmVhdHVyZS5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI1OTpcdCAgICAoZmVhdHVyZS5mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjA6XHQgICAgKGZlYXR1cmUuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUKSlcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjYxLVx0XHRyZXR1cm4gLUVJTlZBTDtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjYyLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjM6XHRzd2l0Y2ggKGZlYXR1cmUuZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSykge1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjQ6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNjUtXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbihcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI2Ny1cdFx0XHRmZWF0dXJlLmFyZ3N6IC0gbWluc3opO1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjg6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX0RFVklDRV9TVEFURTpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjY5LVx0XHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdfZGV2aWNlX3N0YXRlKFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjcxLVx0XHRcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI3MjpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVEFSVDpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjczLVx0XHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3N0YXJ0KFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjc1LVx0XHRcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI3NjpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVE9QOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNzctXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RvcChcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI3OS1cdFx0XHRmZWF0dXJlLmFyZ3N6IC0gbWluc3opO1xuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODA6XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfUkVQT1JUOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODEtXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfcmVwb3J0KFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjgzLVx0XHRcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI4NDpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREFUQV9TSVpFOlxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODUtXHRcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbl9kYXRhX3NpemUoXG4tLVxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODctXHRcdFx0ZmVhdHVyZS5hcmdzeiAtIG1pbnN6KTtcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjg4Olx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MjpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjg5LVx0XHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdyYXRpb25fcHJlY29weV9pbmZvX3YyKFxuLS1cbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMzQ1PXN0YXRpYyBsb25nIHZmaW9fZGV2aWNlX2ZvcHNfdW5sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCxcbi0tXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTM3Ny1cdHN3aXRjaCAoY21kKSB7XG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTM3ODpcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRTpcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMzc5LVx0XHRyZXQgPSB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlKGRldmljZSwgdXB0cik7XG4tLVxuaW5jbHVkZS9saW51eC92ZmlvLmg9Mzk9c3RydWN0IHZmaW9fZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0xMTMtICogICAgICAgICAgICAgdGhpcyBkZXZpY2UgaXMgYXR0YWNoZWQgdG8uXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoxMTQ6ICogQGRldmljZV9mZWF0dXJlOiBPcHRpb25hbCwgZmlsbCBpbiB0aGUgVkZJT19ERVZJQ0VfRkVBVFVSRSBpb2N0bFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMTE1LSAqL1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTIwMj1zdGF0aWMgaW5saW5lIGJvb2wgdmZpb19kZXZpY2VfY2Rldl9vcGVuZWQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjExLSAqICAgICAgICAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgbWlncmF0aW9uLiBJdCYjMzk7cyBtYW5kYXRvcnkgZm9yXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyMTI6ICogICAgICAgICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTiBtaWdyYXRpb24gc3VwcG9ydC5cbmluY2x1ZGUvbGludXgvdmZpby5oLTIxMy0gKiAgICAgICAgIFRoZSByZXR1cm5lZCBGRCBpcyB1c2VkIGZvciBkYXRhIHRyYW5zZmVyIGFjY29yZGluZyB0byB0aGUgRlNNXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjE4LSAqICAgICAgICAgZGV2aWNlcyB0aGF0IHN1cHBvcnQgbWlncmF0aW9uLiBJdCYjMzk7cyBtYW5kYXRvcnkgZm9yXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyMTk6ICogICAgICAgICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTiBtaWdyYXRpb24gc3VwcG9ydC5cbmluY2x1ZGUvbGludXgvdmZpby5oLTIyMC0gKiBAbWlncmF0aW9uX2dldF9kYXRhX3NpemU6IE9wdGlvbmFsIGNhbGxiYWNrIHRvIGdldCB0aGUgZXN0aW1hdGVkIGRhdGFcbmluY2x1ZGUvbGludXgvdmZpby5oLTIyMS0gKiAgICAgICAgICBsZW5ndGggdGhhdCB3aWxsIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHN0b3AgY29weS4gSXQmIzM5O3MgbWFuZGF0b3J5IGZvclxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjIyOiAqICAgICAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIG1pZ3JhdGlvbiBzdXBwb3J0LlxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjIzLSAqL1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTI0OT1zdHJ1Y3QgdmZpb19sb2dfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNTgtLyoqXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNTk6ICogdmZpb19jaGVja19mZWF0dXJlIC0gVmFsaWRhdGUgdXNlciBpbnB1dCBmb3IgdGhlIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGxcbmluY2x1ZGUvbGludXgvdmZpby5oLTI2MC0gKiBAZmxhZ3M6IEFyZyBmcm9tIHRoZSBkZXZpY2VfZmVhdHVyZSBvcFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYxLSAqIEBhcmdzejogQXJnIGZyb20gdGhlIGRldmljZV9mZWF0dXJlIG9wXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNjI6ICogQHN1cHBvcnRlZF9vcHM6IENvbWJpbmF0aW9uIG9mIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIGFuZCBTRVQgdGhlIGRyaXZlclxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYzLSAqICAgICAgICAgICAgICAgICBzdXBwb3J0c1xuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oLTI2Ni0gKiBGb3IgdXNlIGluIGEgZHJpdmVyJiMzOTtzIGRldmljZV9mZWF0dXJlIG9wLiBDaGVja3MgdGhhdCB0aGUgaW5wdXRzIHRvIHRoZVxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjY3OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgYXJlIGNvcnJlY3QgZm9yIHRoZSBkcml2ZXImIzM5O3MgZmVhdHVyZS4gUmV0dXJucyAxIGlmXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNjgtICogdGhlIGRyaXZlciBzaG91bGQgZXhlY3V0ZSB0aGUgZ2V0IG9yIHNldCwgb3RoZXJ3aXNlIHRoZSByZWxldmFudFxuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oPTI3MT1zdGF0aWMgaW5saW5lIGludCB2ZmlvX2NoZWNrX2ZlYXR1cmUodTMyIGZsYWdzLCBzaXplX3QgYXJnc3osIHUzMiBzdXBwb3J0ZWRfb3BzLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpby5oLTI3My17XG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNzQ6XHRpZiAoKGZsYWdzIFx1MDAyNiAoVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCkpIFx1MDAyNlxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjc1LVx0ICAgIH5zdXBwb3J0ZWRfb3BzKVxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjc2LVx0XHRyZXR1cm4gLUVJTlZBTDtcbmluY2x1ZGUvbGludXgvdmZpby5oOjI3NzpcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSlcbmluY2x1ZGUvbGludXgvdmZpby5oLTI3OC1cdFx0cmV0dXJuIDA7XG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNzktXHQvKiBXaXRob3V0IFBST0JFIG9uZSBvZiBHRVQgb3IgU0VUIG11c3QgYmUgcmVxdWVzdGVkICovXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyODA6XHRpZiAoIShmbGFncyBcdTAwMjYgKFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpKSlcbmluY2x1ZGUvbGludXgvdmZpby5oLTI4MS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lvbW11ZmQuaD0yMTE9c3RydWN0IGlvbW11X2lvYXNfbWFwIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oLTIzNC0gKiBkbWEtYnVmIGltcG9ydCBwYXRoOyBjdXJyZW50bHkgc3VwcG9ydGVkIGRtYS1idWZzIGluY2x1ZGUgc2luZ2xlLXJhbmdlXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oOjIzNTogKiBWRklPIFBDSSBkbWEtYnVmcyBleHBvcnRlZCB0aHJvdWdoIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgYW5kXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oLTIzNi0gKiBvdGhlciBkbWEtYnVmcyBtYXkgYmUgcmVqZWN0ZWQuIEFsbCBvdGhlciBhcmd1bWVudHMgYW5kIHNlbWFudGljcyBtYXRjaFxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9ODYxPXN0cnVjdCB2ZmlvX2RldmljZV9pb2V2ZW50ZmQge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODc3LS8qKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4Nzg6ICogVkZJT19ERVZJQ0VfRkVBVFVSRSAtIF9JT1dSKFZGSU9fVFlQRSwgVkZJT19CQVNFICYjNDM7IDE3LFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NzktICpcdFx0XHQgICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmUpXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD04OTM9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtODk1LVx0X191MzJcdGZsYWdzO1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4OTY6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01BU0tcdCgweGZmZmYpIC8qIDE2LWJpdCBmZWF0dXJlIGluZGV4ICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjg5NzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUXHRcdCgxIFx1MDAzY1x1MDAzYyAxNikgLyogR2V0IGZlYXR1cmUgaW50byBkYXRhW10gKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODk4OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVRcdFx0KDEgXHUwMDNjXHUwMDNjIDE3KSAvKiBTZXQgZmVhdHVyZSBmcm9tIGRhdGFbXSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4OTk6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFXHQoMSBcdTAwM2NcdTAwM2MgMTgpIC8qIFByb2JlIGZlYXR1cmUgc3VwcG9ydCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDAtXHRfX3U4XHRkYXRhW107XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDItXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjkwMzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVcdFx0X0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICYjNDM7IDE3KVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDQtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MTMtICogQHRva2VuX3V1aWRfcHRyOiBWYWxpZCBpZiBWRklPX0RFVklDRV9CSU5EX0ZMQUdfVE9LRU4uIFBvaW50cyB0byBhIDE2IGJ5dGVcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6OTE0OiAqICAgICAgICAgICAgICAgICAgVVVJRCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU4uXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTkxNS0gKlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtOTI1LSAqIGlnbm9yZWQuIFRoZSBvbmx5IGNhc2UgdG9kYXkgaXMgYSBQRi9WRiByZWxhdGlvbnNoaXAgd2hlcmUgdGhlIFZGIGJpbmQgbXVzdFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo5MjY6ICogYmUgcHJvdmlkZWQgdGhlIHNhbWUgdG9rZW4gYXMgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU4gcHJvdmlkZWQgdG9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtOTI3LSAqIHRoZSBQRi5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTk5Nj1zdHJ1Y3QgdmZpb19kZXZpY2VfZGV0YWNoX2lvbW11ZmRfcHQge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMS0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTAxMjojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOXHQoMClcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMy1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwMTUtICogSW5kaWNhdGVzIHRoZSBkZXZpY2UgY2FuIHN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBBUEkgdGhyb3VnaFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDE2OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX0RFVklDRV9TVEFURS4gSWYgdGhpcyBHRVQgc3VjY2VlZHMsIHRoZSBSVU5OSU5HIGFuZFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDE3LSAqIEVSUk9SIHN0YXRlcyBhcmUgYWx3YXlzIHN1cHBvcnRlZC4gU3VwcG9ydCBmb3IgYWRkaXRpb25hbCBzdGF0ZXMgaXNcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEwMzY9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNDEtfTtcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTA0MjojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIDFcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA0My1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA0NC0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDQ1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGV4ZWN1dGUgYSBtaWdyYXRpb24gc3RhdGUgY2hhbmdlIG9uIHRoZSBWRklPXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNDYtICogZGV2aWNlLiBUaGUgbmV3IHN0YXRlIGlzIHN1cHBsaWVkIGluIGRldmljZV9zdGF0ZSwgc2VlIGVudW1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNjgtICpcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTA2OTogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULCBnZXQgdGhlIGN1cnJlbnQgbWlncmF0aW9uIHN0YXRlIG9mIHRoZSBWRklPXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNzAtICogZGV2aWNlLCBkYXRhX2ZkIHdpbGwgYmUgLTEuXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xMDcyPXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX21pZ19zdGF0ZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDc1LX07XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEwNzY6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19ERVZJQ0VfU1RBVEUgMlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDc3LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTE5Mi0gKiAgIHN1cHBvcnQgd2lsbCBiZSBkaXNjb3ZlcmFibGUgYnkgYSBuZXcgZmxhZyBpblxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMTkzOiAqICAgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdSQVRJT04uXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTExOTQtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEyMzEtICogc3VwcG9ydCB0aGVtLiBUaGUgdXNlciBjYW4gZGlzY292ZXIgaWYgdGhlc2Ugc3RhdGVzIGFyZSBzdXBwb3J0ZWQgYnkgdXNpbmdcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTIzMjogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTi4gQnkgdXNpbmcgY29tYmluYXRpb24gdHJhbnNpdGlvbnMgdGhlIHVzZXIgY2FuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEyMzMtICogYXZvaWQga25vd2luZyBhYm91dCB0aGVzZSBvcHRpb25hbCBzdGF0ZXMgaWYgdGhlIGtlcm5lbCBkcml2ZXIgc3VwcG9ydHMgdGhlbS5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEyMzg9ZW51bSB2ZmlvX2RldmljZV9taWdfc3RhdGUge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTI3OC0gKiBWRklPX1BSRUNPUFlfSU5GT19SRUlOSVQgY2FuIGJlIHJlcG9ydGVkIG9ubHkgYWZ0ZXIgdXNlcnNwYWNlIG9wdHMgaW4gdG9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTI3OTogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92Mi4gV2l0aG91dCB0aGlzIG9wdC1pbiwgdGhlIGZsYWdzIGZpZWxkXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEyODAtICogb2Ygc3RydWN0IHZmaW9fcHJlY29weV9pbmZvIGlzIHJlc2VydmVkIGZvciBidWctY29tcGF0aWJpbGl0eSByZWFzb25zLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTMxND1zdHJ1Y3QgdmZpb19wcmVjb3B5X2luZm8ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTMyNC0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzI1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGFsbG93IHRoZSBkZXZpY2UgdG8gYmUgbW92ZWQgaW50byBhIGxvdyBwb3dlclxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzI2LSAqIHN0YXRlIHdpdGggdGhlIHBsYXRmb3JtLWJhc2VkIHBvd2VyIG1hbmFnZW1lbnQuICBEZXZpY2UgdXNlIG9mIGxvd2VyIHBvd2VyXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzM2LSAqIHdpdGggd2FrZS11cCBub3RpZmljYXRpb24sIHNlZVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzM3OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZX1dJVEhfV0FLRVVQIGJlbG93LiAgQWNjZXNzIHRvIG1tYXAmIzM5O2RcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTMzOC0gKiBkZXZpY2UgcmVnaW9ucyBpcyBkaXNhYmxlZCBvbiBMT1dfUE9XRVJfRU5UUlkgYW5kIG1heSBvbmx5IGJlIHJlc3VtZWQgYWZ0ZXJcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNDAtICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNDE6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSAzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNDItXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzQ0LSAqIFRoaXMgZGV2aWNlIGZlYXR1cmUgaGFzIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNDU6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUlkgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIHVzZXJcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0Ni0gKiBwcm92aWRlcyBhbiBldmVudGZkIGZvciB3YWtlLXVwIG5vdGlmaWNhdGlvbi4gIFdoZW4gdGhlIGRldmljZSBtb3ZlcyBvdXQgb2Zcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEzNjQ9c3RydWN0IHZmaW9fZGV2aWNlX2xvd19wb3dlcl9lbnRyeV93aXRoX3dha2V1cCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzY4LVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzY5OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUllfV0lUSF9XQUtFVVAgNFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzcwLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzcxLS8qXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzI6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgZGlzYWxsb3cgdXNlIG9mIGRldmljZSBsb3cgcG93ZXIgc3RhdGVzIGFzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzM6ICogcHJldmlvdXNseSBlbmFibGVkIHZpYSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSBvclxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzc0OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZX1dJVEhfV0FLRVVQIGRldmljZSBmZWF0dXJlcy5cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3NS0gKiBUaGlzIGRldmljZSBmZWF0dXJlIElPQ1RMIG1heSBpdHNlbGYgZ2VuZXJhdGUgYSB3YWtldXAgZXZlbnRmZCBub3RpZmljYXRpb25cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNzctICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzg6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FWElUIDVcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3OS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4MC0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzgxOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgc3RhcnQvc3RvcCBkZXZpY2UgRE1BIGxvZ2dpbmcuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODI6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgdGhlIGRldmljZSBzdXBwb3J0c1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzgzLSAqIERNQSBsb2dnaW5nLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4OC0gKiBkdXJpbmcgdGhlIHByZSBjb3B5IHBoYXNlIG9mIGxpdmUgbWlncmF0aW9uLiBPbmx5IERNQSBXUklURXMgYXJlIGxvZ2dlZCxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM4OTogKiBhbmQgdGhpcyBBUEkgaXMgbm90IGNvbm5lY3RlZCB0byBWRklPX0RFVklDRV9GRUFUVVJFX01JR19ERVZJQ0VfU1RBVEUuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzOTAtICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTE0MTg9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2xvZ2dpbmdfcmFuZ2Uge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQyMi1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQyMzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfU1RBUlQgNlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI0LVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI1LS8qXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0MjY6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBzdG9wIGRldmljZSBETUEgbG9nZ2luZyB0aGF0IHdhcyBzdGFydGVkXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0Mjc6ICogYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVEFSVFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI4LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDI5OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVE9QIDdcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMC1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMS0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDMyOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgcmVhZCBiYWNrIGFuZCBjbGVhciB0aGUgZGV2aWNlIERNQSBsb2dcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMy0gKlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ0Mi0gKiBUaGUgaW5wdXQgcGFnZV9zaXplIGNhbiBiZSBhbnkgcG93ZXIgb2YgdHdvIHZhbHVlIGFuZCBkb2VzIG5vdCBoYXZlIHRvXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0NDM6ICogbWF0Y2ggdGhlIHZhbHVlIGdpdmVuIHRvIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfU1RBUlQuIFRoZSBkcml2ZXJcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ0NC0gKiB3aWxsIGZvcm1hdCBpdHMgaW50ZXJuYWwgbG9nZ2luZyB0byBtYXRjaCB0aGUgcmVwb3J0aW5nIHBhZ2Ugc2l6ZSwgcG9zc2libHlcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTE0NTc9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2xvZ2dpbmdfcmVwb3J0IHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjMtXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0NjQ6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1JFUE9SVCA4XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjUtXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjYtLypcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ2NzogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHJlYWQgYmFjayB0aGUgZXN0aW1hdGVkIGRhdGEgbGVuZ3RoIHRoYXQgd2lsbFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDY4LSAqIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHN0b3AgY29weS5cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTE0NzM9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfbWlnX2RhdGFfc2l6ZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDc2LVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDc3OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREFUQV9TSVpFIDlcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3OC1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3OS0vKipcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ4MDogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCBzZXQgb3IgY2xlYXIgdGhlIEJVUyBtYXN0ZXJpbmcgZm9yIHRoZSBkZXZpY2VcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ4MS0gKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHNwZWNpZmllZCBpbiBvcCBmbGFnLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTQ5Mz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9idXNfbWFzdGVyIHtcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5NC1cdF9fdTMyIG9wO1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDk1OiNkZWZpbmVcdFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9DTEVBUl9NQVNURVJcdDBcdC8qIENsZWFyIEJ1cyBNYXN0ZXIgKi9cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ5NjojZGVmaW5lXHRcdFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUX01BU1RFUlx0XHQxXHQvKiBTZXQgQnVzIE1hc3RlciAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDk3LX07XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0OTg6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0JVU19NQVNURVIgMTBcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5OS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUwMC0vKipcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTUwMTogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIGNyZWF0ZSBhIGRtYV9idWYgZmQgZm9yIHRoZVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTAyLSAqIHJlZ2lvbnMgc2VsZWN0ZWQuXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTExLSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTEyOiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIDExXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MTMtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNTE5PXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUyOS0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTMwOiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyLlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTMxLSAqXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTM0LSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTM1OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MzYtXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MzctLyoqXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1Mzg6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUzOS0gKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1NDA6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTQxLSAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0NS0gKlxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTQ2OiAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NDctICpcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NjYtICovXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1Njc6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NjgtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmM9MTE4PXN0YXRpYyBpbnQgdmZpb19kZXZpY2VfZmVhdHVyZV9pb2N0bChpbnQgZmQsIHUzMiBmbGFncywgdm9pZCAqZGF0YSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYy0xMjgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYzoxMjk6XHRyZXR1cm4gaW9jdGwoZmQsIFZGSU9fREVWSUNFX0ZFQVRVUkUsIGZlYXR1cmUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMtMTMwLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xMzI9c3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmVhdHVyZV9zZXQoaW50IGZkLCB1MTYgZmVhdHVyZSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTEzMy17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYzoxMzQ6XHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCB8IGZlYXR1cmU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYy0xMzUtXHRpbnQgcmV0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jPTE0MT12b2lkIHZmaW9fZGV2aWNlX3NldF92Zl90b2tlbihpbnQgZmQsIGNvbnN0IGNoYXIgKnZmX3Rva2VuKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0Ny1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jOjE0ODpcdHZmaW9fZGV2aWNlX2ZlYXR1cmVfc2V0KGZkLCBWRklPX0RFVklDRV9GRUFUVVJFX1BDSV9WRl9UT0tFTixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0OS1cdFx0XHRcdHRva2VuX3V1aWQsIHNpemVvZih1dWlkX3QpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk3NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgVkZJTyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgLCBhIG5ldyBmZWF0dXJlIGZvciB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLiBJdCBhbHNvIGNoYW5nZXMgdGhlIE1lbGxhbm94IENvbm5lY3RYIGRyaXZlciwgYGRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L2AsIHRvIHVzZSB0aGlzIGRtYS1idWYgVFBIIG1ldGFkYXRhLiBUaGUga2V5IHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgYmUgZnV6emluZy4KClRoZSBpbnN0cnVjdGlvbnMgSSYjMzk7bSB3b3JraW5nIGZyb20gc2F5IHRvIHNraXAgaXQgaWYgaXQmIzM5O3Mgb25seSBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCAqcGh5c2ljYWwqIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIHRoZSBjcnV4LiBOb3csIG1seDUgaXMgYSBNZWxsYW5veCBDb25uZWN0WCBkcml2ZXIsIGFuZCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLiBJIGhhdmUgYSBsaXN0IGhlcmU6IGBody9uZXQvcm9ja2VyLmNgLCBgaHcvbmV0L2UxMDAwLmNgLCBgaHcvbmV0L3ZpcnRpby1uZXQuY2AsIGBody9uZXQvdm14bmV0My5jYC4uLiBidXQgbm8gbWx4NS4KCkhvd2V2ZXIsIHRoZSBwYXRjaCBkb2VzbiYjMzk7dCBqdXN0IHRvdWNoIG1seDUuIEl0IGFsc28gbW9kaWZpZXMgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNgLiAqVGhhdCogY2hhbmdlcyB0aGluZ3MuIElzIFZGSU8gUENJIGVtdWxhdGVkPyBZZXMsIFFFTVUgaGFzIGB2ZmlvLXBjaWAuIEJ1dCBgdmZpby1wY2lgIGlzICp1c3VhbGx5KiB1c2VkIHRvIHBhc3MgdGhyb3VnaCBwaHlzaWNhbCBkZXZpY2VzLCBub3QgZW11bGF0ZWQgb25lcy4gU28sIHRoZSBxdWVzdGlvbiByZW1haW5zOiBDYW4gd2UgdGVzdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCB3aXRob3V0IG5lZWRpbmcgYSBwaHlzaWNhbCBkZXZpY2U/CgpMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGA6CgpgYGBjCglpZiAoIXZkZXYtJmd0O3BjaV9vcHMgfHwgIXZkZXYtJmd0O3BjaV9vcHMtJmd0O2dldF9kbWFidWZfcGh5cykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJY29tcCA9IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpOwoJaWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpCgkJcmV0dXJuIC1FT1BOT1RTVVBQOwpgYGAKClJpZ2h0LCBpdCByZXF1aXJlcyBgdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzYC4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcG9pbnQuIFdobyBzZXRzIGBnZXRfZG1hYnVmX3BoeXNgPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZnV6emFibGUgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2RtYWJ1Zl9waHlzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTk5Nj1udmdyYWNlX2dwdV93cml0ZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDE5LVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTAyMDpzdGF0aWMgaW50IG52Z3JhY2VfZ2V0X2RtYWJ1Zl9waHlzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqY29yZV92ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTAyMS1cdFx0XHRcdCAgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDU1LVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA1NjpcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyhjb3JlX3ZkZXYsIHByb3ZpZGVyLCByZWdpb25faW5kZXgsXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDU3LVx0XHRcdFx0XHQgICAgIHBoeXNfdmVjLCBkbWFfcmFuZ2VzLCBucl9yYW5nZXMpO1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9kZXZfb3BzID0ge1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA2MTpcdC5nZXRfZG1hYnVmX3BoeXMgPSBudmdyYWNlX2dldF9kbWFidWZfcGh5cyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNjItfTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMDg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlX29wcyBudmdyYWNlX2dwdV9wY2lfZGV2X2NvcmVfb3BzID0ge1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA4NjpcdC5nZXRfZG1hYnVmX3BoeXMgPSB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwODctfTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM9MTcyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlX29wcyB2ZmlvX3BjaV9kZXZfb3BzID0ge1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjE3MzpcdC5nZXRfZG1hYnVmX3BoeXMgPSB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xNzQtfTtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTIwMj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2ZpbGxfcGh5c192ZWMpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yMDMtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjIwNDppbnQgdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yMDUtXHRcdFx0XHQgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTIyMS19XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjIyMjpFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTIyMy1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjMtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjI2NDpcdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjUtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTMwOC1cdHByaXYtXHUwMDNlc2l6ZSA9IGxlbmd0aDtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MzA5Olx0cmV0ID0gdmRldi1cdTAwM2VwY2lfb3BzLVx1MDAzZWdldF9kbWFidWZfcGh5cyh2ZGV2LCBcdTAwMjZwcml2LVx1MDAzZXByb3ZpZGVyLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zMTAtXHRcdFx0XHRcdCAgICAgZ2V0X2RtYV9idWYucmVnaW9uX2luZGV4LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MzY4PWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzc4LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNzk6XHRpZiAoIXZkZXYtXHUwMDNlcGNpX29wcyB8fCAhdmRldi1cdTAwM2VwY2lfb3BzLVx1MDAzZWdldF9kbWFidWZfcGh5cylcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzgwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9NjA9c3RydWN0IHZmaW9fcGNpX2RldmljZV9vcHMge1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6NjE6XHRpbnQgKCpnZXRfZG1hYnVmX3BoeXMpKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTYyLVx0XHRcdCAgICAgICBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICoqcHJvdmlkZXIsXG4tLVxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9NzA9aW50IHZmaW9fcGNpX2NvcmVfZmlsbF9waHlzX3ZlYyhzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTczLVx0XHRcdFx0cGh5c19hZGRyX3QgbGVuKTtcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjc0OmludCB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC03NS1cdFx0XHRcdCAgc3RydWN0IHAycGRtYV9wcm92aWRlciAqKnByb3ZpZGVyLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTgyPXZmaW9fcGNpX2NvcmVfZmlsbF9waHlzX3ZlYyhzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjLFxuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTg4LX1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjg5OnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZ2V0X2RtYWJ1Zl9waHlzKFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtOTAtXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4NjgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkZJTyBhbmQgRE1BLUJVRiBTdXBwb3J0KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgdmZpb19wY2lfZGV2X29wc2AgYW5kIHNlZSB0aGF0IGBnZXRfZG1hYnVmX3BoeXNgIGlzIHNldCB0byBgdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXNgIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNgLiBSaWdodCwgc28gc3RhbmRhcmQgYHZmaW8tcGNpYCBzaG91bGQsIGluIHRoZW9yeSwgc3VwcG9ydCBETUEtQlVGIGludGVncmF0aW9uLiBCdXQgaG9sZCBvbiwgdGhlcmUmIzM5O3MgYSBjcnVjaWFsIGNoZWNrIHdpdGhpbiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYDogaXQgY2FsbHMgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYC4gVGhpcywgaW4gdHVybiwgY2hlY2tzIGlmIHRoZSBUUEggY29tcGxldGVyIHR5cGUgaXMgc3VwcG9ydGVkOyBpZiBub3QsIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCYjMzk7cyB0aGUgc25hZy4KCk5vdywgbXkgbWFpbiBxdWVzdGlvbiBpczogZG9lcyBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50LCBhY3R1YWxseSAqZW11bGF0ZSogYSBQQ0kgZGV2aWNlIHdpdGggVFBIIGNvbXBsZXRlciBzdXBwb3J0PyBJdCYjMzk7cyBhIFBDSWUgZmVhdHVyZSwgc28gaWYgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0IHByb3Blcmx5LCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIHdpbGwgcmV0dXJuIHRoYXQgZHJlYWRlZCBgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgUUVNVSBoYW5kbGVzIHRoaXMuIEkga25vdyB0aGF0IGBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZWAgaXMgcmVhZGluZyBmcm9tIHRoZSBgUENJX0VYUF9ERVZDQVAyYCByZWdpc3Rlci4gU28sIGNhbiBhIHZpcnR1YWwgUENJIGRldmljZSBpbnNpZGUgUUVNVSBldmVuICpoYXZlKiBUUEggY29tcGxldGVyIHN1cHBvcnQ/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24uCgpOZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZXNlIHRlc3RzIGFyZSBydW4uIENvdWxkIGBzeXprYWxsZXJgIGluamVjdCBQQ0kgZGV2aWNlcyB3aXRoIFRQSCB0byB0ZXN0PyBJIGtub3cgdGhhdCBgc3l6a2FsbGVyYCBkb2VzbiYjMzk7dCBoYXZlIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlIGluamVjdG9yIHRoYXQgSSYjMzk7bSBhd2FyZSBvZiwgYW5kIGl0IHVzZXMgUUVNVSB0byB0ZXN0LiBCdXQgd2hhdCBhYm91dCB2aXJ0dWFsIEhDSSBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGBzeXprYWxsZXJgIHJ1bnMgb24gUUVNVSwgc28gdGhlIHZpcnR1YWwgUENJIGRldmljZXMgd291bGQgZGVwZW5kIG9uIFFFTVUuIEJ1dCB0aGVuIGl0IHN0cnVjayBtZSwgYW5kIEkgcmVhbGlzZWQgdGhhdCBWRklPIGRldmljZXMgYXJlIHVzdWFsbHkgcGh5c2ljYWwgZGV2aWNlcyBwYXNzZWQgdGhyb3VnaC4KCkZpbmFsbHksIGRvZXMgYHN5emthbGxlcmAgdXNlIG1vY2sgVkZJTyBkZXZpY2VzPyBJIGtub3cgaXQgZG9lcyBzb21ldGltZXMsIGFuZCBtYXliZSBpdCBkb2VzIGhlcmUuIFNvLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBtb2NrIFZGSU8gZGV2aWNlcyBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRob3NlIG1vY2sgVkZJTyBkZXZpY2VzIGhhdmUgVFBIIGNhcGFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM9MTY2OD1zdGF0aWMgaW50IGhpc2lfYWNjX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjkwLVx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZoaXNpX2FjY192ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTY5MTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNmhpc2lfYWNjX3ZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjkyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM9MzU1PXN0YXRpYyBpbnQgaXNtX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNjctXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmM6MzY4Olx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2aXZwY2QtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jLTM2OS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYz0xNDA3PXN0YXRpYyBpbnQgbWx4NXZmX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTE0MTgtXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNm12ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmM6MTQxOTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNm12ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTQyMC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM9MTMxOT1zdGF0aWMgaW50IG52Z3JhY2VfZ3B1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEzNjAtXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYzoxMzYxOlx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2bnZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTM2Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jPTExMD1zdGF0aWMgaW50IHBkc192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy9wY2lfZHJ2LmMtMTIyLVxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jOjEyMzpcdGVyciA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBkc192ZmlvLVx1MDAzZXZmaW9fY29yZWRldik7XG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy9wY2lfZHJ2LmMtMTI0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3FhdC9tYWluLmM9NjQ0PXFhdF92Zl92ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYy02NTQtXHRwY2lfc2V0X2RydmRhdGEocGRldiwgXHUwMDI2cWF0X3ZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jOjY1NTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnFhdF92ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYy02NTYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYz0xNzY9c3RhdGljIGludCB2ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xOTAtXHR2ZGV2LVx1MDAzZXBjaV9vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9kZXZfb3BzO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jOjE5MTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jLTE5Mi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjIxNz1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX3JlbGVhc2VfZGV2KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTIyMTgtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMjE5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMjIwLXtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzE4LX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjIzMTk6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjMyMC1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM9MTQ5PXN0YXRpYyBpbnQgdmlydGlvdmZfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xNzctXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNnZpcnR2ZGV2LVx1MDAzZWNvcmVfZGV2aWNlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxNzg6XHRyZXQgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcdTAwMjZ2aXJ0dmRldi1cdTAwM2Vjb3JlX2RldmljZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTc5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYz01NDM9c3RhdGljIGludCB4ZV92ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jLTU1NC1cbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjU1NTpcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnhlX3ZkZXYtXHUwMDNlY29yZV9kZXZpY2UpO1xuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTU2LVx0aWYgKHJldCkge1xuLS1cbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTE2OD12b2lkIHZmaW9fcGNpX2NvcmVfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTY5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTcwLXZvaWQgdmZpb19wY2lfY29yZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYyNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBgdmZpby1wY2lgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBETUEgYnVmZmVycywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHRhcmdldCBzeXN0ZW0sIGxpa2VseSBRRU1VIHJ1bm5pbmcgU3l6a2FsbGVyLCBjYW4gZXZlbiByZWFjaCB0aGUga2V5IGNvZGUuCgpJbml0aWFsbHksIEkgc2VlIGB2ZmlvLXBjaWAgYmVpbmcgYm91bmQgdG8gUENJIGRldmljZXMuIFN5emthbGxlciYjMzk7cyBRRU1VIHNldHVwIHNob3VsZCBhbGxvdyB0aGlzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aG91Z2gsIGFzIFN5emthbGxlciYjMzk7cyBRRU1VIHR5cGljYWxseSBkZWFscyB3aXRoIHZpcnR1YWwgZGV2aWNlcy4gQ2FuIFN5emthbGxlciBiaW5kIGEgZGV2aWNlIHRvIGB2ZmlvLXBjaWAgYW5kIGludGVyYWN0IHdpdGggaXQ/IEkgc3VzcGVjdCBpdCBjYW4gdmlhIHN5c2ZzIHdyaXRlcywgYnV0IGl0IGlzIGltcG9ydGFudCB0byBjb25maXJtLgoKVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvYC4gQnV0LCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLCBhbnl0aGluZyB0aGF0IGRlYWxzIHdpdGggdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgbGlrZSBNZWxsYW5veCBDb25uZWN0WCBkcml2ZXJzIChgbWx4NWApIHRoYXQgcmVxdWlyZSAqcGh5c2ljYWwqIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGJ5IFFFTVUgaXMgdXN1YWxseSBjb25zaWRlcmVkIHVuaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIFdlIGNhbiBsYXJnZWx5IGlnbm9yZSBpdC4KCkxvb2tpbmcgYXQgdGhlIGB2ZmlvYCBwYXJ0cywgc3BlY2lmaWNhbGx5IGluIGB2ZmlvX3BjaV9jb3JlLmNgIGFuZCBgdmZpb19wY2lfZG1hYnVmLmNgLCB0aGUgZnVuY3Rpb24gYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgY29tZXMgdG8gdGhlIGZvcmVmcm9udC4gVGhpcyBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCB2aWEgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpYC4gQ3JpdGljYWxseSwgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IGEgUENJIGRldmljZSAqc3VwcG9ydHMqIFRQSC4KCk5vdywgaGVyZSYjMzk7cyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogRG9lcyBRRU1VLCBpbiBhIHR5cGljYWwgU3l6a2FsbGVyIHNldHVwLCAqZW11bGF0ZSogYW55IFBDSSBkZXZpY2UgdGhhdCBoYXMgVFBIIENvbXBsZXRlciBjYXBhYmlsaXRpZXM/IFRoYXQgaXMgdGhlIGNydXggb2YgdGhlIHJlYWNoYWJpbGl0eS4gSSBuZWVkIHRvIGNoZWNrIFFFTVUmIzM5O3MgUENJIGRldmljZSBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLiBJZiBRRU1VIGRvZXMgbm90IGVtdWxhdGUgVFBILCB0aGlzIHdob2xlIGJyYW5jaCB3aWxsIGFsd2F5cyByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBzdGlsbCAqcmVhY2hhYmxlKiwgYnV0IGp1c3QgcmV0dXJucyBlYXJseS4KClRoZXJlIGlzIGFsc28gYGRtYV9idWZfZ2V0X3BjaV90cGhgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24sIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYC4gIEhvd2V2ZXIsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpcyBjYWxsZWQgb25seSBieSBgbWx4NWAgaW4gdGhpcyBwYXRjaCBhbmQgaXMgdGhlcmVmb3JlIHVucmVhY2hhYmxlIGluIGEgUUVNVSBzZXR1cC4KCkhvd2V2ZXIsIHRoZSBrZXkgZnVuY3Rpb24sIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaW9jdGwuIEl0IGFjcXVpcmVzIGEgZG1hLWJ1ZiBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXRzIHNvbWUgZmllbGRzLCB3aGljaCBhcmUgb25seSByZWFkIGJ5IHRoZSB1bnJlYWNoYWJsZSBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAuIFNvIHdlIGFyZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBpb2N0bCBwcm92aWRlcyBhIGZ1enphYmxlIHN1cmZhY2UuCgpJZiBUUEggaXMgKm5vdCogc3VwcG9ydGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIGFuZCB0aGF0IGlzIGFsbCB0aGF0IGNhbiBoYXBwZW4uCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtJmd0O3BkZXYpYCwgd2hlcmUgYHZkZXYtJmd0O3BkZXZgIGlzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIGluIFFFTVUuICBJIG5lZWQgdG8gY2hlY2sgaG93IFRQSCBpcyBzdXBwb3J0ZWQgb24gdGhvc2UuIFRoaXMgd291bGQgaW52b2x2ZSBjaGVja2luZyBRRU1VJiMzOTtzIHNvdXJjZSBjb2RlLCB0byBsb29rIGZvciBhbnkgZW11bGF0ZWQgUENJIGRldmljZSB3aGljaCBleHBvc2VzIFRQSCBjb21wbGV0ZXIgY2FwYWJpbGl0aWVzLCBpLmUuIGBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFlgIG9yIGBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSGAuIElmIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgZmVhdHVyZSwgd2Ugd2lsbCBnZXQgdGhlIGVhcmx5IHJldHVybiwgd2hpY2ggaXMgYXJndWFibHkgbm90IHdvcnRoIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGxlYW5zIHRvd2FyZHMgdGhpcyBiZWluZyAqbGVzcyogZnJ1aXRmdWwuIFRoZSBwYXRjaCBpcyBpbnRlcmVzdGluZywgYXMgaXQgaW52b2x2ZXMgZG1hLWJ1ZiBpb2N0bCwgYW5kIGxvY2tzIGFyZSBhY3F1aXJlZC4gSG93ZXZlciwgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgUUVNVSwgaXQmIzM5O3MgdW5saWtlbHkgd2UmIzM5O2xsIHRyaWdnZXIgYW55IHJlYWwgaGFyZHdhcmUgaW50ZXJhY3Rpb25zLiBTbyB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGUgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaW9jdGwuIEJ1dCBpbiBhIHJlZ3VsYXIgUUVNVSBTeXprYWxsZXIgc2V0dXAsIGlmIHdlIGNhbiYjMzk7dCBnZXQgcGFzdCB0aGUgY2hlY2sgZm9yIFRQSCBzdXBwb3J0LCBpdCB3aWxsIGp1c3QgcmV0dXJuIGVhcmx5LCBvciBzZXQgZmllbGRzIHRoYXQgYXJlIG5vdCByZWFkLiAgSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBub3QganVzdCBhbiAqZWFybHkgcmV0dXJuKiBzaXR1YXRpb24sIGJ1dCBwb3RlbnRpYWxseSBhICptaXNzaW5nIGZlYXR1cmUqIGluIHN0YW5kYXJkIFFFTVUgc2V0IHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHZpYWJpbGl0eSBvZiB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL3RwaC5jPTIwMD1zdGF0aWMgdTggZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTIxOC1cdCAqL1xuZHJpdmVycy9wY2kvdHBoLmM6MjE5Olx0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG5kcml2ZXJzL3BjaS90cGguYzoyMjA6XHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XG5kcml2ZXJzL3BjaS90cGguYzoyMjE6XHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG5kcml2ZXJzL3BjaS90cGguYy0yMjItXHRcdHJldHVybiB0cGhfY29tcDtcbmRyaXZlcnMvcGNpL3RwaC5jOjIyMzpcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbmRyaXZlcnMvcGNpL3RwaC5jLTIyNC19XG4tLVxuZHJpdmVycy9wY2kvdHBoLmM9MjM2PUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtMjQ2LSAqXG5kcml2ZXJzL3BjaS90cGguYzoyNDc6ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLFxuZHJpdmVycy9wY2kvdHBoLmM6MjQ4OiAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuZHJpdmVycy9wY2kvdHBoLmM6MjQ5OiAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxuZHJpdmVycy9wY2kvdHBoLmMtMjUwLSAqL1xuZHJpdmVycy9wY2kvdHBoLmM9MjUxPXU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTI1Ni1cdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG5kcml2ZXJzL3BjaS90cGguYzoyNTc6XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbmRyaXZlcnMvcGNpL3RwaC5jLTI1OC1cdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbmRyaXZlcnMvcGNpL3RwaC5jOjI1OTpcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuZHJpdmVycy9wY2kvdHBoLmMtMjYwLVxuZHJpdmVycy9wY2kvdHBoLmMtMjYxLVx0LyogMGIxMCBpcyByZXNlcnZlZDsgZm9sZCBpdCBpbnRvIFwmIzM0O25vdCBzdXBwb3J0ZWRcJiMzNDsgKHNlZSBhYm92ZSkuICovXG5kcml2ZXJzL3BjaS90cGguYzoyNjI6XHR0cGhfY29tcCA9IEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKTtcbmRyaXZlcnMvcGNpL3RwaC5jOjI2MzpcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcbmRyaXZlcnMvcGNpL3RwaC5jOjI2NDpcdCAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcbmRyaXZlcnMvcGNpL3RwaC5jLTI2NS1cdFx0cmV0dXJuIHRwaF9jb21wO1xuZHJpdmVycy9wY2kvdHBoLmM6MjY2Olx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuZHJpdmVycy9wY2kvdHBoLmMtMjY3LX1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4Mi1cdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozODM6XHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzg0LVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy00MDAtXHRpZiAoKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NDAxOlx0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQwMi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTUwPXN0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo1MTp7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTItI2VuZGlmXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmgtNjcyLSNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQMl9MVFJcdFx0MHgwMDAwMDgwMCAvKiBMYXRlbmN5IHRvbGVyYW5jZSByZXBvcnRpbmcgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oOjY3MzojZGVmaW5lICBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTS1x0MHgwMDAwMzAwMCAvKiBUUEggY29tcGxldGVyIHN1cHBvcnQgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oLTY3NC0jZGVmaW5lICBQQ0lfRVhQX0RFVkNBUDJfT0JGRl9NQVNLXHQweDAwMGMwMDAwIC8qIE9CRkYgc3VwcG9ydCBtZWNoYW5pc20gKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC0xMDUyLS8qIFRQSCBDb21wbGV0ZXIgU3VwcG9ydCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmg6MTA1MzojZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FXHRcdDB4MCAvKiBOb25lICovXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaDoxMDU0OiNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZXHQweDEgLyogVFBIIG9ubHkgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oOjEwNTU6I2RlZmluZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSFx0MHgzIC8qIFRQSCBhbmQgRXh0ZW5kZWQgVFBIICovXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC0xMDU2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQxMAoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAyMDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBDSSBUUEggTWV0YWRhdGEgUmV0cmlldmFsIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoaXM/JiMzNDsgSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyB0cnlpbmcgdG8gZ2V0IFRQSCBtZXRhZGF0YSwgd2hpY2ggcmVsaWVzIG9uIGEgZGV2aWNlJiMzOTtzIGBQQ0lfRVhQX0RFVkNBUDJgIHJlZ2lzdGVyLiBDYW4gc3l6a2FsbGVyIGluamVjdCBhIFBDSSBkZXZpY2Ugd2l0aCB0aGlzIGZlYXR1cmU/IEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4gU3l6a2FsbGVyIGxldmVyYWdlcyBRRU1VJiMzOTtzIGRldmljZSBlbXVsYXRpb24sIGFuZCBpZiBRRU1VIGRvZXNuJiMzOTt0IG9mZmVyIGEgZGV2aWNlIHdpdGggVFBIIENvbXBsZXRlciBzdXBwb3J0LCB0aGlzIGlzIGRlYWQgaW4gdGhlIHdhdGVyIGZyb20gdGhlIGdldC1nby4gSSBtZWFuLCBzeXprYWxsZXIgaGFzIGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSwgYW5kIHNvIG9uLi4uIGJ1dCBpdCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSB3YXkgdG8gc3ludGhlc2l6ZSBQQ0kgY29uZmlnIHNwYWNlLiBJdCByZWxpZXMgb24gdGhlICp2aXJ0dWFsKiBoYXJkd2FyZSwgd2hpY2ggaXMgdGhlIHByb2JsZW0uCgpBbHJpZ2h0LCB3aGF0IGlmIHdlIHVzZSBgQ09ORklHX1ZGSU9fUENJYCBhbmQgYmluZCBhIHZpcnR1YWwgZGV2aWNlIGxpa2UgYGUxMDAwZWAgb3IgYHZpcnRpby1wY2lgIHRvIGl0PyBCdXQgZG8gKnRob3NlKiBoYXZlIFRQSCBDb21wbGV0ZXIgc3VwcG9ydD8gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBkcml2ZXIgc2V0dGluZyB0aGF0IGZsYWcsIGl0JiMzOTtzIGEgaGFyZHdhcmUgdGhpbmcuIFRoZSBvbmx5IHdheSBJIHNlZSBpdCBoYXBwZW5pbmcgaXMgaWYgd2UgY291bGQgYWRkIHRoZSBjYXBhYmlsaXR5IG1hbnVhbGx5IGluIFFFTVUsIG1heWJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBwY2lfYWRkX2NhcGAsIGJ1dCB0aGF0JiMzOTtzIG5vdCBzdGFuZGFyZCBRRU1VLiBBbmQgZXZlbiBpZiB3ZSBjb3VsZCByZWFjaCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCB1cCB0byB0aGUgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCBjaGVjaywgaXMgaXQgcmVhbGx5IHdvcnRoIGZ1enppbmcganVzdCBmb3IgdGhhdD8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiBRRU1VLCBvciByZWx5IG9uIHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZS4KCk5vdywgdGhpcyBgbWx4NWAgcGFydCBpcyBzY3JlYW1pbmcgJiMzNDt2ZW5kb3Itc3BlY2lmaWMmIzM0Oy4gVGhhdCYjMzk7cyBhIE1lbGxhbm94IFNtYXJ0TklDIGRyaXZlciwgcmVxdWlyaW5nICpwaHlzaWNhbCogaGFyZHdhcmUuIERlZmluaXRlbHkgb3V0LiBUaGUgYHZmaW9gIHBhcnQsIGluIGB2ZmlvX3BjaV9kbWFidWYuY2AsIHJlbGllcyBvbiBhIFBDSSBkZXZpY2UgKndpdGgqIFRQSCBDb21wbGV0ZXIuIFNpbmNlIHRoaXMgaXMgYSBoYXJkd2FyZSBmZWF0dXJlIGRlc2lnbmVkIHRvIG9wdGltaXplIGNhY2hlIHBsYWNlbWVudCBpbiBwaHlzaWNhbCBDUFVzL3Jvb3QgY29tcGxleGVzIGFuZCB0aGUgc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGxpa2UgYGUxMDAwZWAsIGB2aXJ0aW8tbmV0YCBkb24mIzM5O3Qgc3VwcG9ydCBUUEgsIHRoaXMgcGF0aCBpcyB1bnJlYWNoYWJsZS4gQW5kIHRoZXJlJiMzOTtzIG5vIHdheSB0byBmYWtlIHRoYXQgZWl0aGVyLCBgdmZpby1wY2lgIGp1c3QgcGFzc2VzIHRocm91Z2ggdGhlIGV4aXN0aW5nIHBoeXNpY2FsIGRldmljZSYjMzk7cyBjb25maWcgc3BhY2UuIFRoZXJlZm9yZSwgbGluZSAzODQgb2YgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaXMgdGhlIGVuZCBvZiB0aGUgbGluZS4KCldhaXQsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCBjYW4gYmUgcmVhY2hlZC4KCmBgYGMKCWlmICghdmRldi0mZ3Q7cGNpX29wcyB8fCAhdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzKQoJCXJldHVybiAtRU9QTk9UU1VQUDsKCgljb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi0mZ3Q7cGRldik7CglpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSkKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmBgYAoKSXQgaXMganVzdCAyIGBpZmAgc3RhdGVtZW50cyBiZWZvcmUgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGVyZSBhcmUgbm8gaW50ZXJlc3RpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIGhlcmUuIFRoZSBhY3R1YWwgY2hhbmdlcywgd2hpY2ggaW52b2x2ZSBzZXR0aW5nIFRQSCBtZXRhZGF0YSBhbmQgbG9ja2luZyB0aGUgZG1hLWJ1ZiwgYXJlIGFmdGVyIHRoZSBjaGVjay4gSWYgdGhlIGNoZWNrIGZhaWxzLCB0aGUgZnVuY3Rpb25hbCBjb2RlIGlzIG5ldmVyIHJlYWNoZWQuIFNvIHRoZSByZWFjaGFibGUgcGFydCBpcyB0cml2aWFsIGFuZCBub3Qgd29ydGggZnV6emluZy4KCk9rYXksIGxldCYjMzk7cyByZXZpZXcgdGhlIGBtbHg1YCBjaGFuZ2VzIG1vcmUgc3BlY2lmaWNhbGx5LiBUaGUgY2hhbmdlcyBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY2AsIGBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY2AsIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jYCBhcmUgYWxsIHRpZWQgdG8gdGhlIGBtbHg1YCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIGEgTWVsbGFub3ggQ29ubmVjdFggYWRhcHRlci4gUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgdGhvc2UuIFNvLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUuCgpUaGUgYGRtYS1idWZgIGNoYW5nZXMgYXJlIGFsc28gcHJvYmxlbWF0aWMuIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpbiBgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY2AgaXMgYSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24gYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGJ5IGBtbHg1YC4gU2luY2UgYG1seDVgIGlzIHVucmVhY2hhYmxlLCBzbyBpcyB0aGlzIG5ldyBmdW5jdGlvbi4KClRoZSBgcGNpYCBjaGFuZ2VzIGFyZSBqdXN0IGhlbHBlciBmdW5jdGlvbnM6IGBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlYCBhbmQgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCBpbiBgZHJpdmVycy9wY2kvdHBoLmNgLiBUaGVzZSBhcmUgbmV3Cgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgbWV0YWRhdGEgcmV0cmlldmFsIGZyb20gRE1BIGJ1ZmZlcnMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBtbHg1YCBkcml2ZXIgKE1lbGxhbm94IENvbm5lY3RYKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIGluIGB2ZmlvLXBjaWAgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaW9jdGwuIFRoZSBWRklPIGlvY3RsIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gdGhlIHVuZGVybHlpbmcgUENJIGRldmljZSYjMzk7cyBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgcmVnaXN0ZXIgKGBQQ0lfRVhQX0RFVkNBUDJgKS4gU2luY2Ugc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGRvIG5vdCBpbXBsZW1lbnQgVFBIIENvbXBsZXRlciBzdXBwb3J0LCB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIGlvY3RsIHdpbGwgYWx3YXlzIHJldHVybiBgLUVPUE5PVFNVUFBgIGVhcmx5IGFuZCBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgaW4gYGRtYS1idWYuY2AgYW5kIGBwY2kvdHBoLmNgIGFyZSBvbmx5IGludm9rZWQgYnkgdGhlc2UgdW5yZWFjaGFibGUgY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJiMzOTtzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM1OjU3LjE2MjM1MDY1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNDU2MTUxOTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgbWV0YWRhdGEgcmV0cmlldmFsIGZyb20gRE1BIGJ1ZmZlcnMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBtbHg1YCBkcml2ZXIgKE1lbGxhbm94IENvbm5lY3RYKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIGluIGB2ZmlvLXBjaWAgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaW9jdGwuIFRoZSBWRklPIGlvY3RsIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gdGhlIHVuZGVybHlpbmcgUENJIGRldmljZSdzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzU6NTcuMTYyMzYwNDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDY5OTQ2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZDI0ZDRhYzRiNjFjN2Y3MjBmNWFlM2QzZmZhMDM0NjNmMTQ3MzI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDY6MzU6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG5pbmRleCBkNTA0YzYzNmRjMjk0Li43MWYzMzU0NDJiYTc4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcXG4rKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXFxuQEAgLTkzOSw2ICs5MzksNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxcbiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKVxcbiAgKiAgICAgLSBkbWFfYnVmX3ZtYXAoKVxcbiAgKiAgICAgLSBkbWFfYnVmX3Z1bm1hcCgpXFxuKyAqICAgICAtIGRtYV9idWZfZ2V0X3BjaV90cGgoKVxcbiAgKlxcbiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxcbiAgKiAgICBmdW5jdGlvbnM6XFxuQEAgLTk3OSw2ICs5ODAsNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxcbiAgKiAgICAgLSBcXHUwMDI2ZG1hX2J1Zl9vcHMudW5tYXBfZG1hX2J1ZigpXFxuICAqICAgICAtIFxcdTAwMjZkbWFfYnVmX29wcy52bWFwKClcXG4gICogICAgIC0gXFx1MDAyNmRtYV9idWZfb3BzLnZ1bm1hcCgpXFxuKyAqICAgICAtIFxcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpXFxuICAqXFxuICAqIDMuIEV4cG9ydGVycyBtdXN0IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcXG4gICogICAgZnVuY3Rpb25zOlxcbkBAIC0xMTQ0LDYgKzExNDYsMzYgQEAgdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCBcXFwiRE1BX0JVRlxcXCIpO1xcbiBcXG4rLyoqXFxuKyAqIGRtYV9idWZfZ2V0X3BjaV90cGggLSBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgbWV0YWRhdGFcXG4rICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeVxcbisgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUXFxuKyAqIEBzdGVlcmluZ190YWc6IHJldHVybnMgdGhlIHJhdyBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlXFxuKyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludFxcbisgKlxcbisgKiBXcmFwcGVyIGZvciB0aGUgb3B0aW9uYWwgXFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxcbisgKlxcbisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIFxcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcXG4rICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZVxcbisgKiByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxcbisgKlxcbisgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlXFxuKyAqIGV4cG9ydGVyIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IG1hcHBpbmcgKHNpZ25hbGxlZCB0byB0aGUgaW1wb3J0ZXIgdmlhXFxuKyAqIFxcdTAwMjZkbWFfYnVmX2F0dGFjaF9vcHMuaW52YWxpZGF0ZV9tYXBwaW5ncykuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XFxuKyAqIG1hcHBpbmcgaXMgZXN0YWJsaXNoZWQgZm9sbG93aW5nIGludmFsaWRhdGlvbi5cXG4rICovXFxuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXFxuK3tcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmICghZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXR1cm4gZG1hYnVmLVxcdTAwM2VvcHMtXFx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfZ2V0X3BjaV90cGgsIFxcXCJETUFfQlVGXFxcIik7XFxuK1xcbiAvKipcXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xcbmluZGV4IDAyODA5MTE0ZmM3OWEuLmEyYjQ5N2Y2YjE2YmQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jXFxuQEAgLTYwLDYgKzYwLDcgQEBcXG4gTU9EVUxFX0FVVEhPUihcXFwiRWxpIENvaGVuIFxcdTAwM2NlbGlAbWVsbGFub3guY29tXFx1MDAzZVxcXCIpO1xcbiBNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1lbGxhbm94IDV0aCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKENvbm5lY3RYIHNlcmllcykgSUIgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG4rTU9EVUxFX0lNUE9SVF9OUyhcXFwiRE1BX0JVRlxcXCIpO1xcbiBcXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21seDVfaWIuaFxcbmluZGV4IDUyMjk4NGQ5NThiYmYuLmM2YTk1NmIyZWU4N2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXFxuQEAgLTY0Niw2ICs2NDYsMTUgQEAgZW51bSBtbHg1X21rZXlfdHlwZSB7XFxuIC8qIFVzZWQgZm9yIG5vbi1leGlzdGVudCBwaCB2YWx1ZSAqL1xcbiAjZGVmaW5lIE1MWDVfSUJfTk9fUEggMHhmZlxcbiBcXG4rc3RydWN0IGRtYV9idWY7XFxuK1xcbitzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoIHtcXG4rXFx0dTE2IHN0ZWVyaW5nX3RhZztcXG4rXFx0dTggcGg7XFxuK1xcdGJvb2wgZXh0ZW5kZWQ7XFxuK1xcdGJvb2wgdmFsaWQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgbWx4NV9pYl9ta2V5IHtcXG4gXFx0dTMyIGtleTtcXG4gXFx0ZW51bSBtbHg1X21rZXlfdHlwZSB0eXBlO1xcbkBAIC03MjYsNiArNzM1LDcgQEAgc3RydWN0IG1seDVfaWJfbXIge1xcbiBcXHRcXHRcXHR1OCByZXZva2VkIDoxO1xcbiBcXHRcXHRcXHQvKiBJbmRpY2F0ZXMgcHJldmlvdXMgZG1hYnVmIHBhZ2UgZmF1bHQgb2NjdXJyZWQgKi9cXG4gXFx0XFx0XFx0dTggZG1hYnVmX2ZhdWx0ZWQ6MTtcXG4rXFx0XFx0XFx0c3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCBkbWFidWZfdHBoO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgbWx4NV9pYl9ta2V5IG51bGxfbW1rZXk7XFxuIFxcdFxcdH07XFxuIFxcdH07XFxuQEAgLTEzNDEsNiArMTM1MSw3IEBAIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9yZXJlZ191c2VyX21yKHN0cnVjdCBpYl9tciAqaWJfbXIsIGludCBmbGFncywgdTY0IHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHQgICAgdTY0IGxlbmd0aCwgdTY0IHZpcnRfYWRkciwgaW50IGFjY2Vzc19mbGFncyxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xcbiBpbnQgbWx4NV9pYl9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKmlibXIsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xcbitpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zik7XFxuIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9hbGxvY19tcihzdHJ1Y3QgaWJfcGQgKnBkLCBlbnVtIGliX21yX3R5cGUgbXJfdHlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIHUzMiBtYXhfbnVtX3NnKTtcXG4gc3RydWN0IGliX21yICptbHg1X2liX2FsbG9jX21yX2ludGVncml0eShzdHJ1Y3QgaWJfcGQgKnBkLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xcbmluZGV4IGU2Yjc0OTU1ZDk1ZGMuLjQwNGM1ZDA4MWI4YWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcXG5AQCAtMzksNiArMzksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImRtLmhcXFwiXFxuQEAgLTE2Nyw2ICsxNjgsNjEgQEAgc3RhdGljIGludCBnZXRfdW5jaGFuZ2VhYmxlX2FjY2Vzc19mbGFncyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldixcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLIEdFTk1BU0tfVUxMKDIzLCAxNilcXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxcbiBcXG4rc3RhdGljIHU4IG1seDVfaWJfdHBoX2tleV9waCh1OCBwaClcXG4re1xcbitcXHRpZiAocGggPT0gTUxYNV9JQl9OT19QSCB8fCBwaCA9PSAwKVxcbitcXHRcXHRwaCBePSBNTFg1X0lCX05PX1BIO1xcbitcXG4rXFx0cmV0dXJuIHBoO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcXG4re1xcbitcXHRpZiAoc3RfaW5kZXggPT0gTUxYNV9NS0NfUENJRV9UUEhfTk9fU1RFRVJJTkdfVEFHX0lOREVYKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiBtbHg1X3N0X2dldF9pbmRleChkZXYtXFx1MDAzZW1kZXYsIHN0X2luZGV4KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXFxuK3tcXG4rXFx0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWx4NV9zdF9kZWFsbG9jX2luZGV4KGRldi1cXHUwMDNlbWRldiwgc3RfaW5kZXgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXFxuK3tcXG4rXFx0dTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBrZXJuZWxfdmVuZG9yX2tleSk7XFxuK1xcbitcXHRtbHg1X2liX3B1dF9zdF9pbmRleF9yZWYoZGV2LCBzdF9pbmRleCk7XFxuK31cXG4rXFxuK2ludCBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgoc3RydWN0IG1seDVfaWJfbXIgKm1yLCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggKnRwaCA9IFxcdTAwMjZtci1cXHUwMDNlZG1hYnVmX3RwaDtcXG4rXFx0dTE2IHN0ZWVyaW5nX3RhZztcXG4rXFx0dTggcGg7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXRwaC1cXHUwMDNldmFsaWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCB0cGgtXFx1MDAzZWV4dGVuZGVkLCBcXHUwMDI2c3RlZXJpbmdfdGFnLCBcXHUwMDI2cGgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChzdGVlcmluZ190YWcgIT0gdHBoLVxcdTAwM2VzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLVxcdTAwM2VwaClcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBtbHg1X2liX21yICpcXG4gX21seDVfZnJtcl9wb29sX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcXG4gXFx0XFx0ICAgICAgaW50IGFjY2Vzc19mbGFncywgaW50IGFjY2Vzc19tb2RlLFxcbkBAIC0xODksMTMgKzI0NSwxMCBAQCBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXHRcXHRcXHRNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLIDpcXG4gXFx0XFx0XFx0MDtcXG4gXFxuLVxcdC8qIE5vcm1hbGl6ZSBwaDogc3dhcCAwIGFuZCBNTFg1X0lCX05PX1BIICovXFxuLVxcdGlmIChwaCA9PSBNTFg1X0lCX05PX1BIIHx8IHBoID09IDApXFxuLVxcdFxcdHBoIF49IE1MWDVfSUJfTk9fUEg7XFxuLVxcbiBcXHRtci1cXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XFxuIFxcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcXG4tXFx0XFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLCBwaCk7XFxuK1xcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyxcXG4rXFx0XFx0XFx0ICAgbWx4NV9pYl90cGhfa2V5X3BoKHBoKSk7XFxuIFxcdGVyciA9IGliX2ZybXJfcG9vbF9wb3AoXFx1MDAyNmRldi1cXHUwMDNlaWJfZGV2LCBcXHUwMDI2bXItXFx1MDAzZWlibXIpO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGtmcmVlKG1yKTtcXG5AQCAtMjE4LDcgKzI3MSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAwIDpcXG4gXFx0XFx0XFx0XFx0ICAgICAgTUxYNV9GUk1SX1BPT0xTX0tFWV9BQ0NFU1NfTU9ERV9LU01fTUFTSyxcXG4gXFx0XFx0Lm51bV9kbWFfYmxvY2tzID0gbmRlc2NzLFxcbi1cXHRcXHQua2VybmVsX3ZlbmRvcl9rZXkgPSAwLCAvKiBubyBQSCBhbmQgbm8gU1QgaW5kZXggKi9cXG4rXFx0XFx0Lmtlcm5lbF92ZW5kb3Jfa2V5ID1cXG4rXFx0XFx0XFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBNTFg1X01LQ19QQ0lFX1RQSF9OT19TVEVFUklOR19UQUdfSU5ERVgpLFxcbiBcXHR9O1xcbiBcXHRzdHJ1Y3QgbWx4NV9pYl9tciAqbXI7XFxuIFxcdGludCByZXQ7XFxuQEAgLTU1Nyw2ICs2MTIsMTAgQEAgc3RhdGljIHN0cnVjdCBtbHg1X2liX21yICpyZWdfY3JlYXRlKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxcbiBcXHRtci1cXHUwMDNlaWJtci5wZCA9IHBkO1xcbiBcXHRtci1cXHUwMDNlYWNjZXNzX2ZsYWdzID0gYWNjZXNzX2ZsYWdzO1xcbiBcXHRtci1cXHUwMDNlcGFnZV9zaGlmdCA9IG9yZGVyX2Jhc2VfMihwYWdlX3NpemUpO1xcbitcXHRtci1cXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSA9XFxuK1xcdFxcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSywgc3RfaW5kZXgpIHxcXG4rXFx0XFx0RklFTERfUFJFUChNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9QSF9NQVNLLFxcbitcXHRcXHRcXHQgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTtcXG4gXFxuIFxcdGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfbWtleV9pbik7XFxuIFxcdGlmIChwb3B1bGF0ZSlcXG5AQCAtNzUzLDYgKzgxMiwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcXG4gXFx0XFx0XFx0c3RfaW5kZXggPSBtZG1haC1cXHUwMDNlc3RfaW5kZXg7XFxuIFxcdH1cXG4gXFxuK1xcdGVyciA9IG1seDVfaWJfZ2V0X3N0X2hhbmRsZV9yZWYoZGV2LCBzdF9pbmRleCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHR9XFxuK1xcbiBcXHR4bHRfd2l0aF91bXIgPSBtbHg1cl91bXJfY2FuX2xvYWRfcGFzKGRldiwgdW1lbS1cXHUwMDNlbGVuZ3RoKTtcXG4gXFx0aWYgKHhsdF93aXRoX3Vtcikge1xcbiBcXHRcXHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgdW1lbSwgaW92YSwgYWNjZXNzX2ZsYWdzLFxcbkBAIC03NjksNiArODM0LDcgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VzbG93X3BhdGhfbXV0ZXgpO1xcbiBcXHR9XFxuIFxcdGlmIChJU19FUlIobXIpKSB7XFxuK1xcdFxcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcXG4gXFx0XFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1QobXIpO1xcbiBcXHR9XFxuQEAgLTkwMyw2ICs5NjksNjMgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcXG4gXFx0LmludmFsaWRhdGVfbWFwcGluZ3MgPSBtbHg1X2liX2RtYWJ1Zl9pbnZhbGlkYXRlX2NiLFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgZ2V0X3BjaV90cGhfbXJfZG1hYnVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggKnRwaCxcXG4rXFx0XFx0XFx0XFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXFxuK3tcXG4rXFx0dTE2IGxvY2FsX3N0X2luZGV4O1xcbitcXHR1MTYgc3RlZXJpbmdfdGFnO1xcbitcXHR1OCBsb2NhbF9waDtcXG4rXFx0Ym9vbCBleHRlbmRlZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHN3aXRjaCAocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShkZXYtXFx1MDAzZW1kZXYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XFxuK1xcdFxcdGV4dGVuZGVkID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBDSV9UUEhfUkVRX0VYVF9UUEg6XFxuK1xcdFxcdGV4dGVuZGVkID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpIG11c3QgcnVuIHVuZGVyIGRtYWJ1Zi1cXHUwMDNlcmVzdiwgYnV0IGRyb3AgdGhlIGxvY2tcXG4rXFx0ICogYmVmb3JlIG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKCk6IHRoYXQgYWxsb2NhdGVzIHdpdGggR0ZQX0tFUk5FTCxcXG4rXFx0ICogd2hpY2ggbXVzdCBub3QgcnVuIHVuZGVyIGRtYWJ1Zi1cXHUwMDNlcmVzdiBzaW5jZSByZWNsYWltIGNhbiByZS1lbnRlciB0aGVcXG4rXFx0ICogc2FtZSByZXNlcnZhdGlvbiBvYmplY3QgdGhyb3VnaCBhIGR5bmFtaWMgZXhwb3J0ZXIncyBtb3ZlX25vdGlmeSBwYXRoLlxcbitcXHQgKi9cXG4rXFx0ZG1hX3Jlc3ZfbG9jayhkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHRyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIFxcdTAwMjZzdGVlcmluZ190YWcsIFxcdTAwMjZsb2NhbF9waCk7XFxuK1xcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdFxcdG1seDVfaWJfZGJnKGRldiwgXFxcImdldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldi1cXHUwMDNlbWRldiwgc3RlZXJpbmdfdGFnLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxvY2FsX3N0X2luZGV4KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtbHg1X2liX2RiZyhkZXYsIFxcXCJzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0KnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7XFxuK1xcdCpwaCA9IGxvY2FsX3BoO1xcbitcXHR0cGgtXFx1MDAzZXN0ZWVyaW5nX3RhZyA9IHN0ZWVyaW5nX3RhZztcXG4rXFx0dHBoLVxcdTAwM2VwaCA9IGxvY2FsX3BoO1xcbitcXHR0cGgtXFx1MDAzZWV4dGVuZGVkID0gZXh0ZW5kZWQ7XFxuK1xcdHRwaC1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBtbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX21yICptcilcXG4re1xcbitcXHRtbHg1X2liX3B1dF9zdF9oYW5kbGVfcmVmKG1yX3RvX21kZXYobXIpLFxcbitcXHRcXHRcXHRcXHQgIG1yLVxcdTAwM2VpYm1yLmZybXIua2V5Lmtlcm5lbF92ZW5kb3Jfa2V5KTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBpYl9tciAqXFxuIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxcbiBcXHRcXHQgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLFxcbkBAIC05MTMsNiArMTAzNiw3IEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxcbiBcXHRzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtXFx1MDAzZWRldmljZSk7XFxuIFxcdHN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7XFxuIFxcdHN0cnVjdCBpYl91bWVtX2RtYWJ1ZiAqdW1lbV9kbWFidWY7XFxuK1xcdHN0cnVjdCBtbHg1X2liX2RtYWJ1Zl90cGggdHBoID0ge307XFxuIFxcdHUxNiBzdF9pbmRleCA9IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWDtcXG4gXFx0dTggcGggPSBNTFg1X0lCX05PX1BIO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC05NDUsMTggKzEwNjksMjkgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXFxuIFxcdFxcdHBoID0gZG1haC1cXHUwMDNlcGg7XFxuIFxcdFxcdGlmIChkbWFoLVxcdTAwM2V2YWxpZF9maWVsZHMgXFx1MDAyNiBCSVQoSUJfRE1BSF9DUFVfSURfRVhJU1RTKSlcXG4gXFx0XFx0XFx0c3RfaW5kZXggPSBtZG1haC1cXHUwMDNlc3RfaW5kZXg7XFxuK1xcbitcXHRcXHRlcnIgPSBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKGRldiwgc3RfaW5kZXgpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGliX3VtZW1fcmVsZWFzZShcXHUwMDI2dW1lbV9kbWFidWYtXFx1MDAzZXVtZW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGdldF9wY2lfdHBoX21yX2RtYWJ1ZihkZXYsIHVtZW1fZG1hYnVmLVxcdTAwM2VhdHRhY2gtXFx1MDAzZWRtYWJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRwaCwgXFx1MDAyNnN0X2luZGV4LCBcXHUwMDI2cGgpO1xcbiBcXHR9XFxuIFxcbiBcXHRtciA9IGFsbG9jX2NhY2hlYWJsZV9tcihwZCwgXFx1MDAyNnVtZW1fZG1hYnVmLVxcdTAwM2V1bWVtLCB2aXJ0X2FkZHIsXFxuIFxcdFxcdFxcdFxcdGFjY2Vzc19mbGFncywgYWNjZXNzX21vZGUsXFxuIFxcdFxcdFxcdFxcdHN0X2luZGV4LCBwaCk7XFxuIFxcdGlmIChJU19FUlIobXIpKSB7XFxuK1xcdFxcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcXG4gXFx0XFx0aWJfdW1lbV9yZWxlYXNlKFxcdTAwMjZ1bWVtX2RtYWJ1Zi1cXHUwMDNldW1lbSk7XFxuIFxcdFxcdHJldHVybiBFUlJfQ0FTVChtcik7XFxuIFxcdH1cXG4gXFxuIFxcdG1seDVfaWJfZGJnKGRldiwgXFxcIm1rZXkgMHgleFxcXFxuXFxcIiwgbXItXFx1MDAzZW1ta2V5LmtleSk7XFxuIFxcbitcXHRtci1cXHUwMDNlZG1hYnVmX3RwaCA9IHRwaDtcXG4gXFx0YXRvbWljX2FkZChpYl91bWVtX251bV9wYWdlcyhtci1cXHUwMDNldW1lbSksIFxcdTAwMjZkZXYtXFx1MDAzZW1kZXYtXFx1MDAzZXByaXYucmVnX3BhZ2VzKTtcXG4gXFx0dW1lbV9kbWFidWYtXFx1MDAzZXByaXZhdGUgPSBtcjtcXG4gXFx0aWYgKCFwaW5uZWRfbW9kZSkge1xcbkBAIC0xNDA1LDYgKzE1NDAsNyBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKVxcbiBcXHRpZiAobXItXFx1MDAzZWlibXIuZnJtci5wb29sKSB7XFxuIFxcdFxcdGlmICghbWx4NV91bXJfcmV2b2tlX21yX3dpdGhfbG9jayhtcikpIHtcXG4gXFx0XFx0XFx0aWJfZnJtcl9wb29sX3B1c2gobXItXFx1MDAzZWlibXIuZGV2aWNlLCBcXHUwMDI2bXItXFx1MDAzZWlibXIpO1xcbitcXHRcXHRcXHRtbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKG1yKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC0xNDMyLDYgKzE1NjgsOSBAQCBzdGF0aWMgaW50IG1seDVyX2hhbmRsZV9ta2V5X2NsZWFudXAoc3RydWN0IG1seDVfaWJfbXIgKm1yKVxcbiBcXHRpZiAobXItXFx1MDAzZWlibXIuZnJtci5wb29sIFxcdTAwMjZcXHUwMDI2ICFyZXQpXFxuIFxcdFxcdGliX2ZybXJfcG9vbF9kcm9wKFxcdTAwMjZtci1cXHUwMDNlaWJtcik7XFxuIFxcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0bWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihtcik7XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXFxuaW5kZXggMWJhZGVjOWJmNTI3MC4uN2MxNzMxYWEzZGQ5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXFxuQEAgLTg1Nyw2ICs4NTcsMTMgQEAgc3RhdGljIGludCBwYWdlZmF1bHRfZG1hYnVmX21yKHN0cnVjdCBtbHg1X2liX21yICptciwgc2l6ZV90IGJjbnQsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuK1xcdGVyciA9IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChtciwgdW1lbV9kbWFidWYtXFx1MDAzZWF0dGFjaC1cXHUwMDNlZG1hYnVmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRpYl91bWVtX2RtYWJ1Zl91bm1hcF9wYWdlcyh1bWVtX2RtYWJ1Zik7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayh1bWVtX2RtYWJ1Zi1cXHUwMDNlYXR0YWNoLVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRwYWdlX3NpemUgPSBtbHg1X3VtZW1fZG1hYnVmX2ZpbmRfYmVzdF9wZ3N6KHVtZW1fZG1hYnVmLCBhY2Nlc3NfbW9kZSk7XFxuIFxcdGlmICghcGFnZV9zaXplKSB7XFxuIFxcdFxcdGliX3VtZW1fZG1hYnVmX3VubWFwX3BhZ2VzKHVtZW1fZG1hYnVmKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXFxuaW5kZXggN2NlZGMzNDg3OTBkYi4uYzYyYmNhZTdjNTQyMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNcXG5AQCAtOTIsMjMgKzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIFxcdGtmcmVlKHN0KTtcXG4gfVxcbiBcXG4taW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxcbitpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcXG4rXFx0XFx0XFx0ICAgICAgIHUxNiAqc3RfaW5kZXgpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xcbiBcXHRzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtXFx1MDAzZXN0O1xcbiBcXHR1bnNpZ25lZCBsb25nIGluZGV4O1xcbiBcXHR1MzIgeGFfaWQ7XFxuLVxcdHUxNiB0YWc7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0aWYgKCFzdClcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXFx1MDAzZXBkZXYsIG1lbV90eXBlLCBjcHVfdWlkLCBcXHUwMDI2dGFnKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuIFxcdGlmIChzdC1cXHUwMDNlZGlyZWN0X21vZGUpIHtcXG4gXFx0XFx0KnN0X2luZGV4ID0gdGFnO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMTUyLDggKzE0Nyw0OSBAQCBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdC1cXHUwMDNlbG9jayk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcpO1xcbitcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxcbit7XFxuK1xcdHUxNiB0YWc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlc3QpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3QoZGV2LVxcdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXFx1MDAyNnRhZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LCB0YWcsIHN0X2luZGV4KTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3N0X2FsbG9jX2luZGV4KTtcXG4gXFxuK2ludCBtbHg1X3N0X2dldF9pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IG1seDVfc3RfaWR4X2RhdGEgKmlkeF9kYXRhO1xcbitcXHRzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtXFx1MDAzZXN0O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghc3QpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChzdC1cXHUwMDNlZGlyZWN0X21vZGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2c3QtXFx1MDAzZWxvY2spO1xcbitcXHRpZHhfZGF0YSA9IHhhX2xvYWQoXFx1MDAyNnN0LVxcdTAwM2VpZHhfeGEsIHN0X2luZGV4KTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2aWR4X2RhdGEtXFx1MDAzZXVzZWNvdW50KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZzdC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfZ2V0X2luZGV4KTtcXG4rXFxuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xcbmluZGV4IDY1NWZmZDYwZTYyZjYuLmQwMjAyZmY3YTFiMjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcXG4rKysgYi9kcml2ZXJzL3BjaS90cGguY1xcbkBAIC0yMDAsNiArMjAwLDcgQEAgRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZSk7XFxuIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnJwO1xcbitcXHR1OCB0cGhfY29tcDtcXG4gXFx0dTMyIHJlZztcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTIxMSw4ICsyMTIsNjAgQEAgc3RhdGljIHU4IGdldF9ycF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXR1cm4gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xcbitcXHQvKlxcbitcXHQgKiAwYjEwIGlzIHJlc2VydmVkOyB0cmVhdCBpdCBhcyBcXFwibm90IHN1cHBvcnRlZFxcXCIgc28gb25seSB0aGVcXG4rXFx0ICogYXJjaGl0ZWN0ZWQgZW5jb2RpbmdzIHJlYWNoIHRoZSBSZXF1ZXN0ZXIgRW5hYmxlIGZpZWxkLlxcbitcXHQgKi9cXG4rXFx0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XFxuK1xcdGlmICh0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFkgfHxcXG4rXFx0ICAgIHRwaF9jb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxcbitcXHRcXHRyZXR1cm4gdHBoX2NvbXA7XFxuK1xcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XFxuKyAqXFxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cXG4rICovXFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmVhZHMgdGhlIFxcXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFxcXCIgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cXG4rICogXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIHNvIGNhbGxlcnMgb25seSBuZWVkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdGhyZWVcXG4rICogZGVmaW5lZCB2YWx1ZXMuXFxuKyAqXFxuKyAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dTggdHBoX2NvbXA7XFxuK1xcdHUzMiByZWc7XFxuK1xcbitcXHRpZiAocGNpZV9jYXBhYmlsaXR5X3JlYWRfZHdvcmQocGRldiwgUENJX0VYUF9ERVZDQVAyLCBcXHUwMDI2cmVnKSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpXFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcXG4rXFxuK1xcdC8qIDBiMTAgaXMgcmVzZXJ2ZWQ7IGZvbGQgaXQgaW50byBcXFwibm90IHN1cHBvcnRlZFxcXCIgKHNlZSBhYm92ZSkuICovXFxuK1xcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xcbitcXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XFxuK1xcdCAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG4rXFx0XFx0cmV0dXJuIHRwaF9jb21wO1xcbitcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XFxuIFxcbiAvKiBXcml0ZSB0YWcgdG8gU1QgdGFibGUgLSBSZXR1cm4gMCBpZiBPSywgb3RoZXJ3aXNlIC1lcnJubyAqL1xcbiBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuaW5kZXggM2YxMWE5NjI0YjljMC4uNGU1ZTM0YTc3Yjc2ZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTE2MjUsNiArMTYyNSw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG5pbmRleCBjMTZmNDYwYzAxZDY4Li5mNjMwMTU4MjA0YjRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtcmVzdi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZmaW9fcGNpX3ByaXYuaFxcXCJcXG5AQCAtMTksNyArMjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbiBcXHR1MzIgbnJfcmFuZ2VzO1xcbiBcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVwZGF0ZXMgcHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XFxuK1xcdCAqIHByb3RlY3RlZCBieSBtZW1vcnlfbG9jay5cXG4rXFx0ICovXFxuK1xcdHUxNiB0cGhfc3RfZXh0O1xcbitcXHR1OCB0cGhfc3Q7XFxuK1xcdGJvb2wgcmV2b2tlZDtcXG4rXFx0dTggdHBoX3N0X3ZhbGlkOjE7XFxuK1xcdHU4IHRwaF9zdF9leHRfdmFsaWQ6MTtcXG4rXFx0dTggdHBoX3BoOjI7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuQEAgLTMwLDcgKzQxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRpZiAoIWF0dGFjaG1lbnQtXFx1MDAzZXBlZXIycGVlcilcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZXJldm9rZWQpXFxuK1xcdGlmIChSRUFEX09OQ0UocHJpdi1cXHUwMDNlcmV2b2tlZCkpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXFxuQEAgLTY5LDYgKzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCkge1xcbitcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXFx1MDAzZXRwaF9zdF9leHQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdCpzdGVlcmluZ190YWcgPSBwcml2LVxcdTAwM2V0cGhfc3Q7XFxuK1xcdH1cXG4rXFx0KnBoID0gcHJpdi1cXHUwMDNldHBoX3BoO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcXG4gXFx0XFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbkBAIC0xMDEsNiArMTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuIFxcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcXG4rXFx0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcXG4gXFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXFxuIFxcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcXG4gXFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXFxuQEAgLTMzMyw2ICszNjUsODYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbitcXHR1OCBjb21wO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF2ZGV2LVxcdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKHNldF90cGgpKTtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZzZXRfdHBoLCBhcmcsIHNpemVvZihzZXRfdHBoKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0aWYgKHNldF90cGguZmxhZ3MgXFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHNldF90cGgucGggXFx1MDAyNiB+MHgzKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmICgoc2V0X3RwaC5mbGFncyBcXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpO1xcbitcXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XFxuK1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbitcXHR9XFxuK1xcbitcXHRwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0LypcXG4rXFx0ICogQHJldm9rZWQgYW5kIHRoZSBkbWEtYnVmL3ZkZXYgYXNzb2NpYXRpb24gYXJlIHRvcm4gZG93biB1bmRlclxcbitcXHQgKiBtZW1vcnlfbG9jayBieSB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKTsgaG9sZCBpdCB3aGlsZSB2YWxpZGF0aW5nXFxuK1xcdCAqIG93bmVyc2hpcCBhbmQgcHVibGlzaGluZyBzbyB0aGUgZG1hLWJ1ZiBjYW5ub3QgYmUgZGlzYXNzb2NpYXRlZCBmcm9tXFxuK1xcdCAqIEB2ZGV2IHVuZGVybmVhdGggdXMuIExvY2sgb3JkZXIgbWVtb3J5X2xvY2sgLVxcdTAwM2UgZG1hYnVmLVxcdTAwM2VyZXN2IG1hdGNoZXNcXG4rXFx0ICogdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKCkuXFxuK1xcdCAqL1xcbitcXHRkb3duX3JlYWQoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXZkZXYgIT0gdmRldikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2tfbWVtO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrX21lbTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0O1xcbitcXHRwcml2LVxcdTAwM2V0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyBcXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1QpO1xcbitcXHRwcml2LVxcdTAwM2V0cGhfc3RfZXh0X3ZhbGlkID1cXG4rXFx0XFx0ISEoc2V0X3RwaC5mbGFncyBcXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTtcXG4rXFx0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdHJldCA9IDA7XFxuK1xcbitvdXRfdW5sb2NrX21lbTpcXG4rXFx0dXBfcmVhZChcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitvdXRfcHV0OlxcbitcXHRkbWFfYnVmX3B1dChkbWFidWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcXG5AQCAtMzQ3LDcgKzQ1OSw3IEBAIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxcbiBcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmV2b2tlZCAhPSByZXZva2VkKSB7XFxuIFxcdFxcdFxcdGRtYV9yZXN2X2xvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4gXFx0XFx0XFx0aWYgKHJldm9rZWQpXFxuLVxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXJldm9rZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZXJldm9rZWQsIHRydWUpO1xcbiBcXHRcXHRcXHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4gXFx0XFx0XFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgRE1BX1JFU1ZfVVNBR0VfQk9PS0tFRVAsIGZhbHNlLFxcbkBAIC0zNjksNyArNDgxLDcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXFxuIFxcdFxcdFxcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0ZG1hX3Jlc3ZfbG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbi1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXZva2VkID0gZmFsc2U7XFxuK1xcdFxcdFxcdFxcdFdSSVRFX09OQ0UocHJpdi1cXHUwMDNlcmV2b2tlZCwgZmFsc2UpO1xcbiBcXHRcXHRcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5pbmRleCBmY2E5ZDBkZmFjOTBmLi4wNjNmMzc0ODQ3OGFlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5AQCAtMTE4LDYgKzExOCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opO1xcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xcbiAjZWxzZVxcbkBAIC0xMjgsNiArMTMyLDE1IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHJldHVybiAtRU5PVFRZO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4ge1xcbiB9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcXG5pbmRleCBkMTIwM2RhNTZmYzVmLi4xNGU4ZWI2MWE2MmMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcXG5AQCAtMTEzLDYgKzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xcbiBcXHQgKi9cXG4gXFx0dm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiBcXG4rXFx0LyoqXFxuK1xcdCAqIEBnZXRfcGNpX3RwaDpcXG4rXFx0ICpcXG4rXFx0ICogUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIHN0ZWVyaW5nIG1ldGFkYXRhIGZvclxcbitcXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cXG4rXFx0ICogb3V0Ym91bmQgVExQcyB0YXJnZXRpbmcgdGhlIGV4cG9ydGVyIGZvciBwZWVyLXRvLXBlZXIgRE1BLlxcbitcXHQgKlxcbitcXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcXG4rXFx0ICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbitcXHQgKiBAc3RlZXJpbmdfdGFnOiBSZXR1cm5zIHRoZSByYXcgVFBIIHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZFxcbitcXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcXG4rXFx0ICogQHBoOiBSZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50ICgyLWJpdCB2YWx1ZSlcXG4rXFx0ICpcXG4rXFx0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcXG4rXFx0ICogXFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXFxuK1xcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxcbitcXHQgKlxcbitcXHQgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvclxcbitcXHQgKiBkbWFfYnVmX2dldF9wY2lfdHBoKCkuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0ICAgdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XFxuK1xcbiBcXHQvKipcXG4gXFx0ICogQG1hcF9kbWFfYnVmOlxcbiBcXHQgKlxcbkBAIC01NjMsNiArNTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRcXHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4gaW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XFxuIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcXG4gXFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXFxuaW5kZXggYjE4NzFjMDgyMWQwYi4uZDI2ZTU3NDRjODQzYiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmhcXG5AQCAtMTE4MiwxNiArMTE4MiwzMSBAQCBpbnQgbWx4NV9kbV9zd19pY21fZGVhbGxvYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIG1seDVfc3dfaWNtX3R5cGUgdHlwZVxcbiBcXHRcXHRcXHQgICB1NjQgbGVuZ3RoLCB1MTYgdWlkLCBwaHlzX2FkZHJfdCBhZGRyLCB1MzIgb2JqX2lkKTtcXG4gXFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcXG4raW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiB0YWcsXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgKnN0X2luZGV4KTtcXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleCk7XFxuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcXG4gI2Vsc2VcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1MTYgdGFnLCB1MTYgKnN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9nZXRfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXFxuIHtcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxcbiB7XFxuIFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmggYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbmluZGV4IGJlNjhjZDE3ZjJmODMuLjc3NDNhZjZmZTQzMjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbkBAIC05LDYgKzksOCBAQFxcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuK1xcbiAvKlxcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XFxuICAqIGRlcGVuZGluZyBvbiB0aGUgbWVtb3J5IHR5cGU6IFZvbGF0aWxlIE1lbW9yeSBvciBQZXJzaXN0ZW50IE1lbW9yeS4gV2hlbiBhXFxuQEAgLTMwLDYgKzMyLDggQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpO1xcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuICNlbHNlXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxcbkBAIC00MSw2ICs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4geyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cXG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH1cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuaW5kZXggNWRlNjE4YTNhNWVlZS4uNGMxYzcwYWFjMTUwOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsNDkgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLyoqXFxuKyAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhXFxuKyAqIHdpdGggYSB2ZmlvLWV4cG9ydGVkIGRtYS1idWYuIFRoZSBkbWEtYnVmIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnlcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxcbisgKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHNcXG4rICogY2FycnlpbmcgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgYWRkaXRpb25hbGx5IHJlcXVpcmUgdGhlIGRldmljZSB0b1xcbisgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGxcXG4rICogcmV0dXJucyAtRU9QTk9UU1VQUC5cXG4rICpcXG4rICogQGRtYWJ1Zl9mZCBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRi5cXG4rICpcXG4rICogOC1iaXQgU1QgKEBzdGVlcmluZ190YWcpIGFuZCAxNi1iaXQgRXh0ZW5kZWQgU1QgKEBzdGVlcmluZ190YWdfZXh0KSBhcmVcXG4rICogZGlzdGluY3QgbmFtZXNwYWNlcy4gQGZsYWdzIGlzIHRoZSBhdXRob3JpdGF0aXZlIHZhbGlkaXR5IG1hc2sgZm9yIHRoZVxcbisgKiB0d28gbmFtZXNwYWNlczogVkZJT19ETUFfQlVGX1RQSF9TVCBtYXJrcyBAc3RlZXJpbmdfdGFnIHZhbGlkIGFuZFxcbisgKiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBtYXJrcyBAc3RlZXJpbmdfdGFnX2V4dCB2YWxpZC4gQW4gaW1wb3J0ZXJcXG4rICogcmVxdWVzdHMgb25lIG5hbWVzcGFjZSBhbmQgcmVjZWl2ZXMgdGhlIG1hdGNoaW5nIHZhbHVlLlxcbisgKlxcbisgKiBFYWNoIFNFVCBmdWxseSByZXBsYWNlcyB0aGUgZG1hLWJ1ZidzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXNcXG4rICogb25seS4gQSBuYW1lc3BhY2Ugd2hvc2UgZmxhZyBiaXQgaXMgY2xlYXIgaXMgcmVwb3J0ZWQgYXMgdW5zdXBwb3J0ZWRcXG4rICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZVxcbisgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvclxcbisgKiBmdXR1cmUgaW1wb3J0ZXJzLlxcbisgKlxcbisgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cXG4rICpcXG4rICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby5cXG4rICpcXG4rICogVXNlcnNwYWNlIG11c3QgY29uZmlndXJlIFRQSCBiZWZvcmUgaGFuZGluZyB0aGUgZG1hLWJ1ZiBmZCB0byBhblxcbisgKiBpbXBvcnRlci5cXG4rICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSCAxM1xcbitcXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMClcXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDEpXFxuK1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XFxuK1xcdF9fczMyXFx0ZG1hYnVmX2ZkO1xcbitcXHRfX3UzMlxcdGZsYWdzO1xcbitcXHRfX3UxNlxcdHN0ZWVyaW5nX3RhZ19leHQ7XFxuK1xcdF9fdThcXHRzdGVlcmluZ190YWc7XFxuK1xcdF9fdThcXHRwaDtcXG4rfTtcXG4rXFxuIC8qIC0tLS0tLS0tIEFQSSBmb3IgVHlwZTEgVkZJTyBJT01NVSAtLS0tLS0tLSAqL1xcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM1OjU3Ljk3MDIzNTAwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjkwNjQ4MjU0NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgbWV0YWRhdGEgcmV0cmlldmFsIGZyb20gRE1BIGJ1ZmZlcnMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBtbHg1YCBkcml2ZXIgKE1lbGxhbm94IENvbm5lY3RYKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgYW5kIGluIGB2ZmlvLXBjaWAgdmlhIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAgaW9jdGwuIFRoZSBWRklPIGlvY3RsIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gdGhlIHVuZGVybHlpbmcgUENJIGRldmljZSdzIERldmljZSBDYXBhYmlsaXRpZXMgMiByZWdpc3RlciAoYFBDSV9FWFBfREVWQ0FQMmApLiBTaW5jZSBzdGFuZGFyZCBRRU1VIGVtdWxhdGVkIGRldmljZXMgZG8gbm90IGltcGxlbWVudCBUUEggQ29tcGxldGVyIHN1cHBvcnQsIHRoZSBjb3JlIGxvZ2ljIG9mIHRoaXMgaW9jdGwgd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAgZWFybHkgYW5kIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBgZG1hLWJ1Zi5jYCBhbmQgYHBjaS90cGguY2AgYXJlIG9ubHkgaW52b2tlZCBieSB0aGVzZSB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQyNGQ0YWM0YjYxYzdmNzIwZjVhZTNkM2ZmYTAzNDYzZjE0NzMyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDY6MzU6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuaW5kZXggZDUwNGM2MzZkYzI5NC4uNzFmMzM1NDQyYmE3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbkBAIC05MzksNiArOTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoKVxuICAqICAgICAtIGRtYV9idWZfdm1hcCgpXG4gICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKVxuKyAqICAgICAtIGRtYV9idWZfZ2V0X3BjaV90cGgoKVxuICAqXG4gICogMi4gSW1wb3J0ZXJzIG11c3Qgbm90IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcbiAgKiAgICBmdW5jdGlvbnM6XG5AQCAtOTc5LDYgKzk4MCw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudW5tYXBfZG1hX2J1ZigpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudm1hcCgpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudnVubWFwKClcbisgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXG4gICogICAgZnVuY3Rpb25zOlxuQEAgLTExNDQsNiArMTE0NiwzNiBAQCB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxuIH1cbiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCBcIkRNQV9CVUZcIik7XG4gXG4rLyoqXG4rICogZG1hX2J1Zl9nZXRfcGNpX3RwaCAtIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBtZXRhZGF0YVxuKyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcbisgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUXG4rICogQHN0ZWVyaW5nX3RhZzogcmV0dXJucyB0aGUgcmF3IHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2VcbisgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcbisgKlxuKyAqIFdyYXBwZXIgZm9yIHRoZSBvcHRpb25hbCBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cbisgKlxuKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlXG4rICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZVxuKyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuXG4rICpcbisgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlXG4rICogZXhwb3J0ZXIgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbWFwcGluZyAoc2lnbmFsbGVkIHRvIHRoZSBpbXBvcnRlciB2aWFcbisgKiBcdTAwMjZkbWFfYnVmX2F0dGFjaF9vcHMuaW52YWxpZGF0ZV9tYXBwaW5ncykuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XG4rICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLlxuKyAqL1xuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbit7XG4rXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCBcIkRNQV9CVUZcIik7XG4rXG4gLyoqXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xuICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbmluZGV4IDAyODA5MTE0ZmM3OWEuLmEyYjQ5N2Y2YjE2YmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uY1xuQEAgLTYwLDYgKzYwLDcgQEBcbiBNT0RVTEVfQVVUSE9SKFwiRWxpIENvaGVuIFx1MDAzY2VsaUBtZWxsYW5veC5jb21cdTAwM2VcIik7XG4gTU9EVUxFX0RFU0NSSVBUSU9OKFwiTWVsbGFub3ggNXRoIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoQ29ubmVjdFggc2VyaWVzKSBJQiBkcml2ZXJcIik7XG4gTU9EVUxFX0xJQ0VOU0UoXCJEdWFsIEJTRC9HUExcIik7XG4rTU9EVUxFX0lNUE9SVF9OUyhcIkRNQV9CVUZcIik7XG4gXG4gc3RydWN0IG1seDVfaWJfZXZlbnRfd29yayB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG5pbmRleCA1MjI5ODRkOTU4YmJmLi5jNmE5NTZiMmVlODdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWx4NV9pYi5oXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tbHg1X2liLmhcbkBAIC02NDYsNiArNjQ2LDE1IEBAIGVudW0gbWx4NV9ta2V5X3R5cGUge1xuIC8qIFVzZWQgZm9yIG5vbi1leGlzdGVudCBwaCB2YWx1ZSAqL1xuICNkZWZpbmUgTUxYNV9JQl9OT19QSCAweGZmXG4gXG4rc3RydWN0IGRtYV9idWY7XG4rXG4rc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCB7XG4rXHR1MTYgc3RlZXJpbmdfdGFnO1xuK1x0dTggcGg7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0Ym9vbCB2YWxpZDtcbit9O1xuK1xuIHN0cnVjdCBtbHg1X2liX21rZXkge1xuIFx0dTMyIGtleTtcbiBcdGVudW0gbWx4NV9ta2V5X3R5cGUgdHlwZTtcbkBAIC03MjYsNiArNzM1LDcgQEAgc3RydWN0IG1seDVfaWJfbXIge1xuIFx0XHRcdHU4IHJldm9rZWQgOjE7XG4gXHRcdFx0LyogSW5kaWNhdGVzIHByZXZpb3VzIGRtYWJ1ZiBwYWdlIGZhdWx0IG9jY3VycmVkICovXG4gXHRcdFx0dTggZG1hYnVmX2ZhdWx0ZWQ6MTtcbitcdFx0XHRzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoIGRtYWJ1Zl90cGg7XG4gXHRcdFx0c3RydWN0IG1seDVfaWJfbWtleSBudWxsX21ta2V5O1xuIFx0XHR9O1xuIFx0fTtcbkBAIC0xMzQxLDYgKzEzNTEsNyBAQCBzdHJ1Y3QgaWJfbXIgKm1seDVfaWJfcmVyZWdfdXNlcl9tcihzdHJ1Y3QgaWJfbXIgKmliX21yLCBpbnQgZmxhZ3MsIHU2NCBzdGFydCxcbiBcdFx0XHRcdCAgICB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLCBpbnQgYWNjZXNzX2ZsYWdzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpO1xuIGludCBtbHg1X2liX2RlcmVnX21yKHN0cnVjdCBpYl9tciAqaWJtciwgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7XG4raW50IG1seDVfaWJfdmFsaWRhdGVfZG1hYnVmX3RwaChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIsIHN0cnVjdCBkbWFfYnVmICpkbWFidWYpO1xuIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9hbGxvY19tcihzdHJ1Y3QgaWJfcGQgKnBkLCBlbnVtIGliX21yX3R5cGUgbXJfdHlwZSxcbiBcdFx0XHQgICAgICAgdTMyIG1heF9udW1fc2cpO1xuIHN0cnVjdCBpYl9tciAqbWx4NV9pYl9hbGxvY19tcl9pbnRlZ3JpdHkoc3RydWN0IGliX3BkICpwZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbXIuY1xuaW5kZXggZTZiNzQ5NTVkOTVkYy4uNDA0YzVkMDgxYjhhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21yLmNcbkBAIC0zOSw2ICszOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NyZG1hL2ZybXJfcG9vbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3JkbWEvaWJfdW1lbV9vZHAuaFx1MDAzZVxuICNpbmNsdWRlIFwiZG0uaFwiXG5AQCAtMTY3LDYgKzE2OCw2MSBAQCBzdGF0aWMgaW50IGdldF91bmNoYW5nZWFibGVfYWNjZXNzX2ZsYWdzKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuICNkZWZpbmUgTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyBHRU5NQVNLX1VMTCgyMywgMTYpXG4gI2RlZmluZSBNTFg1X0ZSTVJfUE9PTFNfS0VSTkVMX0tFWV9TVF9JTkRFWF9NQVNLIEdFTk1BU0tfVUxMKDE1LCAwKVxuIFxuK3N0YXRpYyB1OCBtbHg1X2liX3RwaF9rZXlfcGgodTggcGgpXG4re1xuK1x0aWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMClcbitcdFx0cGggXj0gTUxYNV9JQl9OT19QSDtcbitcbitcdHJldHVybiBwaDtcbit9XG4rXG4rc3RhdGljIGludCBtbHg1X2liX2dldF9zdF9oYW5kbGVfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4re1xuK1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gbWx4NV9zdF9nZXRfaW5kZXgoZGV2LVx1MDAzZW1kZXYsIHN0X2luZGV4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LCB1MTYgc3RfaW5kZXgpXG4re1xuK1x0aWYgKHN0X2luZGV4ID09IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWx4NV9zdF9kZWFsbG9jX2luZGV4KGRldi1cdTAwM2VtZGV2LCBzdF9pbmRleCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1seDVfaWJfcHV0X3N0X2hhbmRsZV9yZWYoc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsXG4rXHRcdFx0XHQgICAgICB1NjQga2VybmVsX3ZlbmRvcl9rZXkpXG4re1xuK1x0dTE2IHN0X2luZGV4ID0gRklFTERfR0VUKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssXG4rXHRcdFx0XHQga2VybmVsX3ZlbmRvcl9rZXkpO1xuK1xuK1x0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuK31cbitcbitpbnQgbWx4NV9pYl92YWxpZGF0ZV9kbWFidWZfdHBoKHN0cnVjdCBtbHg1X2liX21yICptciwgc3RydWN0IGRtYV9idWYgKmRtYWJ1Zilcbit7XG4rXHRzdHJ1Y3QgbWx4NV9pYl9kbWFidWZfdHBoICp0cGggPSBcdTAwMjZtci1cdTAwM2VkbWFidWZfdHBoO1xuK1x0dTE2IHN0ZWVyaW5nX3RhZztcbitcdHU4IHBoO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdHBoLVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcbitcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCB0cGgtXHUwMDNlZXh0ZW5kZWQsIFx1MDAyNnN0ZWVyaW5nX3RhZywgXHUwMDI2cGgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoc3RlZXJpbmdfdGFnICE9IHRwaC1cdTAwM2VzdGVlcmluZ190YWcgfHwgcGggIT0gdHBoLVx1MDAzZXBoKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IG1seDVfaWJfbXIgKlxuIF9tbHg1X2ZybXJfcG9vbF9hbGxvYyhzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdCAgICAgIGludCBhY2Nlc3NfZmxhZ3MsIGludCBhY2Nlc3NfbW9kZSxcbkBAIC0xODksMTMgKzI0NSwxMCBAQCBfbWx4NV9mcm1yX3Bvb2xfYWxsb2Moc3RydWN0IG1seDVfaWJfZGV2ICpkZXYsIHN0cnVjdCBpYl91bWVtICp1bWVtLFxuIFx0XHRcdE1MWDVfRlJNUl9QT09MU19LRVlfQUNDRVNTX01PREVfS1NNX01BU0sgOlxuIFx0XHRcdDA7XG4gXG4tXHQvKiBOb3JtYWxpemUgcGg6IHN3YXAgMCBhbmQgTUxYNV9JQl9OT19QSCAqL1xuLVx0aWYgKHBoID09IE1MWDVfSUJfTk9fUEggfHwgcGggPT0gMClcbi1cdFx0cGggXj0gTUxYNV9JQl9OT19QSDtcbi1cbiBcdG1yLVx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxuIFx0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4tXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSywgcGgpO1xuK1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1BIX01BU0ssXG4rXHRcdFx0ICAgbWx4NV9pYl90cGhfa2V5X3BoKHBoKSk7XG4gXHRlcnIgPSBpYl9mcm1yX3Bvb2xfcG9wKFx1MDAyNmRldi1cdTAwM2VpYl9kZXYsIFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFx0aWYgKGVycikge1xuIFx0XHRrZnJlZShtcik7XG5AQCAtMjE4LDcgKzI3MSw5IEBAIHN0cnVjdCBtbHg1X2liX21yICptbHg1X21yX2NhY2hlX2FsbG9jKHN0cnVjdCBtbHg1X2liX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgICAgMCA6XG4gXHRcdFx0XHQgICAgICBNTFg1X0ZSTVJfUE9PTFNfS0VZX0FDQ0VTU19NT0RFX0tTTV9NQVNLLFxuIFx0XHQubnVtX2RtYV9ibG9ja3MgPSBuZGVzY3MsXG4tXHRcdC5rZXJuZWxfdmVuZG9yX2tleSA9IDAsIC8qIG5vIFBIIGFuZCBubyBTVCBpbmRleCAqL1xuK1x0XHQua2VybmVsX3ZlbmRvcl9rZXkgPVxuK1x0XHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfU1RfSU5ERVhfTUFTSyxcbitcdFx0XHRcdCAgIE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWCksXG4gXHR9O1xuIFx0c3RydWN0IG1seDVfaWJfbXIgKm1yO1xuIFx0aW50IHJldDtcbkBAIC01NTcsNiArNjEyLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NV9pYl9tciAqcmVnX2NyZWF0ZShzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdG1yLVx1MDAzZWlibXIucGQgPSBwZDtcbiBcdG1yLVx1MDAzZWFjY2Vzc19mbGFncyA9IGFjY2Vzc19mbGFncztcbiBcdG1yLVx1MDAzZXBhZ2Vfc2hpZnQgPSBvcmRlcl9iYXNlXzIocGFnZV9zaXplKTtcbitcdG1yLVx1MDAzZWlibXIuZnJtci5rZXkua2VybmVsX3ZlbmRvcl9rZXkgPVxuK1x0XHRGSUVMRF9QUkVQKE1MWDVfRlJNUl9QT09MU19LRVJORUxfS0VZX1NUX0lOREVYX01BU0ssIHN0X2luZGV4KSB8XG4rXHRcdEZJRUxEX1BSRVAoTUxYNV9GUk1SX1BPT0xTX0tFUk5FTF9LRVlfUEhfTUFTSyxcbitcdFx0XHQgICBtbHg1X2liX3RwaF9rZXlfcGgocGgpKTtcbiBcbiBcdGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfbWtleV9pbik7XG4gXHRpZiAocG9wdWxhdGUpXG5AQCAtNzUzLDYgKzgxMiwxMiBAQCBzdGF0aWMgc3RydWN0IGliX21yICpjcmVhdGVfcmVhbF9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqdW1lbSxcbiBcdFx0XHRzdF9pbmRleCA9IG1kbWFoLVx1MDAzZXN0X2luZGV4O1xuIFx0fVxuIFxuK1x0ZXJyID0gbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0fVxuK1xuIFx0eGx0X3dpdGhfdW1yID0gbWx4NXJfdW1yX2Nhbl9sb2FkX3BhcyhkZXYsIHVtZW0tXHUwMDNlbGVuZ3RoKTtcbiBcdGlmICh4bHRfd2l0aF91bXIpIHtcbiBcdFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIHVtZW0sIGlvdmEsIGFjY2Vzc19mbGFncyxcbkBAIC03NjksNiArODM0LDcgQEAgc3RhdGljIHN0cnVjdCBpYl9tciAqY3JlYXRlX3JlYWxfbXIoc3RydWN0IGliX3BkICpwZCwgc3RydWN0IGliX3VtZW0gKnVtZW0sXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlc2xvd19wYXRoX211dGV4KTtcbiBcdH1cbiBcdGlmIChJU19FUlIobXIpKSB7XG4rXHRcdG1seDVfaWJfcHV0X3N0X2luZGV4X3JlZihkZXYsIHN0X2luZGV4KTtcbiBcdFx0aWJfdW1lbV9yZWxlYXNlKHVtZW0pO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1QobXIpO1xuIFx0fVxuQEAgLTkwMyw2ICs5NjksNjMgQEAgc3RhdGljIHN0cnVjdCBkbWFfYnVmX2F0dGFjaF9vcHMgbWx4NV9pYl9kbWFidWZfYXR0YWNoX29wcyA9IHtcbiBcdC5pbnZhbGlkYXRlX21hcHBpbmdzID0gbWx4NV9pYl9kbWFidWZfaW52YWxpZGF0ZV9jYixcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIGdldF9wY2lfdHBoX21yX2RtYWJ1ZihzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbitcdFx0XHRcdCAgc3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCAqdHBoLFxuK1x0XHRcdFx0ICB1MTYgKnN0X2luZGV4LCB1OCAqcGgpXG4re1xuK1x0dTE2IGxvY2FsX3N0X2luZGV4O1xuK1x0dTE2IHN0ZWVyaW5nX3RhZztcbitcdHU4IGxvY2FsX3BoO1xuK1x0Ym9vbCBleHRlbmRlZDtcbitcdGludCByZXQ7XG4rXG4rXHRzd2l0Y2ggKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoZGV2LVx1MDAzZW1kZXYtXHUwMDNlcGRldikpIHtcbitcdGNhc2UgUENJX1RQSF9SRVFfVFBIX09OTFk6XG4rXHRcdGV4dGVuZGVkID0gZmFsc2U7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBQQ0lfVFBIX1JFUV9FWFRfVFBIOlxuK1x0XHRleHRlbmRlZCA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIGRtYV9idWZfZ2V0X3BjaV90cGgoKSBtdXN0IHJ1biB1bmRlciBkbWFidWYtXHUwMDNlcmVzdiwgYnV0IGRyb3AgdGhlIGxvY2tcbitcdCAqIGJlZm9yZSBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZygpOiB0aGF0IGFsbG9jYXRlcyB3aXRoIEdGUF9LRVJORUwsXG4rXHQgKiB3aGljaCBtdXN0IG5vdCBydW4gdW5kZXIgZG1hYnVmLVx1MDAzZXJlc3Ygc2luY2UgcmVjbGFpbSBjYW4gcmUtZW50ZXIgdGhlXG4rXHQgKiBzYW1lIHJlc2VydmF0aW9uIG9iamVjdCB0aHJvdWdoIGEgZHluYW1pYyBleHBvcnRlcidzIG1vdmVfbm90aWZ5IHBhdGguXG4rXHQgKi9cbitcdGRtYV9yZXN2X2xvY2soZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBcdTAwMjZzdGVlcmluZ190YWcsIFx1MDAyNmxvY2FsX3BoKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGlmIChyZXQgIT0gLUVPUE5PVFNVUFApXG4rXHRcdFx0bWx4NV9pYl9kYmcoZGV2LCBcImdldF9wY2lfdHBoIGZhaWxlZCAoJWQpXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKGRldi1cdTAwM2VtZGV2LCBzdGVlcmluZ190YWcsXG4rXHRcdFx0XHRcdCBcdTAwMjZsb2NhbF9zdF9pbmRleCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1seDVfaWJfZGJnKGRldiwgXCJzdF9hbGxvY19pbmRleF9ieV90YWcgZmFpbGVkICglZClcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0KnN0X2luZGV4ID0gbG9jYWxfc3RfaW5kZXg7XG4rXHQqcGggPSBsb2NhbF9waDtcbitcdHRwaC1cdTAwM2VzdGVlcmluZ190YWcgPSBzdGVlcmluZ190YWc7XG4rXHR0cGgtXHUwMDNlcGggPSBsb2NhbF9waDtcbitcdHRwaC1cdTAwM2VleHRlbmRlZCA9IGV4dGVuZGVkO1xuK1x0dHBoLVx1MDAzZXZhbGlkID0gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbWx4NV9pYl9tcl9wdXRfc3RfaGFuZGxlX3JlZihzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4re1xuK1x0bWx4NV9pYl9wdXRfc3RfaGFuZGxlX3JlZihtcl90b19tZGV2KG1yKSxcbitcdFx0XHRcdCAgbXItXHUwMDNlaWJtci5mcm1yLmtleS5rZXJuZWxfdmVuZG9yX2tleSk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgaWJfbXIgKlxuIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxuIFx0XHQgICB1NjQgb2Zmc2V0LCB1NjQgbGVuZ3RoLCB1NjQgdmlydF9hZGRyLFxuQEAgLTkxMyw2ICsxMDM2LDcgQEAgcmVnX3VzZXJfbXJfZG1hYnVmKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXZpY2UsXG4gXHRzdHJ1Y3QgbWx4NV9pYl9kZXYgKmRldiA9IHRvX21kZXYocGQtXHUwMDNlZGV2aWNlKTtcbiBcdHN0cnVjdCBtbHg1X2liX21yICptciA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWJfdW1lbV9kbWFidWYgKnVtZW1fZG1hYnVmO1xuK1x0c3RydWN0IG1seDVfaWJfZG1hYnVmX3RwaCB0cGggPSB7fTtcbiBcdHUxNiBzdF9pbmRleCA9IE1MWDVfTUtDX1BDSUVfVFBIX05PX1NURUVSSU5HX1RBR19JTkRFWDtcbiBcdHU4IHBoID0gTUxYNV9JQl9OT19QSDtcbiBcdGludCBlcnI7XG5AQCAtOTQ1LDE4ICsxMDY5LDI5IEBAIHJlZ191c2VyX21yX2RtYWJ1ZihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlLFxuIFx0XHRwaCA9IGRtYWgtXHUwMDNlcGg7XG4gXHRcdGlmIChkbWFoLVx1MDAzZXZhbGlkX2ZpZWxkcyBcdTAwMjYgQklUKElCX0RNQUhfQ1BVX0lEX0VYSVNUUykpXG4gXHRcdFx0c3RfaW5kZXggPSBtZG1haC1cdTAwM2VzdF9pbmRleDtcbitcbitcdFx0ZXJyID0gbWx4NV9pYl9nZXRfc3RfaGFuZGxlX3JlZihkZXYsIHN0X2luZGV4KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGliX3VtZW1fcmVsZWFzZShcdTAwMjZ1bWVtX2RtYWJ1Zi1cdTAwM2V1bWVtKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRnZXRfcGNpX3RwaF9tcl9kbWFidWYoZGV2LCB1bWVtX2RtYWJ1Zi1cdTAwM2VhdHRhY2gtXHUwMDNlZG1hYnVmLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2dHBoLCBcdTAwMjZzdF9pbmRleCwgXHUwMDI2cGgpO1xuIFx0fVxuIFxuIFx0bXIgPSBhbGxvY19jYWNoZWFibGVfbXIocGQsIFx1MDAyNnVtZW1fZG1hYnVmLVx1MDAzZXVtZW0sIHZpcnRfYWRkcixcbiBcdFx0XHRcdGFjY2Vzc19mbGFncywgYWNjZXNzX21vZGUsXG4gXHRcdFx0XHRzdF9pbmRleCwgcGgpO1xuIFx0aWYgKElTX0VSUihtcikpIHtcbitcdFx0bWx4NV9pYl9wdXRfc3RfaW5kZXhfcmVmKGRldiwgc3RfaW5kZXgpO1xuIFx0XHRpYl91bWVtX3JlbGVhc2UoXHUwMDI2dW1lbV9kbWFidWYtXHUwMDNldW1lbSk7XG4gXHRcdHJldHVybiBFUlJfQ0FTVChtcik7XG4gXHR9XG4gXG4gXHRtbHg1X2liX2RiZyhkZXYsIFwibWtleSAweCV4XFxuXCIsIG1yLVx1MDAzZW1ta2V5LmtleSk7XG4gXG4rXHRtci1cdTAwM2VkbWFidWZfdHBoID0gdHBoO1xuIFx0YXRvbWljX2FkZChpYl91bWVtX251bV9wYWdlcyhtci1cdTAwM2V1bWVtKSwgXHUwMDI2ZGV2LVx1MDAzZW1kZXYtXHUwMDNlcHJpdi5yZWdfcGFnZXMpO1xuIFx0dW1lbV9kbWFidWYtXHUwMDNlcHJpdmF0ZSA9IG1yO1xuIFx0aWYgKCFwaW5uZWRfbW9kZSkge1xuQEAgLTE0MDUsNiArMTU0MCw3IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wpIHtcbiBcdFx0aWYgKCFtbHg1X3Vtcl9yZXZva2VfbXJfd2l0aF9sb2NrKG1yKSkge1xuIFx0XHRcdGliX2ZybXJfcG9vbF9wdXNoKG1yLVx1MDAzZWlibXIuZGV2aWNlLCBcdTAwMjZtci1cdTAwM2VpYm1yKTtcbitcdFx0XHRtbHg1X2liX21yX3B1dF9zdF9oYW5kbGVfcmVmKG1yKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuIFx0fVxuQEAgLTE0MzIsNiArMTU2OCw5IEBAIHN0YXRpYyBpbnQgbWx4NXJfaGFuZGxlX21rZXlfY2xlYW51cChzdHJ1Y3QgbWx4NV9pYl9tciAqbXIpXG4gXHRpZiAobXItXHUwMDNlaWJtci5mcm1yLnBvb2wgXHUwMDI2XHUwMDI2ICFyZXQpXG4gXHRcdGliX2ZybXJfcG9vbF9kcm9wKFx1MDAyNm1yLVx1MDAzZWlibXIpO1xuIFxuK1x0aWYgKCFyZXQpXG4rXHRcdG1seDVfaWJfbXJfcHV0X3N0X2hhbmRsZV9yZWYobXIpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuaW5kZXggMWJhZGVjOWJmNTI3MC4uN2MxNzMxYWEzZGQ5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9vZHAuY1xuQEAgLTg1Nyw2ICs4NTcsMTMgQEAgc3RhdGljIGludCBwYWdlZmF1bHRfZG1hYnVmX21yKHN0cnVjdCBtbHg1X2liX21yICptciwgc2l6ZV90IGJjbnQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4rXHRlcnIgPSBtbHg1X2liX3ZhbGlkYXRlX2RtYWJ1Zl90cGgobXIsIHVtZW1fZG1hYnVmLVx1MDAzZWF0dGFjaC1cdTAwM2VkbWFidWYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpYl91bWVtX2RtYWJ1Zl91bm1hcF9wYWdlcyh1bWVtX2RtYWJ1Zik7XG4rXHRcdGRtYV9yZXN2X3VubG9jayh1bWVtX2RtYWJ1Zi1cdTAwM2VhdHRhY2gtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuIFx0cGFnZV9zaXplID0gbWx4NV91bWVtX2RtYWJ1Zl9maW5kX2Jlc3RfcGdzeih1bWVtX2RtYWJ1ZiwgYWNjZXNzX21vZGUpO1xuIFx0aWYgKCFwYWdlX3NpemUpIHtcbiBcdFx0aWJfdW1lbV9kbWFidWZfdW5tYXBfcGFnZXModW1lbV9kbWFidWYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuaW5kZXggN2NlZGMzNDg3OTBkYi4uYzYyYmNhZTdjNTQyMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc3QuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zdC5jXG5AQCAtOTIsMjMgKzkyLDE4IEBAIHZvaWQgbWx4NV9zdF9kZXN0cm95KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRrZnJlZShzdCk7XG4gfVxuIFxuLWludCBtbHg1X3N0X2FsbG9jX2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuLVx0XHRcdHVuc2lnbmVkIGludCBjcHVfdWlkLCB1MTYgKnN0X2luZGV4KVxuK2ludCBtbHg1X3N0X2FsbG9jX2luZGV4X2J5X3RhZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdGFnLFxuK1x0XHRcdCAgICAgICB1MTYgKnN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbiBcdHN0cnVjdCBtbHg1X3N0ICpzdCA9IGRldi1cdTAwM2VzdDtcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gXHR1MzIgeGFfaWQ7XG4tXHR1MTYgdGFnO1xuLVx0aW50IHJldDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKCFzdClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdChkZXYtXHUwMDNlcGRldiwgbWVtX3R5cGUsIGNwdV91aWQsIFx1MDAyNnRhZyk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKHN0LVx1MDAzZWRpcmVjdF9tb2RlKSB7XG4gXHRcdCpzdF9pbmRleCA9IHRhZztcbiBcdFx0cmV0dXJuIDA7XG5AQCAtMTUyLDggKzE0Nyw0OSBAQCBpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzdC1cdTAwM2Vsb2NrKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKTtcbitcbitpbnQgbWx4NV9zdF9hbGxvY19pbmRleChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitcdFx0XHR1bnNpZ25lZCBpbnQgY3B1X3VpZCwgdTE2ICpzdF9pbmRleClcbit7XG4rXHR1MTYgdGFnO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZGV2LVx1MDAzZXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0KGRldi1cdTAwM2VwZGV2LCBtZW1fdHlwZSwgY3B1X3VpZCwgXHUwMDI2dGFnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoZGV2LCB0YWcsIHN0X2luZGV4KTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9hbGxvY19pbmRleCk7XG4gXG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbit7XG4rXHRzdHJ1Y3QgbWx4NV9zdF9pZHhfZGF0YSAqaWR4X2RhdGE7XG4rXHRzdHJ1Y3QgbWx4NV9zdCAqc3QgPSBkZXYtXHUwMDNlc3Q7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghc3QpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChzdC1cdTAwM2VkaXJlY3RfbW9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuK1x0aWR4X2RhdGEgPSB4YV9sb2FkKFx1MDAyNnN0LVx1MDAzZWlkeF94YSwgc3RfaW5kZXgpO1xuK1x0aWYgKFdBUk5fT05fT05DRSghaWR4X2RhdGEpKVxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0ZWxzZVxuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2aWR4X2RhdGEtXHUwMDNldXNlY291bnQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnN0LVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9zdF9nZXRfaW5kZXgpO1xuK1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHN0cnVjdCBtbHg1X3N0X2lkeF9kYXRhICppZHhfZGF0YTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2Li5kMDIwMmZmN2ExYjI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMjAwLDYgKzIwMCw3IEBAIEVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUpO1xuIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHBjaV9kZXYgKnJwO1xuK1x0dTggdHBoX2NvbXA7XG4gXHR1MzIgcmVnO1xuIFx0aW50IHJldDtcbiBcbkBAIC0yMTEsOCArMjEyLDYwIEBAIHN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4rXHQvKlxuK1x0ICogMGIxMCBpcyByZXNlcnZlZDsgdHJlYXQgaXQgYXMgXCJub3Qgc3VwcG9ydGVkXCIgc28gb25seSB0aGVcbitcdCAqIGFyY2hpdGVjdGVkIGVuY29kaW5ncyByZWFjaCB0aGUgUmVxdWVzdGVyIEVuYWJsZSBmaWVsZC5cbitcdCAqL1xuK1x0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4rXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XG4rXHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4rXHRcdHJldHVybiB0cGhfY29tcDtcbitcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbit9XG4rXG4rLyoqXG4rICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJ3MgZW5hYmxlZCBUUEggcmVxdWVzdGVyIHR5cGVcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuKyAqXG4rICogUmV0dXJuOiBQQ0lfVFBIX1JFUV9ESVNBQkxFLCBQQ0lfVFBIX1JFUV9UUEhfT05MWSBvciBQQ0lfVFBIX1JFUV9FWFRfVFBILlxuKyAqL1xuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0cmV0dXJuIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlO1xuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xuK1xuKy8qKlxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcbisgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuKyAqXG4rICogUmVhZHMgdGhlIFwiVFBIIENvbXBsZXRlciBTdXBwb3J0ZWRcIiBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlXG4rICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvXG4rICogXCJub3Qgc3VwcG9ydGVkXCIgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZVxuKyAqIGRlZmluZWQgdmFsdWVzLlxuKyAqXG4rICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxuKyAqL1xuK3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHU4IHRwaF9jb21wO1xuK1x0dTMyIHJlZztcbitcbitcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4rXHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbitcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1xuK1x0LyogMGIxMCBpcyByZXNlcnZlZDsgZm9sZCBpdCBpbnRvIFwibm90IHN1cHBvcnRlZFwiIChzZWUgYWJvdmUpLiAqL1xuK1x0dHBoX2NvbXAgPSBGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZyk7XG4rXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XG4rXHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4rXHRcdHJldHVybiB0cGhfY29tcDtcbitcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiB9XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XG4gXG4gLyogV3JpdGUgdGFnIHRvIFNUIHRhYmxlIC0gUmV0dXJuIDAgaWYgT0ssIG90aGVyd2lzZSAtZXJybm8gKi9cbiBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IDNmMTFhOTYyNGI5YzAuLjRlNWUzNGE3N2I3NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xNjI1LDYgKzE2MjUsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcbitcdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggYzE2ZjQ2MGMwMWQ2OC4uZjYzMDE1ODIwNGI0ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcbkBAIC0zLDYgKzMsNyBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwidmZpb19wY2lfcHJpdi5oXCJcbkBAIC0xOSw3ICsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbitcbitcdC8qXG4rXHQgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XG4rXHQgKiBwcm90ZWN0ZWQgYnkgbWVtb3J5X2xvY2suXG4rXHQgKi9cbitcdHUxNiB0cGhfc3RfZXh0O1xuK1x0dTggdHBoX3N0O1xuK1x0Ym9vbCByZXZva2VkO1xuK1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfc3RfZXh0X3ZhbGlkOjE7XG4rXHR1OCB0cGhfcGg6MjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbkBAIC0zMCw3ICs0MSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdGlmICghYXR0YWNobWVudC1cdTAwM2VwZWVyMnBlZXIpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXJldm9rZWQpXG4rXHRpZiAoUkVBRF9PTkNFKHByaXYtXHUwMDNlcmV2b2tlZCkpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXG5AQCAtNjksNiArODAsMjYgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdFx0XHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxuK3tcbitcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4rXG4rXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRpZiAoZXh0ZW5kZWQpIHtcbitcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHQqc3RlZXJpbmdfdGFnID0gcHJpdi1cdTAwM2V0cGhfc3RfZXh0O1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF92YWxpZClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdCpzdGVlcmluZ190YWcgPSBwcml2LVx1MDAzZXRwaF9zdDtcbitcdH1cbitcdCpwaCA9IHByaXYtXHUwMDNldHBoX3BoO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfdW5tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBzZ190YWJsZSAqc2d0LFxuIFx0XHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuQEAgLTEwMSw2ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsXG4rXHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxuIFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXG4gXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbkBAIC0zMzMsNiArMzY1LDg2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggc2V0X3RwaDtcbitcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuK1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbitcdHU4IGNvbXA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuK1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGlmIChzZXRfdHBoLmZsYWdzIFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHNldF90cGgucGggXHUwMDI2IH4weDMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKChzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9wdXQ7XG4rXHR9XG4rXG4rXHRwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4rXG4rXHQvKlxuK1x0ICogQHJldm9rZWQgYW5kIHRoZSBkbWEtYnVmL3ZkZXYgYXNzb2NpYXRpb24gYXJlIHRvcm4gZG93biB1bmRlclxuK1x0ICogbWVtb3J5X2xvY2sgYnkgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCk7IGhvbGQgaXQgd2hpbGUgdmFsaWRhdGluZ1xuK1x0ICogb3duZXJzaGlwIGFuZCBwdWJsaXNoaW5nIHNvIHRoZSBkbWEtYnVmIGNhbm5vdCBiZSBkaXNhc3NvY2lhdGVkIGZyb21cbitcdCAqIEB2ZGV2IHVuZGVybmVhdGggdXMuIExvY2sgb3JkZXIgbWVtb3J5X2xvY2sgLVx1MDAzZSBkbWFidWYtXHUwMDNlcmVzdiBtYXRjaGVzXG4rXHQgKiB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoKS5cbitcdCAqL1xuK1x0ZG93bl9yZWFkKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNldmRldiAhPSB2ZGV2KSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gb3V0X3VubG9ja19tZW07XG4rXHR9XG4rXG4rXHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfdW5sb2NrX21lbTtcbitcbitcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XG4rXHRwcml2LVx1MDAzZXRwaF9waCAgICAgICAgID0gc2V0X3RwaC5waDtcbitcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XG4rXHRcdCEhKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRyZXQgPSAwO1xuK1xuK291dF91bmxvY2tfbWVtOlxuK1x0dXBfcmVhZChcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbitvdXRfcHV0OlxuK1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuQEAgLTM0Nyw3ICs0NTksNyBAQCB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbiBcdFx0aWYgKHByaXYtXHUwMDNlcmV2b2tlZCAhPSByZXZva2VkKSB7XG4gXHRcdFx0ZG1hX3Jlc3ZfbG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiBcdFx0XHRpZiAocmV2b2tlZClcbi1cdFx0XHRcdHByaXYtXHUwMDNlcmV2b2tlZCA9IHRydWU7XG4rXHRcdFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNlcmV2b2tlZCwgdHJ1ZSk7XG4gXHRcdFx0ZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHByaXYtXHUwMDNlZG1hYnVmKTtcbiBcdFx0XHRkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdixcbiBcdFx0XHRcdFx0ICAgICAgRE1BX1JFU1ZfVVNBR0VfQk9PS0tFRVAsIGZhbHNlLFxuQEAgLTM2OSw3ICs0ODEsNyBAQCB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbiBcdFx0XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSBmYWxzZTtcbitcdFx0XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VyZXZva2VkLCBmYWxzZSk7XG4gXHRcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4gXHRcdFx0fVxuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZi4uMDYzZjM3NDg0NzhhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuQEAgLTExOCw2ICsxMTgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4gI2Vsc2VcbkBAIC0xMjgsNiArMTMyLDE1IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgIHNpemVfdCBhcmdzeilcbit7XG4rXHRyZXR1cm4gLUVOT1RUWTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5pbmRleCBkMTIwM2RhNTZmYzVmLi4xNGU4ZWI2MWE2MmMwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5AQCAtMTEzLDYgKzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xuIFx0ICovXG4gXHR2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gXG4rXHQvKipcbitcdCAqIEBnZXRfcGNpX3RwaDpcbitcdCAqXG4rXHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4rXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cbitcdCAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS5cbitcdCAqXG4rXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcbitcdCAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbitcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4rXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcbitcdCAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpXG4rXHQgKlxuK1x0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcbitcdCAqIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXG4rXHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbitcdCAqXG4rXHQgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvclxuK1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxuK1x0ICovXG4rXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbitcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiArNTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuaW5kZXggYjE4NzFjMDgyMWQwYi4uZDI2ZTU3NDRjODQzYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oXG5AQCAtMTE4MiwxNiArMTE4MiwzMSBAQCBpbnQgbWx4NV9kbV9zd19pY21fZGVhbGxvYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBlbnVtIG1seDVfc3dfaWNtX3R5cGUgdHlwZVxuIFx0XHRcdCAgIHU2NCBsZW5ndGgsIHUxNiB1aWQsIHBoeXNfYWRkcl90IGFkZHIsIHUzMiBvYmpfaWQpO1xuIFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitpbnQgbWx4NV9zdF9hbGxvY19pbmRleF9ieV90YWcoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHRhZyxcbitcdFx0XHQgICAgICAgdTE2ICpzdF9pbmRleCk7XG4raW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleCk7XG4gaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdFx0dW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpO1xuIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KTtcbiAjZWxzZVxuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXhfYnlfdGFnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgICAgdTE2IHRhZywgdTE2ICpzdF9pbmRleClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfZ2V0X2luZGV4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBzdF9pbmRleClcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVfc3RfYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdV91aWQsIHUxNiAqc3RfaW5kZXgpXG4ge1xuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbitcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1X3N0X2RlYWxsb2NfaW5kZXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHN0X2luZGV4KVxuIHtcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaCBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5pbmRleCBiZTY4Y2QxN2YyZjgzLi43NzQzYWY2ZmU0MzI2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG5AQCAtOSw2ICs5LDggQEBcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxuICNkZWZpbmUgTElOVVhfUENJX1RQSF9IXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVxuK1xuIC8qXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxuICAqIGRlcGVuZGluZyBvbiB0aGUgbWVtb3J5IHR5cGU6IFZvbGF0aWxlIE1lbW9yeSBvciBQZXJzaXN0ZW50IE1lbW9yeS4gV2hlbiBhXG5AQCAtMzAsNiArMzIsOCBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbkBAIC00MSw2ICs0NSwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfVFBIX1JFUV9ESVNBQkxFOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZS4uNGMxYzcwYWFjMTUwOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbkBAIC0xNTM0LDYgKzE1MzQsNDkgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbisvKipcbisgKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIGFzc29jaWF0ZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YVxuKyAqIHdpdGggYSB2ZmlvLWV4cG9ydGVkIGRtYS1idWYuIFRoZSBkbWEtYnVmIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnlcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XG4rICogVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIERldmljZSBDYXBhYmlsaXRpZXMgMiAoYml0cyAxMzoxMik7IHJlcXVlc3RzXG4rICogY2FycnlpbmcgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgYWRkaXRpb25hbGx5IHJlcXVpcmUgdGhlIGRldmljZSB0b1xuKyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxuKyAqIHJldHVybnMgLUVPUE5PVFNVUFAuXG4rICpcbisgKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxuKyAqXG4rICogOC1iaXQgU1QgKEBzdGVlcmluZ190YWcpIGFuZCAxNi1iaXQgRXh0ZW5kZWQgU1QgKEBzdGVlcmluZ190YWdfZXh0KSBhcmVcbisgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBAZmxhZ3MgaXMgdGhlIGF1dGhvcml0YXRpdmUgdmFsaWRpdHkgbWFzayBmb3IgdGhlXG4rICogdHdvIG5hbWVzcGFjZXM6IFZGSU9fRE1BX0JVRl9UUEhfU1QgbWFya3MgQHN0ZWVyaW5nX3RhZyB2YWxpZCBhbmRcbisgKiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBtYXJrcyBAc3RlZXJpbmdfdGFnX2V4dCB2YWxpZC4gQW4gaW1wb3J0ZXJcbisgKiByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXG4rICpcbisgKiBFYWNoIFNFVCBmdWxseSByZXBsYWNlcyB0aGUgZG1hLWJ1ZidzIFRQSCBzdGF0ZSBmb3IgZnV0dXJlIHF1ZXJpZXNcbisgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZFxuKyAqIHRvIGZ1dHVyZSBpbXBvcnRlcnM7IGFuIGltcG9ydGVyIHRoYXQgaGFzIGFscmVhZHkgcmV0cmlldmVkIGEgdmFsdWVcbisgKiBpcyB1bmFmZmVjdGVkLiBAZmxhZ3MgPT0gMCBsZWF2ZXMgYm90aCBuYW1lc3BhY2VzIHVuc3VwcG9ydGVkIGZvclxuKyAqIGZ1dHVyZSBpbXBvcnRlcnMuXG4rICpcbisgKiBAcGggaXMgdGhlIDItYml0IFRMUCBQcm9jZXNzaW5nIEhpbnQgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAzXS5cbisgKlxuKyAqIFVuZGVmaW5lZCBAZmxhZ3MgYW5kIEBwaCBiaXRzIG11c3QgYWx3YXlzIGJlIHplcm8uXG4rICpcbisgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuXG4rICogaW1wb3J0ZXIuXG4rICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG4rXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUXHRcdCgxIFx1MDAzY1x1MDAzYyAwKVxuKyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcdFx0KDEgXHUwMDNjXHUwMDNjIDEpXG4rXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGgge1xuK1x0X19zMzJcdGRtYWJ1Zl9mZDtcbitcdF9fdTMyXHRmbGFncztcbitcdF9fdTE2XHRzdGVlcmluZ190YWdfZXh0O1xuK1x0X191OFx0c3RlZXJpbmdfdGFnO1xuK1x0X191OFx0cGg7XG4rfTtcbitcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM1OjU3Ljk3MDIzNjk2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5NzA1NDMxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgbGlzdCBvZiBtb2RpZmllZCBmaWxlcyBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZTogYGRyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNgLCB0aGUgbWx4NSBpbmZpbmliYW5kIHN0dWZmLCBgZHJpdmVycy9wY2kvdHBoLmNgLCBhbmQgc2V2ZXJhbCBWRklPIGZpbGVzIChgdmZpb19wY2lfY29yZS5jYCwgYHZmaW9fcGNpX2RtYWJ1Zi5jYCwgZXRjLiksIHBsdXMgcmVsZXZhbnQgaGVhZGVycy4gVGhhdCdzIGEgZGVjZW50IHNwcmVhZC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGludHJvZHVjaW5nIGEgYGdldF9wY2lfdHBoYCBkbWEtYnVmIG9wZXJhdGlvbiB0byByZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgbWV0YWRhdGEuIEEgbmV3IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpcyBhZGRlZCB0byBzZXQgdGhpcyBtZXRhZGF0YSBvbiBhIFZGSU8gZXhwb3J0ZWQgZG1hLWJ1ZiwgYW5kIGl0IGxvb2tzIGxpa2UgbWx4NSBpcyBiZWluZyB1cGRhdGVkIHRvIGxldmVyYWdlIHRoaXMuXG5cbk5vdywgd2FpdCBhIHNlY29uZC4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgbWVudGlvbiBzb21lIGV4ZW1wdGlvbnMuIFwiQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIgLSB0aGF0J3MgdGhlIGNsYXVzZSBJIG5lZWQgdG8gY29uc2lkZXIuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBtbHg1IGZpdHMgdGhpcyBkZXNjcmlwdGlvbiwgcmlnaHQ/IFRoYXQgY291bGQgYmUgYSBxdWljayBvdXQsIGJ1dCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG5CdXQgd2FpdC4gVGhpcyBwYXRjaCBpcyBicm9hZGVyIHRoYW4gKmp1c3QqIG1seDUuIEl0IG1vZGlmaWVzIGBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jYCwgYGRyaXZlcnMvcGNpL3RwaC5jYCwgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYCDigJMgYW5kIGNydWNpYWxseSwgVkZJTyBjYW4gYmUgcmVhY2hlZCBpbiBRRU1VLCByaWdodD8gV2UgaGF2ZSB2ZmlvLXBjaSB3aGljaCBjYW4gcHJlc2VudCByZWFsIGRldmljZXMsIGJ1dCBteSBtZW1vcnkgaXMsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gY29uZmlybSwgYnV0IHN5emthbGxlciBoYXMgc29tZSBWRklPIGRlc2NyaXB0aW9ucy4gVGhpcyBpcyB0aGUgYW5nbGUgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBJcyBWRklPIGZ1enphYmxlPyBUaGUgYW5zd2VyIHNob3VsZCBiZSB5ZXMuIFN5emthbGxlciBoYXMgYHN5el9rdm1fc2V0dXBfY3B1YCBhbmQgVkZJTyBzdHVmZiwgd2hpY2ggaXMgcHJvbWlzaW5nLlxuXG5UaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzIGlmIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGlzIHJlYWNoYWJsZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxsIHBhdGguIE9rYXksIGl0J3MgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAuIFdpdGggdGhlIFZGSU8gcGF0aCBvcGVuLCB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzY6MDcuOTQwNzgyMzEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTUxMDQ0NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MTA9aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOC1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyOTpcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYzMC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnc3opO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zNjctXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNjg6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zNjktXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTE4PWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMC1cXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTIxOmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyMi1cXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMzY9c3RhdGljIGlubGluZSBpbnRcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaDoxMzc6dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEzOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozNjowOS42MzU4OTIzNjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0ODY2OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXcgdmZpby1wY2kgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGgsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgbmV3IGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgcmVhY2hhYmlsaXR5IG9mIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgLiBJcyB0aGlzIGEgbmV3IGVudHJ5IHBvaW50LCBvciBhIGZ1bmN0aW9uIHRoYXQncyBhbHJlYWR5IHdlbGwtdHJvZGRlbj8gS25vd2luZyB0aGUgYW5zd2VyIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUsIGFuZCB0aGVyZWZvcmUgYWxzbyBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgdGVzdGluZyByZWdpbWUgcmVxdWlyZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgb3RoZXIgZW50cnkgcG9pbnRzIGludm9rZSB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjEzLjI0MDc2MjcyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzEzMTAwOTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE1ODE9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgaGlzaV9hY2NfdmZpb19wY2lfbWlncm5fb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNTg4LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IGhpc2lfYWNjX3ZmaW9faW9jdGxfZ2V0X3JlZ2lvbixcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE1ODk6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTU5MC1cXHQucmVhZCA9IGhpc2lfYWNjX3ZmaW9fcGNpX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE2MDI9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgaGlzaV9hY2NfdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjA5LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jOjE2MTA6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTYxMS1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYz0zMzU9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgaXNtX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzQyLVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IGlzbV92ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM0MzpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jLTM0NC1cXHQucmVhZCA9IGlzbV92ZmlvX3BjaV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYz0xMzg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIG1seDV2Zl9wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xMzkzLVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jOjEzOTQ6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtMTM5NS1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwNjQ9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbnZncmFjZV9ncHVfcGNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNzEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gbnZncmFjZV9ncHVfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwNzI6XFx0LmRldmljZV9mZWF0dXJlXFx0PSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA3My1cXHQucmVhZFxcdFxcdD0gbnZncmFjZV9ncHVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwODk9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgbnZncmFjZV9ncHVfcGNpX2NvcmVfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA5Ni1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA5NzpcXHQuZGV2aWNlX2ZlYXR1cmVcXHQ9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDk4LVxcdC5yZWFkXFx0XFx0PSB2ZmlvX3BjaV9jb3JlX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jPTE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyBwZHNfdmZpb19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3Bkcy92ZmlvX2Rldi5jLTE5OC1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvdmZpb19kZXYuYzoxOTk6XFx0LmRldmljZV9mZWF0dXJlID0gdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlLFxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3ZmaW9fZGV2LmMtMjAwLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE0OT1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTU2LVxcdC5nZXRfcmVnaW9uX2luZm9fY2FwcyA9IHZmaW9fcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTU3OlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTU4LVxcdC5yZWFkXFx0XFx0PSB2ZmlvX3BjaV9jb3JlX3JlYWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTgzPXN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MDktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYxMDppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxMS1cXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjM0LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjM1OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYzNi1cXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV9sbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtOTEtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzo5MjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTkzLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTEwNj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB2aXJ0aW92Zl92ZmlvX3BjaV90cmFuX2xtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xMTMtXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmlydGlvdmZfcGNpX2lvY3RsX2dldF9yZWdpb25faW5mbyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmM6MTE0OlxcdC5kZXZpY2VfZmVhdHVyZSA9IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZpcnRpby9tYWluLmMtMTE1LVxcdC5yZWFkID0gdmlydGlvdmZfcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYz0xMjg9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmlydGlvdmZfdmZpb19wY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNS1cXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX3BjaV9pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jOjEzNjpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTEzNy1cXHQucmVhZCA9IHZmaW9fcGNpX2NvcmVfcmVhZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jPTUyMj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fZGV2aWNlX29wcyB4ZV92ZmlvX3BjaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01MjktXFx0LmdldF9yZWdpb25faW5mb19jYXBzID0gdmZpb19wY2lfaW9jdGxfZ2V0X3JlZ2lvbl9pbmZvLFxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jOjUzMDpcXHQuZGV2aWNlX2ZlYXR1cmUgPSB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUsXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmMtNTMxLVxcdC5yZWFkID0gdmZpb19wY2lfY29yZV9yZWFkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTc0PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC0xNzUtXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjE3NjppbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtMTc3LVxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjE0Ljk1Mzg3MDQzOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDg5MDE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVkZJTyBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgIGZ1bmN0aW9uIGFuZCBzZWVpbmcgdGhhdCBpdCdzIGFjdHVhbGx5IGludGVncmF0ZWQgYXMgdGhlIGAuZGV2aWNlX2ZlYXR1cmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHZmaW9fcGNpX29wc2Agc3RydWN0dXJlLiBUaGF0IHRlbGxzIG1lIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIGlzIGRpcmVjdGx5IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLCByZWFjaGFibGUgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGEgVkZJTyBkZXZpY2UgZmlsZSBkZXNjcmlwdG9yLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGNhbiB0aGlzIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyPyBJIGtub3cgc3l6a2FsbGVyIGhhcyBgc3l6X2t2bV9zZXR1cF9jcHVgLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwsIGJ1dCB0aGVyZSBpcyBhbHNvIGEgYHN5cy9saW51eC92ZmlvLnR4dGAgZmlsZSB0aGF0IGV4cGxpY2l0bHkgZGVzY3JpYmVzIFZGSU8gaW9jdGxzLiBJIHNob3VsZCBjaGVjayBpZiBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaXMgZXZlbiB0YXJnZXRlZCBieSBzeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzQwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjE4Ljc2Mjc3NDU3NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgwMDA3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZGSU9fREVWSUNFX0ZFQVRVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL2NkeC9tYWluLmM9ODQ9c3RhdGljIGludCB2ZmlvX2NkeF9ibV9jdHJsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05Ny1cXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYzo5ODpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy05OS1cXHRcXHRcXHRcXHQgc2l6ZW9mKG9wcykpO1xcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTA2LVxcdHN3aXRjaCAob3BzLm9wKSB7XFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM6MTA3OlxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9DTEVBUl9NQVNURVI6XFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTA4LVxcdFxcdHJldHVybiBjZHhfY2xlYXJfbWFzdGVyKGNkeF9kZXYpO1xcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjEwOTpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUX01BU1RFUjpcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMTAtXFx0XFx0cmV0dXJuIGNkeF9zZXRfbWFzdGVyKGNkeF9kZXYpO1xcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmM9MTE2PXN0YXRpYyBpbnQgdmZpb19jZHhfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL2NkeC9tYWluLmMtMTE4LXtcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYzoxMTk6XFx0c3dpdGNoIChmbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfTUFTSykge1xcbmRyaXZlcnMvdmZpby9jZHgvbWFpbi5jOjEyMDpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfQlVTX01BU1RFUjpcXG5kcml2ZXJzL3ZmaW8vY2R4L21haW4uYy0xMjEtXFx0XFx0cmV0dXJuIHZmaW9fY2R4X2JtX2N0cmwoZGV2aWNlLCBmbGFncywgYXJnLCBhcmdzeik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTQ1OT1zdGF0aWMgbG9uZyBtbHg1dmZfcHJlY29weV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMtNTA5LVxcdC8qXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYzo1MTA6XFx0ICogb3B0LWluIGZvciBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiBzZXJ2ZXNcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jLTUxMS1cXHQgKiBhcyBvcHQtaW4gZm9yIFZGSU9fUFJFQ09QWV9JTkZPX1JFSU5JVCBhcyB3ZWxsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0zOTQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX3BtX2VudHJ5KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMzk4LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjM5OTpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgMCk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNDAwLVxcdGlmIChyZXQgIT0gMSlcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTQxMj1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfcG1fZW50cnlfd2l0aF93YWtldXAoXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00MjAtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6NDIxOlxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTQyMi1cXHRcXHRcXHRcXHQgc2l6ZW9mKGVudHJ5KSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz00Njk9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX3BtX2V4aXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00NzMtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6NDc0OlxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCAwKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy00NzUtXFx0aWYgKHJldCAhPSAxKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTU4Mz1zdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk1LVxcdCAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1OTY6XFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTU5Ny1cXHRcXHRcXHRcXHQgc2l6ZW9mKHV1aWQpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2MTA9aW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxNS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjE2OlxcdHN3aXRjaCAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX01BU0spIHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjE3OlxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUlk6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYxOC1cXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9wbV9lbnRyeSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYxOTpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VOVFJZX1dJVEhfV0FLRVVQOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjAtXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfcG1fZW50cnlfd2l0aF93YWtldXAodmRldiwgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGFyZywgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2MjI6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FWElUOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjMtXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfcG1fZXhpdCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyNDpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2MjUtXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyNjpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjI3LVxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTYyODpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTYyOS1cXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjI2NzpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTI2OC1cXHRcXHRcXHRcXHQgc2l6ZW9mKGdldF9kbWFfYnVmKSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzg1LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Mzg2OlxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzg3LVxcdFxcdFxcdFxcdCBzaXplb2Yoc2V0X3RwaCkpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTkwNz12ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ19kZXZpY2Vfc3RhdGUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtOTIwLVxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjkyMTpcXHRcXHRcXHRcXHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgfFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzo5MjI6XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MjMtXFx0XFx0XFx0XFx0IHNpemVvZihtaWcpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MjktXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjkzMDpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCkge1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05MzEtXFx0XFx0ZW51bSB2ZmlvX2RldmljZV9taWdfc3RhdGUgY3Vycl9zdGF0ZTtcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NDAtXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjk0MTpcXHQvKiBIYW5kbGUgdGhlIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUICovXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk0Mi1cXHRmaWxwID0gZGV2aWNlLVxcdTAwM2VtaWdfb3BzLVxcdTAwM2VtaWdyYXRpb25fc2V0X3N0YXRlKGRldmljZSwgbWlnLmRldmljZV9zdGF0ZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9OTU3PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uX2RhdGFfc2l6ZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05NjctXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjk2ODpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtOTY5LVxcdFxcdFxcdFxcdCBzaXplb2YoZGF0YV9zaXplKSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9OTg1PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uX3ByZWNvcHlfaW5mb192MihzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy05OTItXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjk5MzpcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgMCk7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTk5NC1cXHRpZiAocmV0ICE9IDEpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTAwMT1zdGF0aWMgaW50IHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEwMTItXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEwMTM6XFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQsXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEwMTQtXFx0XFx0XFx0XFx0IHNpemVvZihtaWcpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYz0xMDg0PXZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbG9nZ2luZ19zdGFydChzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTAzLVxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjExMDQ6XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMTA1LVxcdFxcdFxcdFxcdCBzaXplb2YoY29udHJvbCkpO1xcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTExNjg9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3N0b3Aoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTE3Ny1cXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMTc4OlxcdFxcdFxcdFxcdCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwgMCk7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTExNzktXFx0aWYgKHJldCAhPSAxKVxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTExOTU9dmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3JlcG9ydChzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjEwLVxcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyMTE6XFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjEyLVxcdFxcdFxcdFxcdCBzaXplb2YocmVwb3J0KSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM9MTIzOT1zdGF0aWMgaW50IHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI1Mi1cXHRpZiAoZmVhdHVyZS5mbGFncyBcXHUwMDI2XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNTM6XFx0ICAgIH4oVkZJT19ERVZJQ0VfRkVBVFVSRV9NQVNLIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgfFxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU0OlxcdCAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSkpXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNTUtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI1Ny1cXHQvKiBHRVQgXFx1MDAyNiBTRVQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBleGNlcHQgd2l0aCBQUk9CRSAqL1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU4OlxcdGlmICghKGZlYXR1cmUuZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjU5OlxcdCAgICAoZmVhdHVyZS5mbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjYwOlxcdCAgICAoZmVhdHVyZS5mbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUKSlcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI2MS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI2Mi1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI2MzpcXHRzd2l0Y2ggKGZlYXR1cmUuZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX01BU0spIHtcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTI2NDpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OOlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjY1LVxcdFxcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX21pZ3JhdGlvbihcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjY3LVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNjg6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19ERVZJQ0VfU1RBVEU6XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyNjktXFx0XFx0cmV0dXJuIHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlnX2RldmljZV9zdGF0ZShcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjcxLVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyNzI6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1NUQVJUOlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjczLVxcdFxcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RhcnQoXFxuLS1cXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI3NS1cXHRcXHRcXHRmZWF0dXJlLmFyZ3N6IC0gbWluc3opO1xcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYzoxMjc2OlxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVE9QOlxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjc3LVxcdFxcdHJldHVybiB2ZmlvX2lvY3RsX2RldmljZV9mZWF0dXJlX2xvZ2dpbmdfc3RvcChcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjc5LVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODA6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1JFUE9SVDpcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI4MS1cXHRcXHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9sb2dnaW5nX3JlcG9ydChcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjgzLVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODQ6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19EQVRBX1NJWkU6XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEyODUtXFx0XFx0cmV0dXJuIHZmaW9faW9jdGxfZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uX2RhdGFfc2l6ZShcXG4tLVxcbmRyaXZlcnMvdmZpby92ZmlvX21haW4uYy0xMjg3LVxcdFxcdFxcdGZlYXR1cmUuYXJnc3ogLSBtaW5zeik7XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jOjEyODg6XFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MjpcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmMtMTI4OS1cXHRcXHRyZXR1cm4gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZV9taWdyYXRpb25fcHJlY29weV9pbmZvX3YyKFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jPTEzNDU9c3RhdGljIGxvbmcgdmZpb19kZXZpY2VfZm9wc191bmxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLFxcbi0tXFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEzNzctXFx0c3dpdGNoIChjbWQpIHtcXG5kcml2ZXJzL3ZmaW8vdmZpb19tYWluLmM6MTM3ODpcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkU6XFxuZHJpdmVycy92ZmlvL3ZmaW9fbWFpbi5jLTEzNzktXFx0XFx0cmV0ID0gdmZpb19pb2N0bF9kZXZpY2VfZmVhdHVyZShkZXZpY2UsIHVwdHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvLmg9Mzk9c3RydWN0IHZmaW9fZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpby5oLTExMy0gKiAgICAgICAgICAgICB0aGlzIGRldmljZSBpcyBhdHRhY2hlZCB0by5cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoxMTQ6ICogQGRldmljZV9mZWF0dXJlOiBPcHRpb25hbCwgZmlsbCBpbiB0aGUgVkZJT19ERVZJQ0VfRkVBVFVSRSBpb2N0bFxcbmluY2x1ZGUvbGludXgvdmZpby5oLTExNS0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpby5oPTIwMj1zdGF0aWMgaW5saW5lIGJvb2wgdmZpb19kZXZpY2VfY2Rldl9vcGVuZWQoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMTEtICogICAgICAgICBkZXZpY2VzIHRoYXQgc3VwcG9ydCBtaWdyYXRpb24uIEl0J3MgbWFuZGF0b3J5IGZvclxcbmluY2x1ZGUvbGludXgvdmZpby5oOjIxMjogKiAgICAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIG1pZ3JhdGlvbiBzdXBwb3J0LlxcbmluY2x1ZGUvbGludXgvdmZpby5oLTIxMy0gKiAgICAgICAgIFRoZSByZXR1cm5lZCBGRCBpcyB1c2VkIGZvciBkYXRhIHRyYW5zZmVyIGFjY29yZGluZyB0byB0aGUgRlNNXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMTgtICogICAgICAgICBkZXZpY2VzIHRoYXQgc3VwcG9ydCBtaWdyYXRpb24uIEl0J3MgbWFuZGF0b3J5IGZvclxcbmluY2x1ZGUvbGludXgvdmZpby5oOjIxOTogKiAgICAgICAgIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIG1pZ3JhdGlvbiBzdXBwb3J0LlxcbmluY2x1ZGUvbGludXgvdmZpby5oLTIyMC0gKiBAbWlncmF0aW9uX2dldF9kYXRhX3NpemU6IE9wdGlvbmFsIGNhbGxiYWNrIHRvIGdldCB0aGUgZXN0aW1hdGVkIGRhdGFcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMjEtICogICAgICAgICAgbGVuZ3RoIHRoYXQgd2lsbCBiZSByZXF1aXJlZCB0byBjb21wbGV0ZSBzdG9wIGNvcHkuIEl0J3MgbWFuZGF0b3J5IGZvclxcbmluY2x1ZGUvbGludXgvdmZpby5oOjIyMjogKiAgICAgICAgICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTiBtaWdyYXRpb24gc3VwcG9ydC5cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yMjMtICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaD0yNDk9c3RydWN0IHZmaW9fbG9nX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNTgtLyoqXFxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjU5OiAqIHZmaW9fY2hlY2tfZmVhdHVyZSAtIFZhbGlkYXRlIHVzZXIgaW5wdXQgZm9yIHRoZSBWRklPX0RFVklDRV9GRUFUVVJFIGlvY3RsXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYwLSAqIEBmbGFnczogQXJnIGZyb20gdGhlIGRldmljZV9mZWF0dXJlIG9wXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjYxLSAqIEBhcmdzejogQXJnIGZyb20gdGhlIGRldmljZV9mZWF0dXJlIG9wXFxuaW5jbHVkZS9saW51eC92ZmlvLmg6MjYyOiAqIEBzdXBwb3J0ZWRfb3BzOiBDb21iaW5hdGlvbiBvZiBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCBhbmQgU0VUIHRoZSBkcml2ZXJcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNjMtICogICAgICAgICAgICAgICAgIHN1cHBvcnRzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNjYtICogRm9yIHVzZSBpbiBhIGRyaXZlcidzIGRldmljZV9mZWF0dXJlIG9wLiBDaGVja3MgdGhhdCB0aGUgaW5wdXRzIHRvIHRoZVxcbmluY2x1ZGUvbGludXgvdmZpby5oOjI2NzogKiBWRklPX0RFVklDRV9GRUFUVVJFIGlvY3RsIGFyZSBjb3JyZWN0IGZvciB0aGUgZHJpdmVyJ3MgZmVhdHVyZS4gUmV0dXJucyAxIGlmXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjY4LSAqIHRoZSBkcml2ZXIgc2hvdWxkIGV4ZWN1dGUgdGhlIGdldCBvciBzZXQsIG90aGVyd2lzZSB0aGUgcmVsZXZhbnRcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpby5oPTI3MT1zdGF0aWMgaW5saW5lIGludCB2ZmlvX2NoZWNrX2ZlYXR1cmUodTMyIGZsYWdzLCBzaXplX3QgYXJnc3osIHUzMiBzdXBwb3J0ZWRfb3BzLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjczLXtcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaDoyNzQ6XFx0aWYgKChmbGFncyBcXHUwMDI2IChWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSkgXFx1MDAyNlxcbmluY2x1ZGUvbGludXgvdmZpby5oLTI3NS1cXHQgICAgfnN1cHBvcnRlZF9vcHMpXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjc2LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmluY2x1ZGUvbGludXgvdmZpby5oOjI3NzpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9GRUFUVVJFX1BST0JFKVxcbmluY2x1ZGUvbGludXgvdmZpby5oLTI3OC1cXHRcXHRyZXR1cm4gMDtcXG5pbmNsdWRlL2xpbnV4L3ZmaW8uaC0yNzktXFx0LyogV2l0aG91dCBQUk9CRSBvbmUgb2YgR0VUIG9yIFNFVCBtdXN0IGJlIHJlcXVlc3RlZCAqL1xcbmluY2x1ZGUvbGludXgvdmZpby5oOjI4MDpcXHRpZiAoIShmbGFncyBcXHUwMDI2IChWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSkpXFxuaW5jbHVkZS9saW51eC92ZmlvLmgtMjgxLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvbW11ZmQuaD0yMTE9c3RydWN0IGlvbW11X2lvYXNfbWFwIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pb21tdWZkLmgtMjM0LSAqIGRtYS1idWYgaW1wb3J0IHBhdGg7IGN1cnJlbnRseSBzdXBwb3J0ZWQgZG1hLWJ1ZnMgaW5jbHVkZSBzaW5nbGUtcmFuZ2VcXG5pbmNsdWRlL3VhcGkvbGludXgvaW9tbXVmZC5oOjIzNTogKiBWRklPIFBDSSBkbWEtYnVmcyBleHBvcnRlZCB0aHJvdWdoIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgYW5kXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lvbW11ZmQuaC0yMzYtICogb3RoZXIgZG1hLWJ1ZnMgbWF5IGJlIHJlamVjdGVkLiBBbGwgb3RoZXIgYXJndW1lbnRzIGFuZCBzZW1hbnRpY3MgbWF0Y2hcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9ODYxPXN0cnVjdCB2ZmlvX2RldmljZV9pb2V2ZW50ZmQge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NzctLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4Nzg6ICogVkZJT19ERVZJQ0VfRkVBVFVSRSAtIF9JT1dSKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTcsXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC04NzktICpcXHRcXHRcXHQgICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmUpXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTg5Mz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTg5NS1cXHRfX3UzMlxcdGZsYWdzO1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODk2OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NQVNLXFx0KDB4ZmZmZikgLyogMTYtYml0IGZlYXR1cmUgaW5kZXggKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjg5NzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMTYpIC8qIEdldCBmZWF0dXJlIGludG8gZGF0YVtdICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo4OTg6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVFxcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIDE3KSAvKiBTZXQgZmVhdHVyZSBmcm9tIGRhdGFbXSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6ODk5OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDE4KSAvKiBQcm9iZSBmZWF0dXJlIHN1cHBvcnQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTkwMC1cXHRfX3U4XFx0ZGF0YVtdO1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDItXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDo5MDM6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFXFx0XFx0X0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTcpXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MDQtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTkxMy0gKiBAdG9rZW5fdXVpZF9wdHI6IFZhbGlkIGlmIFZGSU9fREVWSUNFX0JJTkRfRkxBR19UT0tFTi4gUG9pbnRzIHRvIGEgMTYgYnl0ZVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6OTE0OiAqICAgICAgICAgICAgICAgICAgVVVJRCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgVkZJT19ERVZJQ0VfRkVBVFVSRV9QQ0lfVkZfVE9LRU4uXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MTUtICpcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtOTI1LSAqIGlnbm9yZWQuIFRoZSBvbmx5IGNhc2UgdG9kYXkgaXMgYSBQRi9WRiByZWxhdGlvbnNoaXAgd2hlcmUgdGhlIFZGIGJpbmQgbXVzdFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6OTI2OiAqIGJlIHByb3ZpZGVkIHRoZSBzYW1lIHRva2VuIGFzIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOIHByb3ZpZGVkIHRvXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC05MjctICogdGhlIFBGLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD05OTY9c3RydWN0IHZmaW9fZGV2aWNlX2RldGFjaF9pb21tdWZkX3B0IHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMS0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEwMTI6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1BDSV9WRl9UT0tFTlxcdCgwKVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxMy1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxNS0gKiBJbmRpY2F0ZXMgdGhlIGRldmljZSBjYW4gc3VwcG9ydCB0aGUgbWlncmF0aW9uIEFQSSB0aHJvdWdoXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDE2OiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX0RFVklDRV9TVEFURS4gSWYgdGhpcyBHRVQgc3VjY2VlZHMsIHRoZSBSVU5OSU5HIGFuZFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTAxNy0gKiBFUlJPUiBzdGF0ZXMgYXJlIGFsd2F5cyBzdXBwb3J0ZWQuIFN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgc3RhdGVzIGlzXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEwMzY9c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfbWlncmF0aW9uIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA0MS19O1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTA0MjojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHUkFUSU9OIDFcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNDMtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDQ0LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDQ1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGV4ZWN1dGUgYSBtaWdyYXRpb24gc3RhdGUgY2hhbmdlIG9uIHRoZSBWRklPXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDQ2LSAqIGRldmljZS4gVGhlIG5ldyBzdGF0ZSBpcyBzdXBwbGllZCBpbiBkZXZpY2Vfc3RhdGUsIHNlZSBlbnVtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNjgtICpcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEwNjk6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCwgZ2V0IHRoZSBjdXJyZW50IG1pZ3JhdGlvbiBzdGF0ZSBvZiB0aGUgVkZJT1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTA3MC0gKiBkZXZpY2UsIGRhdGFfZmQgd2lsbCBiZSAtMS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTA3Mj1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9taWdfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMDc1LX07XFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMDc2OiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREVWSUNFX1NUQVRFIDJcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEwNzctXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTExOTItICogICBzdXBwb3J0IHdpbGwgYmUgZGlzY292ZXJhYmxlIGJ5IGEgbmV3IGZsYWcgaW5cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjExOTM6ICogICBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTi5cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTExOTQtICpcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTIzMS0gKiBzdXBwb3J0IHRoZW0uIFRoZSB1c2VyIGNhbiBkaXNjb3ZlciBpZiB0aGVzZSBzdGF0ZXMgYXJlIHN1cHBvcnRlZCBieSB1c2luZ1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTIzMjogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR1JBVElPTi4gQnkgdXNpbmcgY29tYmluYXRpb24gdHJhbnNpdGlvbnMgdGhlIHVzZXIgY2FuXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMjMzLSAqIGF2b2lkIGtub3dpbmcgYWJvdXQgdGhlc2Ugb3B0aW9uYWwgc3RhdGVzIGlmIHRoZSBrZXJuZWwgZHJpdmVyIHN1cHBvcnRzIHRoZW0uXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oPTEyMzg9ZW51bSB2ZmlvX2RldmljZV9taWdfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMjc4LSAqIFZGSU9fUFJFQ09QWV9JTkZPX1JFSU5JVCBjYW4gYmUgcmVwb3J0ZWQgb25seSBhZnRlciB1c2Vyc3BhY2Ugb3B0cyBpbiB0b1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTI3OTogKiBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92Mi4gV2l0aG91dCB0aGlzIG9wdC1pbiwgdGhlIGZsYWdzIGZpZWxkXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMjgwLSAqIG9mIHN0cnVjdCB2ZmlvX3ByZWNvcHlfaW5mbyBpcyByZXNlcnZlZCBmb3IgYnVnLWNvbXBhdGliaWxpdHkgcmVhc29ucy5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTMxND1zdHJ1Y3QgdmZpb19wcmVjb3B5X2luZm8ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzI0LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzI1OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIGFsbG93IHRoZSBkZXZpY2UgdG8gYmUgbW92ZWQgaW50byBhIGxvdyBwb3dlclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTMyNi0gKiBzdGF0ZSB3aXRoIHRoZSBwbGF0Zm9ybS1iYXNlZCBwb3dlciBtYW5hZ2VtZW50LiAgRGV2aWNlIHVzZSBvZiBsb3dlciBwb3dlclxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzM2LSAqIHdpdGggd2FrZS11cCBub3RpZmljYXRpb24sIHNlZVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTMzNzogKiBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWV9XSVRIX1dBS0VVUCBiZWxvdy4gIEFjY2VzcyB0byBtbWFwJ2RcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzMzgtICogZGV2aWNlIHJlZ2lvbnMgaXMgZGlzYWJsZWQgb24gTE9XX1BPV0VSX0VOVFJZIGFuZCBtYXkgb25seSBiZSByZXN1bWVkIGFmdGVyXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzNDAtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxMzQxOiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9MT1dfUE9XRVJfRU5UUlkgM1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0Mi1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0NC0gKiBUaGlzIGRldmljZSBmZWF0dXJlIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhc1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM0NTogKiBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgdXNlclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM0Ni0gKiBwcm92aWRlcyBhbiBldmVudGZkIGZvciB3YWtlLXVwIG5vdGlmaWNhdGlvbi4gIFdoZW4gdGhlIGRldmljZSBtb3ZlcyBvdXQgb2ZcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTM2ND1zdHJ1Y3QgdmZpb19kZXZpY2VfbG93X3Bvd2VyX2VudHJ5X3dpdGhfd2FrZXVwIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM2OC1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNjk6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWV9XSVRIX1dBS0VVUCA0XFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzcwLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3MS0vKlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM3MjogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULCBkaXNhbGxvdyB1c2Ugb2YgZGV2aWNlIGxvdyBwb3dlciBzdGF0ZXMgYXNcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzNzM6ICogcHJldmlvdXNseSBlbmFibGVkIHZpYSBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWSBvclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM3NDogKiBWRklPX0RFVklDRV9GRUFUVVJFX0xPV19QT1dFUl9FTlRSWV9XSVRIX1dBS0VVUCBkZXZpY2UgZmVhdHVyZXMuXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzc1LSAqIFRoaXMgZGV2aWNlIGZlYXR1cmUgSU9DVEwgbWF5IGl0c2VsZiBnZW5lcmF0ZSBhIHdha2V1cCBldmVudGZkIG5vdGlmaWNhdGlvblxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xMzc3LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTM3ODojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTE9XX1BPV0VSX0VYSVQgNVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM3OS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTEzODAtLypcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODE6ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBzdGFydC9zdG9wIGRldmljZSBETUEgbG9nZ2luZy5cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODI6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9QUk9CRSBjYW4gYmUgdXNlZCB0byBkZXRlY3QgaWYgdGhlIGRldmljZSBzdXBwb3J0c1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4My0gKiBETUEgbG9nZ2luZy5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM4OC0gKiBkdXJpbmcgdGhlIHByZSBjb3B5IHBoYXNlIG9mIGxpdmUgbWlncmF0aW9uLiBPbmx5IERNQSBXUklURXMgYXJlIGxvZ2dlZCxcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjEzODk6ICogYW5kIHRoaXMgQVBJIGlzIG5vdCBjb25uZWN0ZWQgdG8gVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfREVWSUNFX1NUQVRFLlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTM5MC0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNDE4PXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9sb2dnaW5nX3JhbmdlIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQyMi1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0MjM6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1NUQVJUIDZcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0MjQtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI1LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDI2OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgc3RvcCBkZXZpY2UgRE1BIGxvZ2dpbmcgdGhhdCB3YXMgc3RhcnRlZFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQyNzogKiBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9MT0dHSU5HX1NUQVJUXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDI4LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQyOTojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfU1RPUCA3XFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDMwLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQzMS0vKlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQzMjogKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHJlYWQgYmFjayBhbmQgY2xlYXIgdGhlIGRldmljZSBETUEgbG9nXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDMzLSAqXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NDItICogVGhlIGlucHV0IHBhZ2Vfc2l6ZSBjYW4gYmUgYW55IHBvd2VyIG9mIHR3byB2YWx1ZSBhbmQgZG9lcyBub3QgaGF2ZSB0b1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ0MzogKiBtYXRjaCB0aGUgdmFsdWUgZ2l2ZW4gdG8gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfTE9HR0lOR19TVEFSVC4gVGhlIGRyaXZlclxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ0NC0gKiB3aWxsIGZvcm1hdCBpdHMgaW50ZXJuYWwgbG9nZ2luZyB0byBtYXRjaCB0aGUgcmVwb3J0aW5nIHBhZ2Ugc2l6ZSwgcG9zc2libHlcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTQ1Nz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfbG9nZ2luZ19yZXBvcnQge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDYzLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ2NDojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0xPR0dJTkdfUkVQT1JUIDhcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NjUtXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDY2LS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDY3OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgcmVhZCBiYWNrIHRoZSBlc3RpbWF0ZWQgZGF0YSBsZW5ndGggdGhhdCB3aWxsXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNDY4LSAqIGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHN0b3AgY29weS5cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg9MTQ3Mz1zdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9taWdfZGF0YV9zaXplIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3Ni1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0Nzc6I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19EQVRBX1NJWkUgOVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ3OC1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE0NzktLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNDgwOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsIHNldCBvciBjbGVhciB0aGUgQlVTIG1hc3RlcmluZyBmb3IgdGhlIGRldmljZVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ4MS0gKiBiYXNlZCBvbiB0aGUgb3BlcmF0aW9uIHNwZWNpZmllZCBpbiBvcCBmbGFnLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNDkzPXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2J1c19tYXN0ZXIge1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5NC1cXHRfX3UzMiBvcDtcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0OTU6I2RlZmluZVxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfQ0xFQVJfTUFTVEVSXFx0MFxcdC8qIENsZWFyIEJ1cyBNYXN0ZXIgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE0OTY6I2RlZmluZVxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUX01BU1RFUlxcdFxcdDFcXHQvKiBTZXQgQnVzIE1hc3RlciAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5Ny19O1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTQ5ODojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfQlVTX01BU1RFUiAxMFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTQ5OS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MDAtLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTAxOiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgY3JlYXRlIGEgZG1hX2J1ZiBmZCBmb3IgdGhlXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTAyLSAqIHJlZ2lvbnMgc2VsZWN0ZWQuXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MTEtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTEyOiNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIDExXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTEzLVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaD0xNTE5PXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTI5LSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTMwOiAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyLlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUzMS0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTM0LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTUzNTojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTUzNi1cXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1MzctLyoqXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaDoxNTM4OiAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTM5LSAqIHdpdGggYSB2ZmlvLWV4cG9ydGVkIGRtYS1idWYuIFRoZSBkbWEtYnVmIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnlcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oOjE1NDA6ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydFxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0MS0gKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHNcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0NS0gKlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTU0NjogKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgtMTU0Ny0gKlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaC0xNTY2LSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC92ZmlvLmg6MTU2NzojZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTNcXG5pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oLTE1NjgtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xMTg9c3RhdGljIGludCB2ZmlvX2RldmljZV9mZWF0dXJlX2lvY3RsKGludCBmZCwgdTMyIGZsYWdzLCB2b2lkICpkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMtMTI4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jOjEyOTpcXHRyZXR1cm4gaW9jdGwoZmQsIFZGSU9fREVWSUNFX0ZFQVRVUkUsIGZlYXR1cmUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTEzMC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xMzI9c3RhdGljIHZvaWQgdmZpb19kZXZpY2VfZmVhdHVyZV9zZXQoaW50IGZkLCB1MTYgZmVhdHVyZSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYy0xMzMte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jOjEzNDpcXHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCB8IGZlYXR1cmU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMtMTM1LVxcdGludCByZXQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYz0xNDE9dm9pZCB2ZmlvX2RldmljZV9zZXRfdmZfdG9rZW4oaW50IGZkLCBjb25zdCBjaGFyICp2Zl90b2tlbilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0Ny1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYzoxNDg6XFx0dmZpb19kZXZpY2VfZmVhdHVyZV9zZXQoZmQsIFZGSU9fREVWSUNFX0ZFQVRVUkVfUENJX1ZGX1RPS0VOLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jLTE0OS1cXHRcXHRcXHRcXHR0b2tlbl91dWlkLCBzaXplb2YodXVpZF90KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjIwLjQ0Mjc4ODA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgyMzI4ODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgVkZJTyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSGAsIGEgbmV3IGZlYXR1cmUgZm9yIHRoZSBgVkZJT19ERVZJQ0VfRkVBVFVSRWAgaW9jdGwuIEl0IGFsc28gY2hhbmdlcyB0aGUgTWVsbGFub3ggQ29ubmVjdFggZHJpdmVyLCBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvYCwgdG8gdXNlIHRoaXMgZG1hLWJ1ZiBUUEggbWV0YWRhdGEuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBiZSBmdXp6aW5nLlxuXG5UaGUgaW5zdHJ1Y3Rpb25zIEknbSB3b3JraW5nIGZyb20gc2F5IHRvIHNraXAgaXQgaWYgaXQncyBvbmx5IGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyB0aGUgY3J1eC4gTm93LCBtbHg1IGlzIGEgTWVsbGFub3ggQ29ubmVjdFggZHJpdmVyLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGF0IGhhcmR3YXJlLiBJIGhhdmUgYSBsaXN0IGhlcmU6IGBody9uZXQvcm9ja2VyLmNgLCBgaHcvbmV0L2UxMDAwLmNgLCBgaHcvbmV0L3ZpcnRpby1uZXQuY2AsIGBody9uZXQvdm14bmV0My5jYC4uLiBidXQgbm8gbWx4NS5cblxuSG93ZXZlciwgdGhlIHBhdGNoIGRvZXNuJ3QganVzdCB0b3VjaCBtbHg1LiBJdCBhbHNvIG1vZGlmaWVzIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYW5kIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYC4gKlRoYXQqIGNoYW5nZXMgdGhpbmdzLiBJcyBWRklPIFBDSSBlbXVsYXRlZD8gWWVzLCBRRU1VIGhhcyBgdmZpby1wY2lgLiBCdXQgYHZmaW8tcGNpYCBpcyAqdXN1YWxseSogdXNlZCB0byBwYXNzIHRocm91Z2ggcGh5c2ljYWwgZGV2aWNlcywgbm90IGVtdWxhdGVkIG9uZXMuIFNvLCB0aGUgcXVlc3Rpb24gcmVtYWluczogQ2FuIHdlIHRlc3QgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgd2l0aG91dCBuZWVkaW5nIGEgcGh5c2ljYWwgZGV2aWNlP1xuXG5MZXQncyBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYDpcblxuYGBgY1xuXHRpZiAoIXZkZXYtXHUwMDNlcGNpX29wcyB8fCAhdmRldi1cdTAwM2VwY2lfb3BzLVx1MDAzZWdldF9kbWFidWZfcGh5cylcblx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5cblx0Y29tcCA9IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtXHUwMDNlcGRldik7XG5cdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmBgYFxuXG5SaWdodCwgaXQgcmVxdWlyZXMgYHZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXNgLiBUaGF0J3MgdGhlIGNyaXRpY2FsIHBvaW50LiBXaG8gc2V0cyBgZ2V0X2RtYWJ1Zl9waHlzYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgZnV6emFibGUgd2l0aGluIGEgUUVNVSBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA5NzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzY6MjguMjY2MDgwODIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY4MzE5NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9kbWFidWZfcGh5c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz05OTY9bnZncmFjZV9ncHVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDE5LVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwMjA6c3RhdGljIGludCBudmdyYWNlX2dldF9kbWFidWZfcGh5cyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKmNvcmVfdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMDIxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNTUtXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA1NjpcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMoY29yZV92ZGV2LCBwcm92aWRlciwgcmVnaW9uX2luZGV4LFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNTctXFx0XFx0XFx0XFx0XFx0ICAgICBwaHlzX3ZlYywgZG1hX3JhbmdlcywgbnJfcmFuZ2VzKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9kZXZfb3BzID0ge1xcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEwNjE6XFx0LmdldF9kbWFidWZfcGh5cyA9IG52Z3JhY2VfZ2V0X2RtYWJ1Zl9waHlzLFxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jLTEwNjItfTtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jPTEwODU9c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Vfb3BzIG52Z3JhY2VfZ3B1X3BjaV9kZXZfY29yZV9vcHMgPSB7XFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmM6MTA4NjpcXHQuZ2V0X2RtYWJ1Zl9waHlzID0gdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMsXFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTA4Ny19O1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE3Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RldmljZV9vcHMgdmZpb19wY2lfZGV2X29wcyA9IHtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTczOlxcdC5nZXRfZG1hYnVmX3BoeXMgPSB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTc0LX07XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTIwMj1FWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2ZpbGxfcGh5c192ZWMpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjAzLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MjA0OmludCB2ZmlvX3BjaV9jb3JlX2dldF9kbWFidWZfcGh5cyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yMDUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICoqcHJvdmlkZXIsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTIyMS19XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoyMjI6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXMpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjIzLVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjMtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoyNjQ6XFx0aWYgKCF2ZGV2LVxcdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXMpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yNjUtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zMDgtXFx0cHJpdi1cXHUwMDNlc2l6ZSA9IGxlbmd0aDtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjMwOTpcXHRyZXQgPSB2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXByb3ZpZGVyLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzEwLVxcdFxcdFxcdFxcdFxcdCAgICAgZ2V0X2RtYV9idWYucmVnaW9uX2luZGV4LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0zNjg9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM3OC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM3OTpcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXFx1MDAzZXBjaV9vcHMtXFx1MDAzZWdldF9kbWFidWZfcGh5cylcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4MC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaD02MD1zdHJ1Y3QgdmZpb19wY2lfZGV2aWNlX29wcyB7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6NjE6XFx0aW50ICgqZ2V0X2RtYWJ1Zl9waHlzKShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtNjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTcwPWludCB2ZmlvX3BjaV9jb3JlX2ZpbGxfcGh5c192ZWMoc3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTczLVxcdFxcdFxcdFxcdHBoeXNfYWRkcl90IGxlbik7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6NzQ6aW50IHZmaW9fcGNpX2NvcmVfZ2V0X2RtYWJ1Zl9waHlzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaC03NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKipwcm92aWRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oPTgyPXZmaW9fcGNpX2NvcmVfZmlsbF9waHlzX3ZlYyhzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgtODgtfVxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oOjg5OnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZ2V0X2RtYWJ1Zl9waHlzKFxcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTkwLVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgc3RydWN0IHAycGRtYV9wcm92aWRlciAqKnByb3ZpZGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozNjozMC4wMzQ0MTE0MTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1Mzg0OTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBWRklPIGFuZCBETUEtQlVGIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdmZpb19wY2lfZGV2X29wc2AgYW5kIHNlZSB0aGF0IGBnZXRfZG1hYnVmX3BoeXNgIGlzIHNldCB0byBgdmZpb19wY2lfY29yZV9nZXRfZG1hYnVmX3BoeXNgIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNgLiBSaWdodCwgc28gc3RhbmRhcmQgYHZmaW8tcGNpYCBzaG91bGQsIGluIHRoZW9yeSwgc3VwcG9ydCBETUEtQlVGIGludGVncmF0aW9uLiBCdXQgaG9sZCBvbiwgdGhlcmUncyBhIGNydWNpYWwgY2hlY2sgd2l0aGluIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgOiBpdCBjYWxscyBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgLiBUaGlzLCBpbiB0dXJuLCBjaGVja3MgaWYgdGhlIFRQSCBjb21wbGV0ZXIgdHlwZSBpcyBzdXBwb3J0ZWQ7IGlmIG5vdCwgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0J3MgdGhlIHNuYWcuXG5cbk5vdywgbXkgbWFpbiBxdWVzdGlvbiBpczogZG9lcyBRRU1VLCB0aGUgdmlydHVhbCBtYWNoaW5lIGVudmlyb25tZW50LCBhY3R1YWxseSAqZW11bGF0ZSogYSBQQ0kgZGV2aWNlIHdpdGggVFBIIGNvbXBsZXRlciBzdXBwb3J0PyBJdCdzIGEgUENJZSBmZWF0dXJlLCBzbyBpZiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpdCBwcm9wZXJseSwgYHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlYCB3aWxsIHJldHVybiB0aGF0IGRyZWFkZWQgYFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IFFFTVUgaGFuZGxlcyB0aGlzLiBJIGtub3cgdGhhdCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGlzIHJlYWRpbmcgZnJvbSB0aGUgYFBDSV9FWFBfREVWQ0FQMmAgcmVnaXN0ZXIuIFNvLCBjYW4gYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5zaWRlIFFFTVUgZXZlbiAqaGF2ZSogVFBIIGNvbXBsZXRlciBzdXBwb3J0PyBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24uXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBob3cgdGhlc2UgdGVzdHMgYXJlIHJ1bi4gQ291bGQgYHN5emthbGxlcmAgaW5qZWN0IFBDSSBkZXZpY2VzIHdpdGggVFBIIHRvIHRlc3Q/IEkga25vdyB0aGF0IGBzeXprYWxsZXJgIGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgUENJIGRldmljZSBpbmplY3RvciB0aGF0IEknbSBhd2FyZSBvZiwgYW5kIGl0IHVzZXMgUUVNVSB0byB0ZXN0LiBCdXQgd2hhdCBhYm91dCB2aXJ0dWFsIEhDSSBvciBzb21ldGhpbmcgc2ltaWxhcj8gTm8sIGBzeXprYWxsZXJgIHJ1bnMgb24gUUVNVSwgc28gdGhlIHZpcnR1YWwgUENJIGRldmljZXMgd291bGQgZGVwZW5kIG9uIFFFTVUuIEJ1dCB0aGVuIGl0IHN0cnVjayBtZSwgYW5kIEkgcmVhbGlzZWQgdGhhdCBWRklPIGRldmljZXMgYXJlIHVzdWFsbHkgcGh5c2ljYWwgZGV2aWNlcyBwYXNzZWQgdGhyb3VnaC5cblxuRmluYWxseSwgZG9lcyBgc3l6a2FsbGVyYCB1c2UgbW9jayBWRklPIGRldmljZXM/IEkga25vdyBpdCBkb2VzIHNvbWV0aW1lcywgYW5kIG1heWJlIGl0IGRvZXMgaGVyZS4gU28sIGl0J3Mgd29ydGggY2hlY2tpbmcgdGhlIGtlcm5lbCBzb3VyY2UgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9jayBWRklPIGRldmljZXMgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIGlmIHRob3NlIG1vY2sgVkZJTyBkZXZpY2VzIGhhdmUgVFBIIGNhcGFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODY4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjM2OjM2LjY4ODI2MzMyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzA3OTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jPTE2Njg9c3RhdGljIGludCBoaXNpX2FjY192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYy0xNjkwLVxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2aGlzaV9hY2NfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmM6MTY5MTpcXHRyZXQgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2aGlzaV9hY2NfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMtMTY5Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jPTM1NT1zdGF0aWMgaW50IGlzbV92ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvaXNtL21haW4uYy0zNjctXFxuZHJpdmVycy92ZmlvL3BjaS9pc20vbWFpbi5jOjM2ODpcXHRyZXQgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2aXZwY2QtXFx1MDAzZWNvcmVfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL2lzbS9tYWluLmMtMzY5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jPTE0MDc9c3RhdGljIGludCBtbHg1dmZfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xNDE4LVxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2bXZkZXYtXFx1MDAzZWNvcmVfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL21seDUvbWFpbi5jOjE0MTk6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNm12ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS9tbHg1L21haW4uYy0xNDIwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYz0xMzE5PXN0YXRpYyBpbnQgbnZncmFjZV9ncHVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL252Z3JhY2UtZ3B1L21haW4uYy0xMzYwLVxcbmRyaXZlcnMvdmZpby9wY2kvbnZncmFjZS1ncHUvbWFpbi5jOjEzNjE6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNm52ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS9udmdyYWNlLWdwdS9tYWluLmMtMTM2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jPTExMD1zdGF0aWMgaW50IHBkc192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcGRzL3BjaV9kcnYuYy0xMjItXFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jOjEyMzpcXHRlcnIgPSB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShcXHUwMDI2cGRzX3ZmaW8tXFx1MDAzZXZmaW9fY29yZWRldik7XFxuZHJpdmVycy92ZmlvL3BjaS9wZHMvcGNpX2Rydi5jLTEyNC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jPTY0ND1xYXRfdmZfdmZpb19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYy02NTQtXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIFxcdTAwMjZxYXRfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvcWF0L21haW4uYzo2NTU6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnFhdF92ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS9xYXQvbWFpbi5jLTY1Ni1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jPTE3Nj1zdGF0aWMgaW50IHZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMtMTkwLVxcdHZkZXYtXFx1MDAzZXBjaV9vcHMgPSBcXHUwMDI2dmZpb19wY2lfZGV2X29wcztcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmM6MTkxOlxcdHJldCA9IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHZkZXYpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYy0xOTItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTIyMTc9RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9yZWxlYXNlX2Rldik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjIxOC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMjE5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjIyMC17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzE4LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoyMzE5OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yMzIwLVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jPTE0OT1zdGF0aWMgaW50IHZpcnRpb3ZmX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYy0xNzctXFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ2aXJ0dmRldi1cXHUwMDNlY29yZV9kZXZpY2UpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmlydGlvL21haW4uYzoxNzg6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnZpcnR2ZGV2LVxcdTAwM2Vjb3JlX2RldmljZSk7XFxuZHJpdmVycy92ZmlvL3BjaS92aXJ0aW8vbWFpbi5jLTE3OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS94ZS9tYWluLmM9NTQzPXN0YXRpYyBpbnQgeGVfdmZpb19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kveGUvbWFpbi5jLTU1NC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYzo1NTU6XFx0cmV0ID0gdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoXFx1MDAyNnhlX3ZkZXYtXFx1MDAzZWNvcmVfZGV2aWNlKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3hlL21haW4uYy01NTYtXFx0aWYgKHJldCkge1xcbi0tXFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg9MTY4PXZvaWQgdmZpb19wY2lfY29yZV9yZWxlYXNlX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldik7XFxuaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmg6MTY5OmludCB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbmluY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oLTE3MC12b2lkIHZmaW9fcGNpX2NvcmVfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzY6MzguMjcxMzQ3MTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyODk0MDcyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYHZmaW8tcGNpYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggRE1BIGJ1ZmZlcnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSB0YXJnZXQgc3lzdGVtLCBsaWtlbHkgUUVNVSBydW5uaW5nIFN5emthbGxlciwgY2FuIGV2ZW4gcmVhY2ggdGhlIGtleSBjb2RlLlxuXG5Jbml0aWFsbHksIEkgc2VlIGB2ZmlvLXBjaWAgYmVpbmcgYm91bmQgdG8gUENJIGRldmljZXMuIFN5emthbGxlcidzIFFFTVUgc2V0dXAgc2hvdWxkIGFsbG93IHRoaXMuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCwgYXMgU3l6a2FsbGVyJ3MgUUVNVSB0eXBpY2FsbHkgZGVhbHMgd2l0aCB2aXJ0dWFsIGRldmljZXMuIENhbiBTeXprYWxsZXIgYmluZCBhIGRldmljZSB0byBgdmZpby1wY2lgIGFuZCBpbnRlcmFjdCB3aXRoIGl0PyBJIHN1c3BlY3QgaXQgY2FuIHZpYSBzeXNmcyB3cml0ZXMsIGJ1dCBpdCBpcyBpbXBvcnRhbnQgdG8gY29uZmlybS5cblxuVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvYC4gQnV0LCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIHN0YXRlLCBhbnl0aGluZyB0aGF0IGRlYWxzIHdpdGggdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgbGlrZSBNZWxsYW5veCBDb25uZWN0WCBkcml2ZXJzIChgbWx4NWApIHRoYXQgcmVxdWlyZSAqcGh5c2ljYWwqIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGJ5IFFFTVUgaXMgdXN1YWxseSBjb25zaWRlcmVkIHVuaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIFdlIGNhbiBsYXJnZWx5IGlnbm9yZSBpdC5cblxuTG9va2luZyBhdCB0aGUgYHZmaW9gIHBhcnRzLCBzcGVjaWZpY2FsbHkgaW4gYHZmaW9fcGNpX2NvcmUuY2AgYW5kIGB2ZmlvX3BjaV9kbWFidWYuY2AsIHRoZSBmdW5jdGlvbiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCBjb21lcyB0byB0aGUgZm9yZWZyb250LiBUaGlzIGNoZWNrcyBmb3IgVFBIIENvbXBsZXRlciBzdXBwb3J0IHZpYSBgcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KWAuIENyaXRpY2FsbHksIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhhdCBhIFBDSSBkZXZpY2UgKnN1cHBvcnRzKiBUUEguXG5cbk5vdywgaGVyZSdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBEb2VzIFFFTVUsIGluIGEgdHlwaWNhbCBTeXprYWxsZXIgc2V0dXAsICplbXVsYXRlKiBhbnkgUENJIGRldmljZSB0aGF0IGhhcyBUUEggQ29tcGxldGVyIGNhcGFiaWxpdGllcz8gVGhhdCBpcyB0aGUgY3J1eCBvZiB0aGUgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gY2hlY2sgUUVNVSdzIFBDSSBkZXZpY2UgZW11bGF0aW9uIGNhcGFiaWxpdGllcy4gSWYgUUVNVSBkb2VzIG5vdCBlbXVsYXRlIFRQSCwgdGhpcyB3aG9sZSBicmFuY2ggd2lsbCBhbHdheXMgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgbWVhbnMgaXQncyBzdGlsbCAqcmVhY2hhYmxlKiwgYnV0IGp1c3QgcmV0dXJucyBlYXJseS5cblxuVGhlcmUgaXMgYWxzbyBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLiAgSG93ZXZlciwgYGRtYV9idWZfZ2V0X3BjaV90cGhgIGlzIGNhbGxlZCBvbmx5IGJ5IGBtbHg1YCBpbiB0aGlzIHBhdGNoIGFuZCBpcyB0aGVyZWZvcmUgdW5yZWFjaGFibGUgaW4gYSBRRU1VIHNldHVwLlxuXG5Ib3dldmVyLCB0aGUga2V5IGZ1bmN0aW9uLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVgIGlvY3RsLiBJdCBhY3F1aXJlcyBhIGRtYS1idWYgZnJvbSBhIGZpbGUgZGVzY3JpcHRvciBhbmQgc2V0cyBzb21lIGZpZWxkcywgd2hpY2ggYXJlIG9ubHkgcmVhZCBieSB0aGUgdW5yZWFjaGFibGUgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLiBTbyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgaW9jdGwgcHJvdmlkZXMgYSBmdXp6YWJsZSBzdXJmYWNlLlxuXG5JZiBUUEggaXMgKm5vdCogc3VwcG9ydGVkLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIGFuZCB0aGF0IGlzIGFsbCB0aGF0IGNhbiBoYXBwZW4uXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KWAsIHdoZXJlIGB2ZGV2LVx1MDAzZXBkZXZgIGlzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIGluIFFFTVUuICBJIG5lZWQgdG8gY2hlY2sgaG93IFRQSCBpcyBzdXBwb3J0ZWQgb24gdGhvc2UuIFRoaXMgd291bGQgaW52b2x2ZSBjaGVja2luZyBRRU1VJ3Mgc291cmNlIGNvZGUsIHRvIGxvb2sgZm9yIGFueSBlbXVsYXRlZCBQQ0kgZGV2aWNlIHdoaWNoIGV4cG9zZXMgVFBIIGNvbXBsZXRlciBjYXBhYmlsaXRpZXMsIGkuZS4gYFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWWAgb3IgYFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIYC4gSWYgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlIGZlYXR1cmUsIHdlIHdpbGwgZ2V0IHRoZSBlYXJseSByZXR1cm4sIHdoaWNoIGlzIGFyZ3VhYmx5IG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uIGxlYW5zIHRvd2FyZHMgdGhpcyBiZWluZyAqbGVzcyogZnJ1aXRmdWwuIFRoZSBwYXRjaCBpcyBpbnRlcmVzdGluZywgYXMgaXQgaW52b2x2ZXMgZG1hLWJ1ZiBpb2N0bCwgYW5kIGxvY2tzIGFyZSBhY3F1aXJlZC4gSG93ZXZlciwgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgUUVNVSwgaXQncyB1bmxpa2VseSB3ZSdsbCB0cmlnZ2VyIGFueSByZWFsIGhhcmR3YXJlIGludGVyYWN0aW9ucy4gU28gdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGlvY3RsLiBCdXQgaW4gYSByZWd1bGFyIFFFTVUgU3l6a2FsbGVyIHNldHVwLCBpZiB3ZSBjYW4ndCBnZXQgcGFzdCB0aGUgY2hlY2sgZm9yIFRQSCBzdXBwb3J0LCBpdCB3aWxsIGp1c3QgcmV0dXJuIGVhcmx5LCBvciBzZXQgZmllbGRzIHRoYXQgYXJlIG5vdCByZWFkLiAgSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBub3QganVzdCBhbiAqZWFybHkgcmV0dXJuKiBzaXR1YXRpb24sIGJ1dCBwb3RlbnRpYWxseSBhICptaXNzaW5nIGZlYXR1cmUqIGluIHN0YW5kYXJkIFFFTVUgc2V0IHVwLCB3aGljaCBjb3VsZCBhZmZlY3QgdGhlIHZpYWJpbGl0eSBvZiB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYyNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6Mzc6MDEuMTY1NDIyODQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ4Mjk1Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvdHBoLmM9MjAwPXN0YXRpYyB1OCBnZXRfcnBfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy0yMTgtXFx0ICovXFxuZHJpdmVycy9wY2kvdHBoLmM6MjE5OlxcdHRwaF9jb21wID0gRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpO1xcbmRyaXZlcnMvcGNpL3RwaC5jOjIyMDpcXHRpZiAodHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIHx8XFxuZHJpdmVycy9wY2kvdHBoLmM6MjIxOlxcdCAgICB0cGhfY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG5kcml2ZXJzL3BjaS90cGguYy0yMjItXFx0XFx0cmV0dXJuIHRwaF9jb21wO1xcbmRyaXZlcnMvcGNpL3RwaC5jOjIyMzpcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuZHJpdmVycy9wY2kvdHBoLmMtMjI0LX1cXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jPTIzNj1FWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtMjQ2LSAqXFxuZHJpdmVycy9wY2kvdHBoLmM6MjQ3OiAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG5kcml2ZXJzL3BjaS90cGguYzoyNDg6ICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuZHJpdmVycy9wY2kvdHBoLmM6MjQ5OiAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbmRyaXZlcnMvcGNpL3RwaC5jLTI1MC0gKi9cXG5kcml2ZXJzL3BjaS90cGguYz0yNTE9dTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy0yNTYtXFx0aWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXFx1MDAyNnJlZykpXFxuZHJpdmVycy9wY2kvdHBoLmM6MjU3OlxcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcXG5kcml2ZXJzL3BjaS90cGguYy0yNTgtXFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUihyZWcpKVxcbmRyaXZlcnMvcGNpL3RwaC5jOjI1OTpcXHRcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuZHJpdmVycy9wY2kvdHBoLmMtMjYwLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTI2MS1cXHQvKiAwYjEwIGlzIHJlc2VydmVkOyBmb2xkIGl0IGludG8gXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIChzZWUgYWJvdmUpLiAqL1xcbmRyaXZlcnMvcGNpL3RwaC5jOjI2MjpcXHR0cGhfY29tcCA9IEZJRUxEX0dFVChQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTUFTSywgcmVnKTtcXG5kcml2ZXJzL3BjaS90cGguYzoyNjM6XFx0aWYgKHRwaF9jb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSB8fFxcbmRyaXZlcnMvcGNpL3RwaC5jOjI2NDpcXHQgICAgdHBoX2NvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXFxuZHJpdmVycy9wY2kvdHBoLmMtMjY1LVxcdFxcdHJldHVybiB0cGhfY29tcDtcXG5kcml2ZXJzL3BjaS90cGguYzoyNjY6XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbmRyaXZlcnMvcGNpL3RwaC5jLTI2Ny19XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTM2OD1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzgyLVxcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVxcdTAwM2VwZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM4MzpcXHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM4NC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQwMC1cXHRpZiAoKHNldF90cGguZmxhZ3MgXFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjQwMTpcXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQwMi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD01MD1zdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjUxOnsgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTItI2VuZGlmXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC02NzItI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX0xUUlxcdFxcdDB4MDAwMDA4MDAgLyogTGF0ZW5jeSB0b2xlcmFuY2UgcmVwb3J0aW5nICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmg6NjczOiNkZWZpbmUgIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLXFx0MHgwMDAwMzAwMCAvKiBUUEggY29tcGxldGVyIHN1cHBvcnQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC02NzQtI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX09CRkZfTUFTS1xcdDB4MDAwYzAwMDAgLyogT0JGRiBzdXBwb3J0IG1lY2hhbmlzbSAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3BjaV9yZWdzLmgtMTA1Mi0vKiBUUEggQ29tcGxldGVyIFN1cHBvcnQgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaDoxMDUzOiNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkVcXHRcXHQweDAgLyogTm9uZSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oOjEwNTQ6I2RlZmluZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFlcXHQweDEgLyogVFBIIG9ubHkgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaDoxMDU1OiNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEhcXHQweDMgLyogVFBIIGFuZCBFeHRlbmRlZCBUUEggKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaC0xMDU2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozNzowMi45MTM3MjY5NDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3MDQ3MDA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUENJIFRQSCBNZXRhZGF0YSBSZXRyaWV2YWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoaXM/XCIgSXQgc2VlbXMgbGlrZSBpdCdzIHRyeWluZyB0byBnZXQgVFBIIG1ldGFkYXRhLCB3aGljaCByZWxpZXMgb24gYSBkZXZpY2UncyBgUENJX0VYUF9ERVZDQVAyYCByZWdpc3Rlci4gQ2FuIHN5emthbGxlciBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggdGhpcyBmZWF0dXJlPyBJdCBkb2Vzbid0IGxvb2sgbGlrZSBpdC4gU3l6a2FsbGVyIGxldmVyYWdlcyBRRU1VJ3MgZGV2aWNlIGVtdWxhdGlvbiwgYW5kIGlmIFFFTVUgZG9lc24ndCBvZmZlciBhIGRldmljZSB3aXRoIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCwgdGhpcyBpcyBkZWFkIGluIHRoZSB3YXRlciBmcm9tIHRoZSBnZXQtZ28uIEkgbWVhbiwgc3l6a2FsbGVyIGhhcyBgdmhjaWAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGFuZCBzbyBvbi4uLiBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSB3YXkgdG8gc3ludGhlc2l6ZSBQQ0kgY29uZmlnIHNwYWNlLiBJdCByZWxpZXMgb24gdGhlICp2aXJ0dWFsKiBoYXJkd2FyZSwgd2hpY2ggaXMgdGhlIHByb2JsZW0uXG5cbkFscmlnaHQsIHdoYXQgaWYgd2UgdXNlIGBDT05GSUdfVkZJT19QQ0lgIGFuZCBiaW5kIGEgdmlydHVhbCBkZXZpY2UgbGlrZSBgZTEwMDBlYCBvciBgdmlydGlvLXBjaWAgdG8gaXQ/IEJ1dCBkbyAqdGhvc2UqIGhhdmUgVFBIIENvbXBsZXRlciBzdXBwb3J0PyBJJ20gbm90IHNlZWluZyBhbnkgZHJpdmVyIHNldHRpbmcgdGhhdCBmbGFnLCBpdCdzIGEgaGFyZHdhcmUgdGhpbmcuIFRoZSBvbmx5IHdheSBJIHNlZSBpdCBoYXBwZW5pbmcgaXMgaWYgd2UgY291bGQgYWRkIHRoZSBjYXBhYmlsaXR5IG1hbnVhbGx5IGluIFFFTVUsIG1heWJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBwY2lfYWRkX2NhcGAsIGJ1dCB0aGF0J3Mgbm90IHN0YW5kYXJkIFFFTVUuIEFuZCBldmVuIGlmIHdlIGNvdWxkIHJlYWNoIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIHVwIHRvIHRoZSBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGNoZWNrLCBpcyBpdCByZWFsbHkgd29ydGggZnV6emluZyBqdXN0IGZvciB0aGF0PyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIFFFTVUsIG9yIHJlbHkgb24gc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLlxuXG5Ob3csIHRoaXMgYG1seDVgIHBhcnQgaXMgc2NyZWFtaW5nIFwidmVuZG9yLXNwZWNpZmljXCIuIFRoYXQncyBhIE1lbGxhbm94IFNtYXJ0TklDIGRyaXZlciwgcmVxdWlyaW5nICpwaHlzaWNhbCogaGFyZHdhcmUuIERlZmluaXRlbHkgb3V0LiBUaGUgYHZmaW9gIHBhcnQsIGluIGB2ZmlvX3BjaV9kbWFidWYuY2AsIHJlbGllcyBvbiBhIFBDSSBkZXZpY2UgKndpdGgqIFRQSCBDb21wbGV0ZXIuIFNpbmNlIHRoaXMgaXMgYSBoYXJkd2FyZSBmZWF0dXJlIGRlc2lnbmVkIHRvIG9wdGltaXplIGNhY2hlIHBsYWNlbWVudCBpbiBwaHlzaWNhbCBDUFVzL3Jvb3QgY29tcGxleGVzIGFuZCB0aGUgc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGxpa2UgYGUxMDAwZWAsIGB2aXJ0aW8tbmV0YCBkb24ndCBzdXBwb3J0IFRQSCwgdGhpcyBwYXRoIGlzIHVucmVhY2hhYmxlLiBBbmQgdGhlcmUncyBubyB3YXkgdG8gZmFrZSB0aGF0IGVpdGhlciwgYHZmaW8tcGNpYCBqdXN0IHBhc3NlcyB0aHJvdWdoIHRoZSBleGlzdGluZyBwaHlzaWNhbCBkZXZpY2UncyBjb25maWcgc3BhY2UuIFRoZXJlZm9yZSwgbGluZSAzODQgb2YgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgaXMgdGhlIGVuZCBvZiB0aGUgbGluZS5cblxuV2FpdCwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIGNhbiBiZSByZWFjaGVkLlxuXG5gYGBjXG5cdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRjb21wID0gcGNpZV90cGhfY29tcGxldGVyX3R5cGUodmRldi1cdTAwM2VwZGV2KTtcblx0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXG5cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuYGBgXG5cbkl0IGlzIGp1c3QgMiBgaWZgIHN0YXRlbWVudHMgYmVmb3JlIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhlcmUgYXJlIG5vIGludGVyZXN0aW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyBoZXJlLiBUaGUgYWN0dWFsIGNoYW5nZXMsIHdoaWNoIGludm9sdmUgc2V0dGluZyBUUEggbWV0YWRhdGEgYW5kIGxvY2tpbmcgdGhlIGRtYS1idWYsIGFyZSBhZnRlciB0aGUgY2hlY2suIElmIHRoZSBjaGVjayBmYWlscywgdGhlIGZ1bmN0aW9uYWwgY29kZSBpcyBuZXZlciByZWFjaGVkLiBTbyB0aGUgcmVhY2hhYmxlIHBhcnQgaXMgdHJpdmlhbCBhbmQgbm90IHdvcnRoIGZ1enppbmcuXG5cbk9rYXksIGxldCdzIHJldmlldyB0aGUgYG1seDVgIGNoYW5nZXMgbW9yZSBzcGVjaWZpY2FsbHkuIFRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tci5jYCwgYGRyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L29kcC5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3N0LmNgIGFyZSBhbGwgdGllZCB0byB0aGUgYG1seDVgIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgYSBNZWxsYW5veCBDb25uZWN0WCBhZGFwdGVyLiBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSB0aG9zZS4gU28sIHRoYXQncyBkZWZpbml0ZWx5IHVucmVhY2hhYmxlLlxuXG5UaGUgYGRtYS1idWZgIGNoYW5nZXMgYXJlIGFsc28gcHJvYmxlbWF0aWMuIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpbiBgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY2AgaXMgYSBuZXcgZXhwb3J0ZWQgZnVuY3Rpb24gYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGJ5IGBtbHg1YC4gU2luY2UgYG1seDVgIGlzIHVucmVhY2hhYmxlLCBzbyBpcyB0aGlzIG5ldyBmdW5jdGlvbi5cblxuVGhlIGBwY2lgIGNoYW5nZXMgYXJlIGp1c3QgaGVscGVyIGZ1bmN0aW9uczogYHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGVgIGFuZCBgcGNpZV90cGhfY29tcGxldGVyX3R5cGVgIGluIGBkcml2ZXJzL3BjaS90cGguY2AuIFRoZXNlIGFyZSBuZXdcblxuIiwiSW5wdXRUb2tlbnMiOjQxNDEwLCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6Mzc6MjguNjE4NDMzNzQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpIG1ldGFkYXRhIHJldHJpZXZhbCBmcm9tIERNQSBidWZmZXJzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBsb2NhdGVkIGluIHRoZSBgbWx4NWAgZHJpdmVyIChNZWxsYW5veCBDb25uZWN0WCksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIGFuZCBpbiBgdmZpby1wY2lgIHZpYSB0aGUgYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgIGlvY3RsLiBUaGUgVkZJTyBpb2N0bCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIHRoZSB1bmRlcmx5aW5nIFBDSSBkZXZpY2UncyBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgcmVnaXN0ZXIgKGBQQ0lfRVhQX0RFVkNBUDJgKS4gU2luY2Ugc3RhbmRhcmQgUUVNVSBlbXVsYXRlZCBkZXZpY2VzIGRvIG5vdCBpbXBsZW1lbnQgVFBIIENvbXBsZXRlciBzdXBwb3J0LCB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIGlvY3RsIHdpbGwgYWx3YXlzIHJldHVybiBgLUVPUE5PVFNVUFBgIGVhcmx5IGFuZCBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgaW4gYGRtYS1idWYuY2AgYW5kIGBwY2kvdHBoLmNgIGFyZSBvbmx5IGludm9rZWQgYnkgdGhlc2UgdW5yZWFjaGFibGUgY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKSBtZXRhZGF0YSByZXRyaWV2YWwgZnJvbSBETUEgYnVmZmVycy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgbG9jYXRlZCBpbiB0aGUgYG1seDVgIGRyaXZlciAoTWVsbGFub3ggQ29ubmVjdFgpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgaW4gYHZmaW8tcGNpYCB2aWEgdGhlIGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCBpb2N0bC4gVGhlIFZGSU8gaW9jdGwgZXhwbGljaXRseSBjaGVja3MgZm9yIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiB0aGUgdW5kZXJseWluZyBQQ0kgZGV2aWNlJ3MgRGV2aWNlIENhcGFiaWxpdGllcyAyIHJlZ2lzdGVyIChgUENJX0VYUF9ERVZDQVAyYCkuIFNpbmNlIHN0YW5kYXJkIFFFTVUgZW11bGF0ZWQgZGV2aWNlcyBkbyBub3QgaW1wbGVtZW50IFRQSCBDb21wbGV0ZXIgc3VwcG9ydCwgdGhlIGNvcmUgbG9naWMgb2YgdGhpcyBpb2N0bCB3aWxsIGFsd2F5cyByZXR1cm4gYC1FT1BOT1RTVVBQYCBlYXJseSBhbmQgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIGluIGBkbWEtYnVmLmNgIGFuZCBgcGNpL3RwaC5jYCBhcmUgb25seSBpbnZva2VkIGJ5IHRoZXNlIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowpm9cz[1] Phase: Running StartedAt: 2026-08-02 06:38:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpm9cz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-02 06:38:04 +0000 UTC FinishedAt: 2026-08-02 06:38:11 +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,}