Name: series-workflowslw8d Phase: Failed StartedAt: 2026-09-14 07:25:56 +0000 UTC FinishedAt: 2026-09-14 07:29:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslw8d[0] Phase: Succeeded StartedAt: 2026-09-14 07:25:56 +0000 UTC FinishedAt: 2026-09-14 07:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslw8d[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 07:25:56 +0000 UTC FinishedAt: 2026-09-14 07:29:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDczYmVlODgxNjgxYmIzZTU1NDBhNzQ4YjVjZWNlNWJiNDA4YmM3OGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwNzoyNzoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNmRkY2E0NTJiYzYzMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbkBAIC0xMSw2ICYjNDM7MTEsMzQgQEAgQ29udGFjdDpcdEpvbmF0aGFuIExlbW9uIFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVx1MDAzZVxuIERlc2NyaXB0aW9uOlx0VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIE50aCB0aW1lY2FyZFxuIFx0XHRyZWdpc3RlcmVkLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vY3BsZF9zdGF0dXNcbiYjNDM7RGF0ZTpcdFx0SnVseSAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NtYWltb24uc2FnaUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7RGVzY3JpcHRpb246XHQoUk8sIHJvb3Qgb25seSkgVGhlIGZsYWdzIHNldCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZVxuJiM0MztcdFx0VEFQIENQTEQsIHNwYWNlIHNlcGFyYXRlZCwgb3IgYW4gZW1wdHkgbGluZSB3aGVuIG5vbmUgaXNcbiYjNDM7XHRcdHNldC4gIE9ubHkgcHJlc2VudCBvbiBBRFZBIHgxIFRBUCBib2FyZHMgKFBDSSBJRFxuJiM0MztcdFx0MHhhZDVhOjB4MDQxMCkuXG4mIzQzO1xuJiM0MztcdFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0XHRkb25lICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBmbGFzaCB3YXMgcHJvZ3JhbW1lZFxuJiM0MztcdFx0XHQgICAgc3VjY2Vzc2Z1bGx5IGFuZCBpcyBhY3RpdmVcbiYjNDM7XHRcdGJ1c3kgICAgICAgIGFuIGludGVybmFsIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzc1xuJiM0MztcdFx0ZmFpbGVkICAgICAgdGhlIGxhc3QgSVNDIG9wZXJhdGlvbiBmYWlsZWRcbiYjNDM7XHRcdD09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7XHRcdEZvciBleGFtcGxlIFwmIzM0O2J1c3lcJiMzNDsgd2hpbGUgcHJvZ3JhbW1pbmcsIG9yIFwmIzM0O2J1c3kgZmFpbGVkXCYjMzQ7IGlmIGFcbiYjNDM7XHRcdGZhaWx1cmUgaXMgbGF0Y2hlZCB3aGlsZSBhbm90aGVyIG9wZXJhdGlvbiBydW5zLlxuJiM0MztcbiYjNDM7XHRcdEEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlXG4mIzQzO1x0XHRvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlXG4mIzQzO1x0XHRJRCBvZiB0aGUgQ1BMRCBpcyByZWFkIG9uY2UgYnkgdGhlIGRyaXZlciwgc2hvcnRseSBhZnRlclxuJiM0MztcdFx0cHJvYmUsIGFuZCByZXBvcnRlZCBmcm9tIHRoYXQgY2FjaGVkIHZhbHVlIGFzIHRoZSBmaXhlZFxuJiM0MztcdFx0XCYjMzQ7Y3BsZC5pZFwmIzM0OyB2ZXJzaW9uIGJ5IGRldmxpbmsgZGV2IGluZm8uXG4mIzQzO1xuJiM0MztcdFx0TmV3IENQTEQgZmlybXdhcmUgaXMgcHJvZ3JhbW1lZCB3aXRoIGRldmxpbmsgZGV2IGZsYXNoLFxuJiM0MztcdFx0c2VsZWN0aW5nIHRoZSBcJiMzNDtmdy5jcGxkXCYjMzQ7IGNvbXBvbmVudDsgc2VlXG4mIzQzO1x0XHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdC5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXG4gRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjFcbiBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5pbmRleCBkNGE4M2ZkY2ZmN2ZlLi4xYWY3ODBjODExZWUyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbkBAIC05OSw2ICYjNDM7OTksNyBAQCBwYXJhbWV0ZXJzLCBpbmZvIHZlcnNpb25zLCBhbmQgb3RoZXIgZmVhdHVyZXMgaXQgc3VwcG9ydHMuXG4gICAgbmZwXG4gICAgb2N0ZW9udHgyXG4gICAgcHJlc3RlcmFcbiYjNDM7ICAgcHRwX29jcFxuICAgIHFlZFxuICAgIHNmY1xuICAgIHN0bW1hY1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3Rcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zN2U5ZjFlYmQxYTgxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxuQEAgLTAsMCAmIzQzOzEsNzAgQEBcbiYjNDM7Li4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztwdHBfb2NwIGRldmxpbmsgc3VwcG9ydFxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZSBgYHB0cF9vY3BgYFxuJiM0MztkZXZpY2UgZHJpdmVyOiB0aGUgaW5mbyB2ZXJzaW9ucyBpdCByZXBvcnRzIGFuZCBpdHMgZmxhc2ggdXBkYXRlIHN1cHBvcnQuXG4mIzQzO1xuJiM0MztJbmZvIHZlcnNpb25zXG4mIzQzOz09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1RoZSBgYHB0cF9vY3BgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkXG4mIzQzOyAgIDp3aWR0aHM6IDUgNSA5MFxuJiM0MztcbiYjNDM7ICAgKiAtIE5hbWVcbiYjNDM7ICAgICAtIFR5cGVcbiYjNDM7ICAgICAtIERlc2NyaXB0aW9uXG4mIzQzOyAgICogLSBgYGZ3YGBcbiYjNDM7ICAgICAtIHJ1bm5pbmdcbiYjNDM7ICAgICAtIFZlcnNpb24gb2YgdGhlIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIGNhcmQuICBSZXBvcnRlZCBhcyBgYGxvYWRlcmBgXG4mIzQzOyAgICAgICBpbnN0ZWFkIHdoZW4gdGhlIGNhcmQgaXMgcnVubmluZyB0aGUgZmlybXdhcmUgbG9hZGVyLlxuJiM0MzsgICAqIC0gYGBib2FyZC5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gQm9hcmQgaWRlbnRpZmllciwgcmVhZCBmcm9tIHRoZSBvbi1jYXJkIEVFUFJPTS5cbiYjNDM7ICAgKiAtIGBgY3BsZC5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gTGF0dGljZSBkZXZpY2UgSUQgKElEQ09ERSkgb2YgdGhlIFRBUCBDUExELCBmb3JtYXR0ZWQgYXMgYGAweCUwOHhgYC5cbiYjNDM7ICAgICAgIE9ubHkgcHJlc2VudCBvbiBBRFZBIFRpbWVDYXJkIFgxIGJvYXJkcywgd2hpY2ggYXJlIHRoZSBvbmx5IG9uZXNcbiYjNDM7ICAgICAgIGNhcnJ5aW5nIHRoYXQgQ1BMRC4gIFJlYWRpbmcgaXQgY2xhaW1zIHRoZSBzaGFyZWQgSTJDIGJ1cyBhbmRcbiYjNDM7ICAgICAgIHJlcHJvZ3JhbXMgdGhlIG9uLWNhcmQgbXV4LCBzbyB0aGUgZHJpdmVyIGRvZXMgdGhhdCBvbmNlIGZyb20gaXRzXG4mIzQzOyAgICAgICBvd24gd29ya2VyIGFuZCByZXBvcnRzIHRoZSBjYWNoZWQgdmFsdWUgaGVyZTsgdGhlIHZlcnNpb24gaXNcbiYjNDM7ICAgICAgIG9taXR0ZWQgdW50aWwgdGhhdCByZWFkIGhhcyBzdWNjZWVkZWQuXG4mIzQzOyAgICogLSBgYGZ3LmNwbGRgYFxuJiM0MzsgICAgIC0gcnVubmluZ1xuJiM0MzsgICAgIC0gVVNFUkNPREUgb2YgdGhlIGltYWdlIHByb2dyYW1tZWQgaW50byB0aGUgVEFQIENQTEQsIGZvcm1hdHRlZCBhc1xuJiM0MzsgICAgICAgYGAweCUwOHhgYC4gIFJlYWQgdG9nZXRoZXIgd2l0aCBgYGNwbGQuaWRgYCBhbmQgcmVwb3J0ZWQgdGhlIHNhbWVcbiYjNDM7ICAgICAgIHdheS4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCBuYW1lIHRvIHBhc3MgdG8gYGBkZXZsaW5rIGRldiBmbGFzaGBgXG4mIzQzOyAgICAgICB0byB1cGRhdGUgdGhlIENQTEQuXG4mIzQzO1xuJiM0MztGbGFzaCB1cGRhdGVcbiYjNDM7PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGUgZHJpdmVyIGltcGxlbWVudHMgYGBkZXZsaW5rIGRldiBmbGFzaGBgIGZvciB0d28gc2VwYXJhdGUgdGFyZ2V0cyxcbiYjNDM7c2VsZWN0ZWQgd2l0aCB0aGUgY29tcG9uZW50IG5hbWUuXG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogRmxhc2ggY29tcG9uZW50c1xuJiM0MzsgICA6d2lkdGhzOiAyMCA4MFxuJiM0MztcbiYjNDM7ICAgKiAtIENvbXBvbmVudFxuJiM0MzsgICAgIC0gRGVzY3JpcHRpb25cbiYjNDM7ICAgKiAtIChub25lKVxuJiM0MzsgICAgIC0gVGhlIGNhcmQmIzM5O3Mgb3duIGZsYXNoLCB3cml0dGVuIHRocm91Z2ggdGhlIFNQSSBjb250cm9sbGVyIHRoZSBkcml2ZXJcbiYjNDM7ICAgICAgIGV4cG9zZXMuICBUaGUgY2FyZCBydW5zIHRoZSBuZXcgaW1hZ2UgYWZ0ZXIgaXRzIG5leHQgcmVzZXQuXG4mIzQzOyAgICogLSBgYGZ3LmNwbGRgYFxuJiM0MzsgICAgIC0gVGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggb2YgdGhlIFRBUCBDUExEIG9uIEFEVkEgVGltZUNhcmQgWDEgYm9hcmRzLFxuJiM0MzsgICAgICAgcHJvZ3JhbW1lZCBvdmVyIEkyQyB3aXRoIHRoZSBNYWNoWE8zIGluLXN5c3RlbSBwcm9ncmFtbWluZyBjb21tYW5kc1xuJiM0MzsgICAgICAgYW5kIGFjdGl2YXRlZCB3aXRoIGEgUkVGUkVTSCwgc28gdGhlIG5ldyBpbWFnZSBydW5zIGltbWVkaWF0ZWx5LlxuJiM0MzsgICAgICAgVGhlIGltYWdlIGlzIHRoZSByYXcgY29uZmlndXJhdGlvbiBiaXRzdHJlYW0sIGEgd2hvbGUgbnVtYmVyIG9mXG4mIzQzOyAgICAgICAxNi1ieXRlIHBhZ2VzOyBjb250YWluZXIgZm9ybWF0cyBzdWNoIGFzIGBgLmplZGBgIGFyZSByZWplY3RlZC5cbiYjNDM7XG4mIzQzO1Byb2dyYW1taW5nIHRoZSBDUExEIGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgZm9yIHRoZSB3aG9sZSBjeWNsZSwgc29cbiYjNDM7cmVhZHMgb2YgdGhlIGNhcmQmIzM5O3MgRUVQUk9NIGJsb2NrIHVudGlsIGl0IGNvbXBsZXRlcy4gIFByb2dyZXNzIGlzIHJlcG9ydGVkXG4mIzQzO3dpdGggdGhlIHN0YW5kYXJkIGRldmxpbmsgc3RhdHVzIG5vdGlmaWNhdGlvbnMuXG4mIzQzO1xuJiM0MztFeGFtcGxlOjpcbiYjNDM7XG4mIzQzOyAgICAkIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOjAyOjAwLjAgZmlsZSBhZHZhLWNwbGQuYmluIGNvbXBvbmVudCBmdy5jcGxkXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMGUwNGQ5MmQxYjA5OC4uMTEzZjMxNDM0NjE3NyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTIwNDc5LDYgJiM0MzsyMDQ3OSw3IEBAIE9QRU5DT01QVVRFIFBUUCBDTE9DSyBEUklWRVJcbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxuIEY6XHRkcml2ZXJzL3B0cC9wdHBfb2NwLmNcbiBcbiBPUEVOQ09SRVMgSTJDIEJVUyBEUklWRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbmluZGV4IDNkMjZlYzFmN2I5ZWMuLjU4YjkwYjJiMjgyZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuQEAgLTIwLDEwICYjNDM7MjAsMTQgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvYWx0ZXJhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICYjNDM7ODksOCBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8ge1xuIFx0dThcdFx0XHRcdHNpZ25hbHNfbnI7XG4gXHR1OFx0XHRcdFx0ZnJlcV9pbl9ucjtcbiBcdGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cFx0KmF0dHJfZ3JvdXBzO1xuJiM0MztcdC8qIHgxOiBUQVAgQ1BMRCBwcmVzZW50ICovXG4mIzQzO1x0Ym9vbFx0XHRcdFx0aGFzX2NwbGQ7XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVx0XHRCSVQoMClcbkBAIC0xNjMsNyAmIzQzOzE2OSw4IEBAIHN0cnVjdCBncGlvX3JlZyB7XG4gXHR1MzJcdGdwaW8xO1xuIFx0dTMyXHRfX3BhZDA7XG4gXHR1MzJcdGdwaW8yO1xuLVx0dTMyXHRfX3BhZDE7XG4mIzQzO1x0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXG4mIzQzO1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiAmIzQzOzQyMywyNyBAQCBzdHJ1Y3QgcHRwX29jcCB7XG4gXHRkcGxsX3RyYWNrZXIgdHJhY2tlcjtcbiBcdGludCBzaWduYWxzX25yO1xuIFx0aW50IGZyZXFfaW5fbnI7XG4mIzQzO1x0LyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovXG4mIzQzO1x0Lyogc2VyaWFsaXNlcyBDUExEIG9wZXJhdGlvbnMgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0Y3BsZF9sb2NrO1xuJiM0MztcdC8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi9cbiYjNDM7XHRpbnRcdFx0XHRjcGxkX2kyY19hZGFwX25yO1xuJiM0MztcdC8qIGNsYWltZWQgYWRhcHRlcjsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovXG4mIzQzO1x0c3RydWN0IGkyY19hZGFwdGVyXHQqY3BsZF9hZGFwO1xuJiM0MztcdC8qIHNjcmF0Y2gsIHdyaXRlIGhhbGYgdGhlbiByZWFkIGhhbGY7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuJiM0MztcdHU4XHRcdFx0KmNwbGRfYnVmO1xuJiM0MztcdC8qIExhdHRpY2UgZGV2aWNlIElEOyAwIGlmIHVucmVhZCAqL1xuJiM0MztcdHUzMlx0XHRcdGNwbGRfaWQ7XG4mIzQzO1x0LyogVVNFUkNPREUgb2YgdGhlIHByb2dyYW1tZWQgaW1hZ2U7IHZhbGlkIG9uY2UgY3BsZF9pZCBpcyBzZXQgKi9cbiYjNDM7XHR1MzJcdFx0XHRjcGxkX3VzZXJjb2RlO1xuJiM0MztcdC8qIHRoZSBvbmUtc2hvdCBJRCByZWFkIGlzIGZpbmlzaGVkLCBzdWNjZXNzZnVsbHkgb3Igbm90ICovXG4mIzQzO1x0Ym9vbFx0XHRcdGNwbGRfaWRfdHJpZWQ7XG4mIzQzO1x0LyogZmFpbGVkIElEIHJlYWQgYXR0ZW1wdHMgc28gZmFyICovXG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGNwbGRfaWRfYXR0ZW1wdHM7XG4mIzQzO1x0LyogeDEgVEFQIENQTEQgcHJlc2VudCAqL1xuJiM0MztcdGJvb2xcdFx0XHRoYXNfY3BsZDtcbiYjNDM7XHQvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gmIzM5O2QgKi9cbiYjNDM7XHRib29sXHRcdFx0Y3BsZF9pbl9jb25maWdfbW9kZTtcbiB9O1xuIFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcdEJJVCgwKVxuQEAgLTQ1Miw2ICYjNDM7NDgwLDEzIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XG4gXG4mIzQzOy8qIEZsYXNoIGNvbXBvbmVudCBuYW1pbmcgdGhlIENQTEQgaW1hZ2UsIGFzIHJlcG9ydGVkIGJ5IC1cdTAwM2VpbmZvX2dldCgpLiAqL1xuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9DT01QT05FTlRcdFwmIzM0O2Z3LmNwbGRcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW107XG5AQCAtMTI3Myw2ICYjNDM7MTMwOCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XG4gXHRcdFx0LnNpZ25hbHNfbnIgICA9IDQsXG4gXHRcdFx0LmZyZXFfaW5fbnIgICA9IDQsXG4gXHRcdFx0LmF0dHJfZ3JvdXBzICA9IGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzLFxuJiM0MztcdFx0XHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcbiBcdFx0fSxcbiBcdH0sXG4gXHR7IH1cbkBAIC0yMTMzLDYgJiM0MzsyMTY5LDE3IEBAIHB0cF9vY3BfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRjb25zdCBjaGFyICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHRpZiAoIWJwLVx1MDAzZWhhc19jcGxkIHx8XG4mIzQzO1x0XHQgICAgc3RyY21wKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIEFEVkFfQ1BMRF9DT01QT05FTlQpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDt1bnN1cHBvcnRlZCBmbGFzaCBjb21wb25lbnRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGFkdmFfeDFfY3BsZF9mbGFzaChicCwgZGV2bGluaywgcGFyYW1zLVx1MDAzZWZ3LCBleHRhY2spO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXYgPSBwdHBfb2NwX2ZpbmRfZmxhc2goYnApO1xuIFx0aWYgKCFkZXYpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2FuJiMzOTt0IGZpbmQgRmxhc2ggU1BJIGFkYXB0ZXJcXG5cJiMzNDspO1xuQEAgLTIxNTUsMTAgJiM0MzsyMjAyLDEzIEBAIHN0YXRpYyBpbnRcbiBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlID1cbiYjNDM7XHRcdFx0XHRcdERFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfQ09NUE9ORU5UO1xuIFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2bGlua19wcml2KGRldmxpbmspO1xuIFx0Y29uc3QgY2hhciAqZndfaW1hZ2U7XG4gXHRjaGFyIGJ1ZlszMl07XG4gXHRpbnQgZXJyO1xuJiM0MztcdHUzMiBpZDtcbiBcbiBcdGZ3X2ltYWdlID0gYnAtXHUwMDNlZndfbG9hZGVyID8gXCYjMzQ7bG9hZGVyXCYjMzQ7IDogXCYjMzQ7ZndcJiMzNDs7XG4gXHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7JWQuJWRcJiMzNDssIGJwLVx1MDAzZWZ3X3RhZywgYnAtXHUwMDNlZndfdmVyc2lvbik7XG5AQCAtMjE2Niw2ICYjNDM7MjIxNiwyOCBAQCBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdC8qIFJlYWQgYnkgdGhlIHdvcmtlciwgbm90IGhlcmU6IHRoaXMgY29tbWFuZCBpcyB1bnByaXZpbGVnZWQgYW5kXG4mIzQzO1x0ICogcmVhZGluZyB0aGUgSUQgY2xhaW1zIHRoZSBJMkMgYnVzLiAgMCBtZWFucyB1bnJlYWQgLSBza2lwIGl0XG4mIzQzO1x0ICogcmF0aGVyIHRoYW4gZmFpbCwgZGV2bGluayBkaXNjYXJkcyB0aGUgd2hvbGUgcmVwbHkgb24gZXJyb3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWQgPSBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCk7XG4mIzQzO1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkIFx1MDAyNlx1MDAyNiBpZCkge1xuJiM0MztcdFx0c3ByaW50ZihidWYsIFwmIzM0OzB4JTA4eFwmIzM0OywgaWQpO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgXCYjMzQ7Y3BsZC5pZFwmIzM0OywgYnVmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGZsYXNoYWJsZSBjb21wb25lbnQ6IG5hbWluZyBpdCBoZXJlIGlzIHdoYXQgbGV0c1xuJiM0MztcdFx0ICogXCYjMzQ7ZGV2bGluayBkZXYgZmxhc2ggLi4uIGNvbXBvbmVudCBmdy5jcGxkXCYjMzQ7IHRocm91Z2gsIGFzIHRoZVxuJiM0MztcdFx0ICogY29yZSBtYXRjaGVzIHRoZSBuYW1lIGFnYWluc3QgdGhlIHZlcnNpb25zIHJlcG9ydGVkIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwcmludGYoYnVmLCBcJiMzNDsweCUwOHhcJiMzNDssIFJFQURfT05DRShicC1cdTAwM2VjcGxkX3VzZXJjb2RlKSk7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBcJiMzNDtmdy5jcGxkXCYjMzQ7LCBidWYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgdmVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFicC1cdTAwM2VoYXNfZWVwcm9tX2RhdGEpIHtcbiBcdFx0cHRwX29jcF9yZWFkX2VlcHJvbShicCk7XG4gXHRcdGlmICghYnAtXHUwMDNlaGFzX2VlcHJvbV9kYXRhKVxuQEAgLTMxOTksNiAmIzQzOzMyNzEsOCBAQCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRwdHBfb2NwX3NtYV9pbml0KGJwKTtcbiBcbiYjNDM7XHRicC1cdTAwM2VoYXNfY3BsZCA9IGluZm8tXHUwMDNlaGFzX2NwbGQ7XG4mIzQzO1xuIFx0cmV0dXJuIHB0cF9vY3BfaW5pdF9jbG9jayhicCwgXHUwMDI2aW5mby1cdTAwM2VzZXJ2byk7XG4gfVxuIFxuQEAgLTQyMjYsNiAmIzQzOzQzMDAsNjQ4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0ge1xuIFx0eyB9LFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIGFkdmFfeDEgVEFQIENQTEQgKExhdHRpY2UgTENNWE8zTEYtMjEwMCkgaGVscGVycy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhcmQgaGFzIHR3byBJMkMgY29udHJvbGxlcnM7IExpbnV4IHJlZ2lzdGVycyBvbmx5IDB4MDAxNTAwMDAuXG4mIzQzOyAqIFRoZSBpMmNfYnVzX2N0cmwgaGFuZHNoYWtlIHJlLXJvdXRlcyB3aGF0IGVhY2ggaXMgd2lyZWQgdG86XG4mIzQzOyAqXG4mIzQzOyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVx1MDAzZSBUTUMgb3IgTS4yLCBNQiYjMzk7cyBjaG9pY2VcbiYjNDM7ICogICBncmFudCAxOiAgMHgxNTAwMDAgLVx1MDAzZSBUTUMgYnVzICAgICAweDEyMDAwMCAtXHUwMDNlIE0uMlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIGFyZSBvbiB0aGVcbiYjNDM7ICogVE1DIGJ1cywgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBUaGUgRUVQUk9NcyBhcmUgbm90XG4mIzQzOyAqIGJlaGluZCB0aGUgYWRhcHRlciBmb3IgdGhhdCB3aW5kb3csIHNvIGEgQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrXG4mIzQzOyAqIGFuZCB0aGUgYWRhcHRlciBsb2NrIHRvIGtlZXAgdGhlIEVFUFJPTSBhbmQgbnZtZW0gcGF0aHMgb2ZmIGl0LlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NFxuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcbiYjNDM7I2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXG4mIzQzO1xuJiM0MzsvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxuJiM0MzsjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXG4mIzQzOyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFVcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxuJiM0MztcbiYjNDM7LyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX1VTRVJDT0RFIDB4QzAwMDAwMDBVTFxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUxcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9FTl9DRkdfVFAgICAgMHg3NCAgIC8qIGVuYWJsZSBjb25maWcsIHRyYW5zcGFyZW50IG1vZGUgKi9cbiYjNDM7I2RlZmluZSBDUExEX0NNRF9ESVNfQ0ZHICAgICAgMHgyNlxuJiM0MzsjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVTRVRfQUREUiAgIDB4NDZcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9XUklURV9QQUdFICAgMHg3MFxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVGUkVTSCAgICAgIDB4NzlcbiYjNDM7I2RlZmluZSBDUExEX1BBR0VfU0laRSAgICAgICAgMTZcbiYjNDM7I2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi9cbiYjNDM7I2RlZmluZSBDUExEX0VSQVNFX01TICAgICAgICAgMTUwMDAgIC8qIGNvbmZpZyBzZWN0b3IgZXJhc2UsIGRhdGFzaGVldCBtYXggKi9cbiYjNDM7I2RlZmluZSBDUExEX0lEX01BWF9BVFRFTVBUUyAgMTAgICAgIC8qIG9uZSBwZXIgc3luY193b3JrIHRpY2sgKi9cbiYjNDM7XG4mIzQzOy8qIFN0YXR1cyByZWdpc3RlciBiaXQgcG9zaXRpb25zIChMYXR0aWNlIExDTVhPM0xGIGRhdGFzaGVldCkgKi9cbiYjNDM7I2RlZmluZSBDUExEX1NUQVRVU19ET05FICAgQklUKDgpXG4mIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMilcbiYjNDM7I2RlZmluZSBDUExEX1NUQVRVU19GQUlMRUQgQklUKDEzKVxuJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0VSUiAgICBHRU5NQVNLKDI1LCAyMylcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIElzc3VlIG9uZSBJMkMgdHJhbnNhY3Rpb24gb24gdGhlIFRNQyBidXM6IEBjbWQgaWYgbm90IG5lZ2F0aXZlLCB0aGVuXG4mIzQzOyAqIEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSAoTlVMTCBzZW5kcyB6ZXJvcyksIHRoZW4gQHJsZW4gYnl0ZXMgcmVhZCBiYWNrLlxuJiM0MzsgKiBUaGUgbWVzc2FnZSBpcyBidWlsdCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgZnJvbSBhZHZhX3gxX2J1c19jbGFpbSgpLCBzb1xuJiM0MzsgKiBhbiB1cGxvYWQgY29zdHMgb25lIGFsbG9jYXRpb24gcmF0aGVyIHRoYW4gb25lIHBlciBwYWdlLiAgSTJDX01fRE1BX1NBRkVcbiYjNDM7ICogaXMgbm90IHNldDogdGhlIHR3byBoYWx2ZXMgYXJlIG5vdCBzZXBhcmF0ZWx5IGFsaWduZWQsIHNvIGxldCB0aGUgY29yZVxuJiM0MzsgKiBib3VuY2UuICBDYWxsZXIgaG9sZHMgdGhlIGNsYWltLCBoZW5jZSBfX2kyY190cmFuc2ZlcigpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLFxuJiM0MztcdFx0XHQgICAgdm9pZCAqcmRhdGEsIHU4IHJsZW4pXG4mIzQzO3tcbiYjNDM7XHR1OCAqd2J1ZiwgKnJidWY7XG4mIzQzO1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuJiM0MztcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4mIzQzO1x0aW50IG5tc2dzID0gMCwgcmV0O1xuJiM0MztcdHUxNiBoZHIgPSBjbWQgXHUwMDNlPSAwO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4mIzQzO1x0aWYgKCFhZGFwIHx8ICFicC1cdTAwM2VjcGxkX2J1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyICYjNDM7IHdsZW4gXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWCB8fCBybGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0d2J1ZiA9IGJwLVx1MDAzZWNwbGRfYnVmO1xuJiM0MztcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiAmIzQzOyBBRFZBX0NQTERfWEZFUl9NQVg7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIgJiM0Mzsgd2xlbikge1xuJiM0MztcdFx0aWYgKGhkcilcbiYjNDM7XHRcdFx0d2J1ZlswXSA9IGNtZDtcbiYjNDM7XHRcdGlmICh3ZGF0YSlcbiYjNDM7XHRcdFx0bWVtY3B5KHdidWYgJiM0MzsgaGRyLCB3ZGF0YSwgd2xlbik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1lbXNldCh3YnVmICYjNDM7IGhkciwgMCwgd2xlbik7XG4mIzQzO1x0XHRtc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpe1xuJiM0MztcdFx0XHQuYWRkciAgPSBhZGRyLFxuJiM0MztcdFx0XHQuZmxhZ3MgPSAwLFxuJiM0MztcdFx0XHQubGVuICAgPSBoZHIgJiM0Mzsgd2xlbixcbiYjNDM7XHRcdFx0LmJ1ZiAgID0gd2J1ZixcbiYjNDM7XHRcdH07XG4mIzQzO1x0fVxuJiM0MztcdGlmIChybGVuKSB7XG4mIzQzO1x0XHRtc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpe1xuJiM0MztcdFx0XHQuYWRkciAgPSBhZGRyLFxuJiM0MztcdFx0XHQuZmxhZ3MgPSBJMkNfTV9SRCxcbiYjNDM7XHRcdFx0LmxlbiAgID0gcmxlbixcbiYjNDM7XHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbiYjNDM7XHRcdH07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4mIzQzO1x0aWYgKHJldCAhPSBubXNncylcbiYjNDM7XHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4mIzQzO1xuJiM0MztcdGlmIChyZGF0YSBcdTAwMjZcdTAwMjYgcmxlbilcbiYjNDM7XHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBIYW5kIHRoZSBzZWdtZW50IGJhY2ssIGFuZCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gZHJvcCB0aGUgZ3JhbnQgYmVmb3JlXG4mIzQzOyAqIHRoZSBjYWxsZXIgdW5sb2NrcyB0aGUgYWRhcHRlcjogYSB0cmFuc2ZlciBxdWV1ZWQgYmVoaW5kIHVzIHdvdWxkXG4mIzQzOyAqIG90aGVyd2lzZSBiZSBjbG9ja2VkIG91dCB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBzdGlsbCBvbiB0aGUgVE1DIGJ1cyxcbiYjNDM7ICogd2hpY2ggaXMgd2hhdCBob2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgYWNyb3NzIHRoZSBncmFudCBleGlzdHMgdG8gc3RvcC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFkdmFfeDFfbWJsYXplX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKE1CTEFaRV9SRUxFQVNFLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0LyogRmx1c2ggdGhlIHBvc3RlZCB3cml0ZSwgYXMgdGhlIGFjcXVpcmUgcGF0aCBkb2VzLiAqL1xuJiM0MztcdGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpICE9IE1CTEFaRV9HUkFOVEVEKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgJiM0MzsgMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VE1DIGJ1cyBzdGlsbCBncmFudGVkIGFmdGVyIHJlbGVhc2VcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBY3F1aXJlIHRoZSBzaGFyZWQgSTJDIGJ1cyBmcm9tIHRoZSBNaWNyb0JsYXplIGZpcm13YXJlLiAgUmV0dXJucyB3aXRoIG5vXG4mIzQzOyAqIHJlcXVlc3Qgb3V0c3RhbmRpbmcgb24gZmFpbHVyZSwgc28gdGhlIGZpcm13YXJlIGlzIG5ldmVyIGxlZnQgZ3JhbnRpbmcgYVxuJiM0MzsgKiBzZWdtZW50IHRvIGEgaG9zdCB0aGF0IGhhcyBnaXZlbiB1cCB3YWl0aW5nIGZvciBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9tYmxhemVfYWNxdWlyZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZXBwc19zZWxlY3QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0LyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2tcbiYjNDM7XHQgKiBrZWVwcyBsaXZlIG9uZXMgb3V0LiAgVGhlIHJlYWQgYmFjayBvbmx5IGZsdXNoZXMgdGhlIHBvc3RlZCB3cml0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpb3dyaXRlMzIoMCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuJiM0MztcdGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKE1CTEFaRV9SRVFVRVNULCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgJiM0MzsgMTAwMCk7XG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQzMihcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0XHRpZiAodmFsID09IE1CTEFaRV9HUkFOVEVEKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApO1xuJiM0MztcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuXG4mIzQzOyAqIFNhZmUgYWZ0ZXIgYSBmYWlsZWQgY2xhaW06IGl0IGFsc28gY2xlYXJzIGEgcmVxdWVzdCB0aGF0IHdhcyBuZXZlciBncmFudGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4mIzQzO1xuJiM0MztcdGlmICghYWRhcClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9hZGFwID0gTlVMTDtcbiYjNDM7XHRrZnJlZShicC1cdTAwM2VjcGxkX2J1Zik7XG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9idWYgPSBOVUxMO1xuJiM0MztcdGkyY191bmxvY2tfYnVzKGFkYXAsIEkyQ19MT0NLX1JPT1RfQURBUFRFUik7XG4mIzQzO1x0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhaTJjX3ZlcmlmeV9hZGFwdGVyKGRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhY2hlIHRoZSBhZGFwdGVyIHRoZSBDUExEIGhhbmdzIG9mZi4gIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoKSBtaXNzZXNcbiYjNDM7ICogaXQgd2hlbiB0aGUgaTJjIGNvbnRyb2xsZXIgZHJpdmVyIGlzIGFscmVhZHkgbG9hZGVkOiB0aGUgYWRhcHRlciBpcyB0aGVuXG4mIzQzOyAqIGFkZGVkIGZyb20gaW5zaWRlIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigpLCBiZWZvcmUgYnAtXHUwMDNlaTJjX2N0cmwgaXMgc2V0LlxuJiM0MzsgKiBPbmx5IGRpcmVjdCBjaGlsZHJlbiBhcmUgc2VhcmNoZWQsIHNvIGEgbXV4IGFkYXB0ZXIgY2Fubm90IG1hdGNoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9jYWNoZV9pMmNfYWRhcChzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpjaGlsZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VoYXNfY3BsZCB8fCAhYnAtXHUwMDNlaTJjX2N0cmwgfHxcbiYjNDM7XHQgICAgUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpIFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZChcdTAwMjZicC1cdTAwM2VpMmNfY3RybC1cdTAwM2VkZXYsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICBhZHZhX3gxX2kyY19hZGFwX21hdGNoKTtcbiYjNDM7XHRpZiAoIWNoaWxkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXHUwMDNlbnIpO1xuJiM0MztcdHB1dF9kZXZpY2UoY2hpbGQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDbGFpbSB0aGUgVE1DIGJ1cy4gIFRoZSBhZGFwdGVyIGxvY2sgaXMgaGVsZCBhY3Jvc3MgdGhlIGhhbmRzaGFrZSB0byBrZWVwXG4mIzQzOyAqIHRoZSBFRVBST00sIG52bWVtIGFuZCBhdDI0IHBhdGhzIG9mZiB0aGUgY29udHJvbGxlciB3aGlsZSBpdCBpcyByb3V0ZWRcbiYjNDM7ICogYXdheSBmcm9tIHRoZSBFRVBST01zOyBhbiBFRVBST00gcmVhZCBibG9ja3MgdW50aWwgdGhlIGNsYWltIGlzIGRyb3BwZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcbiYjNDM7XHRpZiAoIWFkYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIG51bWJlciBpcyBmcmVlZCBiZWZvcmUgdGhlIG5vdGlmaWVyIGNsZWFycyBpdCwgc28gaXQgY2FuXG4mIzQzO1x0ICogYWxyZWFkeSBiZSBhbm90aGVyIGFkYXB0ZXImIzM5O3MuICBDaGVjayB0aGlzIGlzIHN0aWxsIG91cnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFicC1cdTAwM2VpMmNfY3RybCB8fCBhZGFwLVx1MDAzZWRldi5wYXJlbnQgIT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KSB7XG4mIzQzO1x0XHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIE9uZSBzY3JhdGNoIGJ1ZmZlciBwZXIgY2xhaW0gcmF0aGVyIHRoYW4gcGVyIHRyYW5zZmVyOiBhbiB1cGxvYWRcbiYjNDM7XHQgKiBob2xkcyB0aGUgY2xhaW0gZm9yIHRoZSB3aG9sZSBpbWFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicC1cdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VjcGxkX2J1Zikge1xuJiM0MztcdFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2FkYXAgPSBhZGFwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCBcdTAwM2MgMCAtIHRoZSBwb3dlci1vbiBzdGF0ZS5cbiYjNDM7ICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZVxuJiM0MzsgKiBFRVBST00gcGF0aHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaClcbiYjNDM7e1xuJiM0MztcdHU4IHZhbCA9IChjaCBcdTAwM2U9IDApID8gQklUKGNoKSA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX01VWF9BRERSLCB2YWwsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBcmd1bWVudCBieXRlcyB0aGF0IGZvbGxvdyBhbiBJU0Mgb3Bjb2RlLiAgUmV0dXJucyBOVUxMIHdpdGggQG5hcmdzIHNldFxuJiM0MzsgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdTggKmFkdmFfeDFfY3BsZF9hcmdzKHU4IGNtZCwgdTggKm5hcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XG4mIzQzO1x0LyogY2ZnIHNlY3RvciBvbmx5ICovXG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVyYXNlX2NmZ1tdID0geyAweDA0LCAweDAwLCAweDAwIH07XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY21kKSB7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XG4mIzQzO1x0XHQqbmFyZ3MgPSBzaXplb2YoZW5fY2ZnX3RwKTtcbiYjNDM7XHRcdHJldHVybiBlbl9jZmdfdHA7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9FUkFTRTpcbiYjNDM7XHRcdCpuYXJncyA9IHNpemVvZihlcmFzZV9jZmcpO1xuJiM0MztcdFx0cmV0dXJuIGVyYXNlX2NmZztcbiYjNDM7XHRjYXNlIENQTERfQ01EX1JFU0VUX0FERFI6XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9TRVRfRE9ORTpcbiYjNDM7XHRcdCpuYXJncyA9IDM7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRjYXNlIENQTERfQ01EX0RJU19DRkc6XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9SRUZSRVNIOlxuJiM0MztcdFx0Km5hcmdzID0gMjtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQqbmFyZ3MgPSAwO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZW5kIGFuIElTQyBjb21tYW5kIHdpdGggdGhlIGZpeGVkIGFyZ3VtZW50cyB0aGF0IGJlbG9uZyB0byBpdC4gKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqYXJncztcbiYjNDM7XHR1OCBuYXJncztcbiYjNDM7XG4mIzQzO1x0YXJncyA9IGFkdmFfeDFfY3BsZF9hcmdzKGNtZCwgXHUwMDI2bmFyZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIGNtZCwgYXJncywgbmFyZ3MsIE5VTEwsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTZW5kIGEgNC1ieXRlIGNvbW1hbmQgYW5kIHJlYWQgYmFjayB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBTVE9QOiB0d29cbiYjNDM7ICogbWVzc2FnZXMgaW4gb25lIHRyYW5zZmVyIGlzIHRoZSBMYXR0aWNlIHdyaXRlIC1cdTAwM2UgcmVwZWF0ZWQgU1RBUlQgLVx1MDAzZSByZWFkLFxuJiM0MzsgKiBzbyBubyBwcm90b2NvbC1tYW5nbGluZyBmbGFnIGlzIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCxcbiYjNDM7XHRcdFx0XHQgdTMyIGNtZF9iZSwgdTggKm91dCwgdTggb3V0X2xlbilcbiYjNDM7e1xuJiM0MztcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIC0xLCBcdTAwMjZjbWQsIDQsIG91dCwgb3V0X2xlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHR1OCBidWZbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX1NUQVRVUywgYnVmLCA0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvbGwgdGhlIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgQ1BMRCBnb2VzIGlkbGUsIG9yIEBtYXhfbXMgZWxhcHNlcy5cbiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCxcbiYjNDM7ICogYW5kIHRoZSBzdGF0dXMgaXMgcmVhZCBvbmNlIG1vcmUgYWZ0ZXIgaXQgZXhwaXJlcyBiZWZvcmUgZ2l2aW5nIHVwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMCwgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVycixcbiYjNDM7XHRcdFx0XHRlcnIgfHwgKHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxuJiM0MztcdFx0XHRcdCEoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbiYjNDM7XHRcdFx0XHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuJiM0MztcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIEtlZXAgdGhlIHRyYW5zcG9ydCBlcnJubyBzbyBpdCByZWFjaGVzIHVzZXJzcGFjZSBhcy1pczsgLUVJTyBpc1xuJiM0MztcdCAqIHJlc2VydmVkIGZvciB0aGUgQ1BMRCBpdHNlbGYgcmVwb3J0aW5nIEZBSUxFRC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdhaXQgZm9yIEJVU1kgdG8gY2xlYXIsIGlnbm9yaW5nIGEgcGVuZGluZyBjYW5jZWwuICBBbiBJU0MgY29tbWFuZCBpc3N1ZWRcbiYjNDM7ICogd2hpbGUgdGhlIHBhcnQgaXMgc3RpbGwgZXJhc2luZyBvciBwcm9ncmFtbWluZyBtYXkgbm90IGxhdGNoLCBzbyBhbiBhYm9ydFxuJiM0MzsgKiBoYXMgdG8gd2FpdCB0aGUgb3BlcmF0aW9uIG91dCBiZWZvcmUgaXQgY2FuIGxlYXZlIGNvbmZpZ3VyYXRpb24gbW9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfaWRsZShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMCwgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVycixcbiYjNDM7XHRcdFx0XHRlcnIgfHwgIShzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxuJiM0MztcdFx0XHRcdENQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4mIzQzO1x0XHRcdFx0YnAsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIExlYXZlIHRyYW5zcGFyZW50IGNvbmZpZ3VyYXRpb24gbW9kZS4gIGNwbGRfaW5fY29uZmlnX21vZGUgc3RheXMgc2V0IHdoZW5cbiYjNDM7ICogRElTX0NGRyBkb2VzIG5vdCBnZXQgdGhyb3VnaCwgc28gYSBsYXRlciBjbGVhbnVwKCkgdHJpZXMgYWdhaW4gcmF0aGVyIHRoYW5cbiYjNDM7ICogcmVjb3JkaW5nIGFuIGV4aXQgdGhhdCBuZXZlciBoYXBwZW5lZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFkdmFfeDFfY3BsZF9leGl0X2NvbmZpZyhzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFkdmFfeDFfY3BsZF93YWl0X2lkbGUoYnAsIENQTERfRVJBU0VfTVMpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0RJU19DRkcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O0NQTEQgbGVmdCBpbiBjb25maWd1cmF0aW9uIG1vZGU6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgYW5kIHRoZSBpbWFnZSBVU0VSQ09ERSB1bmRlciBvbmUgYnVzIGNsYWltLlxuJiM0MzsgKiBEb25lIG9uY2UsIG9mZiB0aGUgdW5wcml2aWxlZ2VkIGRldmxpbmsgcGF0aCwgd2hpY2ggcmVwb3J0cyB0aGUgY2FjaGVkXG4mIzQzOyAqIHZhbHVlcy4gIC1FQlVTWSBtZWFucyBjcGxkX2xvY2sgaXMgaGVsZCwgc28gdGhlIGNhbGxlciBjYW4gcmV0cnkgcmF0aGVyXG4mIzQzOyAqIHRoYW4gd2FpdCBiZWhpbmQgYSBsb25nIENQTEQgb3BlcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9pZChzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgaWQsIHVzZXJjb2RlO1xuJiM0MztcdHU4IGRhdGFbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVsZWFzZTtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlc2VsZWN0O1xuJiM0MztcdGlkID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfVVNFUkNPREUsIGRhdGEsIDQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlc2VsZWN0O1xuJiM0MztcdHVzZXJjb2RlID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xuJiM0MztcbiYjNDM7XHQvKiBjcGxkX2lkIGlzIHRoZSB2YWxpZGl0eSBmbGFnIGZvciBib3RoLCBzbyBwdWJsaXNoIGl0IGxhc3QuICovXG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX3VzZXJjb2RlLCB1c2VyY29kZSk7XG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2lkLCBpZCk7XG4mIzQzO2Rlc2VsZWN0OlxuJiM0MztcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuJiM0MztyZWxlYXNlOlxuJiM0MztcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuJiM0MztvdXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9kYmcoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0NQTEQgZGV2aWNlIElEIHVuYXZhaWxhYmxlOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi9cbiYjNDM7c3RhdGljIHNzaXplX3RcbiYjNDM7Y3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0IGNoYXIgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCBjb3VudCA9IDA7XG4mIzQzO1x0dTMyIHN0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbiYjNDM7XHRyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4mIzQzO1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4mIzQzO3JlbGVhc2U6XG4mIzQzO1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogRmxhZ3M6IHRoZSBuYW1lcyBvZiB0aGUgYml0cyB0aGF0IGFyZSBzZXQsIG5vdGhpbmcgd2hlbiBub25lIGlzLFxuJiM0MztcdCAqIHJhdGhlciB0aGFuIGEgdmFsdWUgcGVyIGJpdCBpbiBvbmUgZmlsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpXG4mIzQzO1x0XHRjb3VudCAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcJiMzNDtkb25lXCYjMzQ7KTtcbiYjNDM7XHRpZiAoc3QgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpXG4mIzQzO1x0XHRjb3VudCAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcJiMzNDslc2J1c3lcJiMzNDssIGNvdW50ID8gXCYjMzQ7IFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyk7XG4mIzQzO1x0aWYgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpXG4mIzQzO1x0XHRjb3VudCAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcJiMzNDslc2ZhaWxlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgY291bnQgPyBcJiMzNDsgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50ICYjNDM7IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfQURNSU5fUk8oY3BsZF9zdGF0dXMpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJvZ3JhbSB0aGUgQ1BMRCBjb25maWd1cmF0aW9uIGZsYXNoIGZyb20gQGZ3IGFuZCBhY3RpdmF0ZSBpdC4gIFNlbGVjdGVkXG4mIzQzOyAqIGJ5IHRoZSBcJiMzNDtmdy5jcGxkXCYjMzQ7IGZsYXNoIGNvbXBvbmVudDsgdGhlIFNQSSBmbGFzaCBrZWVwcyB0aGUgZGVmYXVsdCBwYXRoLlxuJiM0MzsgKiBSdW5zIHVuZGVyIGNwbGRfbG9jayB3aXRoIHRoZSBpMmMgYWRhcHRlciBsb2NrIGhlbGQsIHNvIGFuIEVFUFJPTSByZWFkXG4mIzQzOyAqIGJsb2NrcyBmb3IgYXMgbG9uZyBhcyBwcm9ncmFtbWluZyB0YWtlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBvZmZzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHR1MzIgc3Q7XG4mIzQzO1xuJiM0MztcdGlmICghZnctXHUwMDNlc2l6ZSB8fCBmdy1cdTAwM2VzaXplICUgQ1BMRF9QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7aW1hZ2UgbXVzdCBiZSBhIHdob2xlIG51bWJlciBvZiAxNi1ieXRlIHBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdGVyciA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gcmVsZWFzZTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBFTl9DRkdfVFAsIG5vdCBhZnRlcjogdGhlIENQTEQgbWF5IGhhdmUgZW50ZXJlZCBjb25maWdcbiYjNDM7XHQgKiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIGVycm9ycyBvciB0aGUgd2FpdCB0aW1lcyBvdXQsIGFuZCBvbmx5IHRoaXNcbiYjNDM7XHQgKiBtYWtlcyB0aGUgZXhpdCBwYXRoIHNlbmQgRElTX0NGRy4gIEEgc3RyYXkgRElTX0NGRyBpcyBoYXJtbGVzcztcbiYjNDM7XHQgKiBsZWF2aW5nIGNvbmZpZyBtb2RlIGVuYWJsZWQgaXMgbm90LlxuJiM0MztcdCAqL1xuJiM0MztcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCk7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRlcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgNTAwMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9jb25maWc7XG4mIzQzO1xuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCYjMzQ7RXJhc2luZ1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xuJiM0MztcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRVJBU0UpO1xuJiM0MztcdGlmICghZXJyKVxuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIENQTERfRVJBU0VfTVMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgZnctXHUwMDNlc2l6ZTsgb2Zmc2V0ICYjNDM7PSBDUExEX1BBR0VfU0laRSkge1xuJiM0MztcdFx0dTggYXJnc1szICYjNDM7IENQTERfUEFHRV9TSVpFXSA9IHsgMHgwMCwgMHgwMCwgMHgwMSB9O1xuJiM0MztcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZhcmdzWzNdLCBmdy1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCwgQ1BMRF9QQUdFX1NJWkUpO1xuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGFyZ3MsIHNpemVvZihhcmdzKSwgTlVMTCwgMCk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKG9mZnNldCAlIChDUExEX1BBR0VfU0laRSAqIDY0KSkpXG4mIzQzO1x0XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluayxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBcJiMzNDtQcm9ncmFtbWluZ1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIG9mZnNldCwgZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCYjMzQ7UHJvZ3JhbW1pbmdcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuJiM0MztcdFx0XHRcdFx0ICAgZnctXHUwMDNlc2l6ZSwgZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfU0VUX0RPTkUpO1xuJiM0MztcdGlmICghZXJyKVxuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBleGl0X2NvbmZpZztcbiYjNDM7XHRpZiAoIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLCBcJiMzNDtBY3RpdmF0aW5nXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7XG4mIzQzO1x0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBleGl0X2NvbmZpZztcbiYjNDM7XG4mIzQzO1x0LyogUkVGUkVTSCByZWJvb3RzIHRoZSBDUExEIG91dCBvZiBjb25maWd1cmF0aW9uIG1vZGUsIHNvIHRoZSBleGl0XG4mIzQzO1x0ICogcGF0aCBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIGEgY2hlY2sgYmVsb3cgZmFpbHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZywgc28gYSBzZWdtZW50IHRoYXQgaXMgbm90IGJhY2tcbiYjNDM7XHQgKiB5ZXQgbXVzdCBub3QgYmUgcmVwb3J0ZWQgYXMgYSBmYWlsZWQgdXBkYXRlOiByZXRyeSB0aGUgcmVzZWxlY3RcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2xlZXAoMTUwMCk7XG4mIzQzO1x0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9tdXhfc2VsZWN0LCBlcnIsICFlcnIsIENQTERfUE9MTF9VUyxcbiYjNDM7XHRcdFx0XHQzMDAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4mIzQzO1x0XHRcdFx0YnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlc2VsZWN0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMzAwMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZGVzZWxlY3Q7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVpcmUgRE9ORSBzZXQsIG5vdCBidXN5IGFuZCBubyBlcnJvciBjb2RlLCBhcyBtYWNoeG8yLXNwaS5jIGRvZXNcbiYjNDM7XHQgKiBhZnRlciBhIHJlZnJlc2g6IHdpdGhvdXQgaXQgYSBDUkMgb3IgcHJlYW1ibGUgZXJyb3IgcmVhZHMgYmFjayBhcyBhXG4mIzQzO1x0ICogc3VjY2Vzc2Z1bCB1cGRhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZGVzZWxlY3Q7XG4mIzQzO1x0aWYgKCEoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpIHx8IChzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSkgfHxcbiYjNDM7XHQgICAgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19FUlIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtDUExEIHJlZnJlc2ggbGVmdCBzdGF0dXMgMHglMDh4XFxuXCYjMzQ7LCBzdCk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDUExEIGRpZCBub3QgY29tZSBiYWNrIGNvbmZpZ3VyZWRcJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gZGVzZWxlY3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgaW1hZ2Ugb24gdGhlIHBhcnQgY2hhbmdlZCwgc28gdGhlIGNhY2hlZCBVU0VSQ09ERSBoYXMgdG9vLiAqL1xuJiM0MztcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCwgMCk7XG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2lkX3RyaWVkLCBmYWxzZSk7XG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9pZF9hdHRlbXB0cyA9IDA7XG4mIzQzO1xuJiM0MztleGl0X2NvbmZpZzpcbiYjNDM7XHRhZHZhX3gxX2NwbGRfZXhpdF9jb25maWcoYnApO1xuJiM0MztkZXNlbGVjdDpcbiYjNDM7XHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcbiYjNDM7cmVsZWFzZTpcbiYjNDM7XHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiAmIzQzOzQ5OTAsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0ge1xuIFx0XHUwMDI2ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsXG4mIzQzO1x0XHUwMDI2ZGV2X2F0dHJfY3BsZF9zdGF0dXMuYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC00OTA0LDYgJiM0Mzs1NjIxLDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKVxuIFx0XHRjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLVx1MDAzZWkyY19jbGspO1xuIFx0aWYgKGJwLVx1MDAzZW5faXJxcylcbiBcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtXHUwMDNlcGRldik7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuIFx0ZGV2aWNlX3VucmVnaXN0ZXIoXHUwMDI2YnAtXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtNTA1Miw2ICYjNDM7NTc3MCwyMCBAQCBwdHBfb2NwX3N5bmNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRicC1cdTAwM2VzeW5jID0gc3luYztcbiBcbiYjNDM7XHQvKiBUaGUgYWRhcHRlciBjYW4gYXBwZWFyIGFmdGVyIHByb2JlLCBzbyByZWFkIHRoZSBJRCBmcm9tIGhlcmUgb25jZVxuJiM0MztcdCAqIGl0IGhhcy4gIEEgY2xhaW0gY2FuIGZhaWwgdHJhbnNpZW50bHkgLSB0aGUgZmlybXdhcmUgbWF5IG5vdCBncmFudFxuJiM0MztcdCAqIHRoZSBzZWdtZW50IHN0cmFpZ2h0IGFmdGVyIHBvd2VyLXVwIC0gc28gcmV0cnkgYSBib3VuZGVkIG51bWJlciBvZlxuJiM0MztcdCAqIHRpbWVzLiAgLUVCVVNZIG1lYW5zIGNwbGRfbG9jayBpcyBoZWxkIGFuZCBkb2VzIG5vdCBjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYnAtXHUwMDNlaGFzX2NwbGQgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pZF90cmllZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIFJFQURfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yKSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGludCBlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9pZChicCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUJVU1kgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFlcnIgfHwgJiM0MzsmIzQzO2JwLVx1MDAzZWNwbGRfaWRfYXR0ZW1wdHMgXHUwMDNlPSBDUExEX0lEX01BWF9BVFRFTVBUUykpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZF90cmllZCwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZicC1cdTAwM2VzeW5jX3dvcmssIEhaKTtcbiB9XG4gXG5AQCAtNTA4MCw2ICYjNDM7NTgxMiwxNCBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dF9kaXNhYmxlO1xuIFxuJiM0MztcdC8qIEJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksIHNvXG4mIzQzO1x0ICogbXV0ZXhfZGVzdHJveSgpIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXgsIGFuZCBiZWZvcmVcbiYjNDM7XHQgKiBwdHBfb2NwX3JlZ2lzdGVyX3Jlc291cmNlcygpLCBzbyB0aGlzIHNlbnRpbmVsIGNhbm5vdCBvdmVyd3JpdGUgYW5cbiYjNDM7XHQgKiBhZGFwdGVyIG51bWJlciB0aGUgaTJjIG5vdGlmaWVyIHN0b3JlcyBkdXJpbmcgcmVnaXN0cmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yID0gLTE7XG4mIzQzO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MDk5LDYgJiM0Mzs1ODM5LDggQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0YWR2YV94MV9jYWNoZV9pMmNfYWRhcChicCk7XG4mIzQzO1xuIFx0YnAtXHUwMDNlcHRwID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNmJwLVx1MDAzZXB0cF9pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAoSVNfRVJSKGJwLVx1MDAzZXB0cCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihicC1cdTAwM2VwdHApO1xuQEAgLTUxMTksMTIgJiM0Mzs1ODYxLDEyIEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChJU19FUlIoYnAtXHUwMDNlZHBsbCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihicC1cdTAwM2VkcGxsKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZHBsbF9kZXZpY2VfYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRnb3RvIG91dF9kZXZsaW5rO1xuIFx0fVxuIFxuIFx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfZHBsbF9wdXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBPQ1BfU01BX05VTTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0YnAtXHUwMDNlc21hW2ldLmRwbGxfcGluID0gZHBsbF9waW5fZ2V0KGNsa2lkLCBpLCBUSElTX01PRFVMRSxcbkBAIC01MTUwLDcgJiM0Mzs1ODkyLDE2IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdFx0ZHBsbF9waW5fdW5yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4sIFx1MDAyNmRwbGxfcGluc19vcHMsIFx1MDAyNmJwLVx1MDAzZXNtYVtpXSk7XG4gXHRcdGRwbGxfcGluX3B1dChicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4sIFx1MDAyNmJwLVx1MDAzZXNtYVtpXS50cmFja2VyKTtcbiBcdH1cbiYjNDM7XHQvKiBkcGxsX2RldmljZV9yZWdpc3RlcigpIHRha2VzIGEgc2Vjb25kIHJlZmVyZW5jZSBhbmQgc3RvcmVzIGJwOyBvbmx5XG4mIzQzO1x0ICogZHBsbF9kZXZpY2VfdW5yZWdpc3RlcigpIGRyb3BzIGl0LiAgV2l0aG91dCB0aGlzIHRoZSBkZXZpY2Ugc3RheXNcbiYjNDM7XHQgKiB2aXNpYmxlIHdpdGggYSBwcml2IHBvaW50ZXIgaW50byBzdG9yYWdlIGRldmxpbmtfZnJlZSgpIHdpbGwgcmVsZWFzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkcGxsX2RldmljZV91bnJlZ2lzdGVyKGJwLVx1MDAzZWRwbGwsIFx1MDAyNmRwbGxfb3BzLCBicCk7XG4mIzQzO291dF9kcGxsX3B1dDpcbiBcdGRwbGxfZGV2aWNlX3B1dChicC1cdTAwM2VkcGxsLCBcdTAwMjZicC1cdTAwM2V0cmFja2VyKTtcbiYjNDM7b3V0X2Rldmxpbms6XG4mIzQzO1x0LyogZGV0YWNoKCkgZGVzdHJveXMgY3BsZF9sb2NrOyBubyBkZXZsaW5rIG9wIG1heSBzdGlsbCByZWFjaCBpdCAqL1xuJiM0MztcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiBvdXQ6XG4gXHRwdHBfb2NwX2RldGFjaChicCk7XG4gb3V0X2Rpc2FibGU6XG5AQCAtNTE5Niw2ICYjNDM7NTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiwgKmNoaWxkID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XG4gXHRzdHJ1Y3QgcHRwX29jcCAqYnA7XG4gXHRib29sIGFkZDtcbiBcbkBAIC01MjE5LDExICYjNDM7NTk3MSwyMSBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbiYjNDM7XHRhZGFwID0gaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKTtcbiYjNDM7XHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBPbmx5IHRoZSBjYXJkJiMzOTtzIG93biBjb250cm9sbGVyOiBhIG11eCBjaGlsZCBhZGRlZCBvbiBpdFxuJiM0MztcdFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXG4mIzQzO1x0XHQgKiByZWN5Y2xlZCwgc28gdGhlIGNsYWltIHJlLWNoZWNrcyB0aGUgcGFyZW50IGl0c2VsZi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGJwLVx1MDAzZWkyY19jdHJsIFx1MDAyNlx1MDAyNiBhZGFwLVx1MDAzZWRldi5wYXJlbnQgPT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KVxuJiM0MztcdFx0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGFkYXAtXHUwMDNlbnIpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXG4mIzQzO1x0XHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpID09IGFkYXAtXHUwMDNlbnIpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgLTEpO1xuIFx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZicC1cdTAwM2VkZXYua29iaiwgXCYjMzQ7aTJjXCYjMzQ7KTtcbi1cbiYjNDM7XHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDczYmVlODgxNjgxYmIzZTU1NDBhNzQ4YjVjZWNlNWJiNDA4YmM3OGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwNzoyNzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCmluZGV4IDNhZTQxYjc2MzRhYzkuLjZkZGNhNDUyYmM2MzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZApAQCAtMTEsNiAmIzQzOzExLDM0IEBAIENvbnRhY3Q6CUpvbmF0aGFuIExlbW9uICZsdDtqb25hdGhhbi5sZW1vbkBnbWFpbC5jb20mZ3Q7CiBEZXNjcmlwdGlvbjoJVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIE50aCB0aW1lY2FyZAogCQlyZWdpc3RlcmVkLgogCiYjNDM7V2hhdDoJCS9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9jcGxkX3N0YXR1cwomIzQzO0RhdGU6CQlKdWx5IDIwMjYKJiM0MztDb250YWN0OglTYWdpIE1haW1vbiAmbHQ7bWFpbW9uLnNhZ2lAZ21haWwuY29tJmd0OwomIzQzO0Rlc2NyaXB0aW9uOgkoUk8sIHJvb3Qgb25seSkgVGhlIGZsYWdzIHNldCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZQomIzQzOwkJVEFQIENQTEQsIHNwYWNlIHNlcGFyYXRlZCwgb3IgYW4gZW1wdHkgbGluZSB3aGVuIG5vbmUgaXMKJiM0MzsJCXNldC4gIE9ubHkgcHJlc2VudCBvbiBBRFZBIHgxIFRBUCBib2FyZHMgKFBDSSBJRAomIzQzOwkJMHhhZDVhOjB4MDQxMCkuCiYjNDM7CiYjNDM7CQk9PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJCWRvbmUgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBwcm9ncmFtbWVkCiYjNDM7CQkJICAgIHN1Y2Nlc3NmdWxseSBhbmQgaXMgYWN0aXZlCiYjNDM7CQlidXN5ICAgICAgICBhbiBpbnRlcm5hbCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MKJiM0MzsJCWZhaWxlZCAgICAgIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkCiYjNDM7CQk9PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MzsJCUZvciBleGFtcGxlICYjMzQ7YnVzeSYjMzQ7IHdoaWxlIHByb2dyYW1taW5nLCBvciAmIzM0O2J1c3kgZmFpbGVkJiMzNDsgaWYgYQomIzQzOwkJZmFpbHVyZSBpcyBsYXRjaGVkIHdoaWxlIGFub3RoZXIgb3BlcmF0aW9uIHJ1bnMuCiYjNDM7CiYjNDM7CQlBIHJlYWQgYXJiaXRyYXRlcyBmb3IgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZCByZXByb2dyYW1zIHRoZQomIzQzOwkJb24tY2FyZCBtdXgsIHNvIGl0IGlzIHJlc3RyaWN0ZWQgdG8gcm9vdC4gIFRoZSBMYXR0aWNlIGRldmljZQomIzQzOwkJSUQgb2YgdGhlIENQTEQgaXMgcmVhZCBvbmNlIGJ5IHRoZSBkcml2ZXIsIHNob3J0bHkgYWZ0ZXIKJiM0MzsJCXByb2JlLCBhbmQgcmVwb3J0ZWQgZnJvbSB0aGF0IGNhY2hlZCB2YWx1ZSBhcyB0aGUgZml4ZWQKJiM0MzsJCSYjMzQ7Y3BsZC5pZCYjMzQ7IHZlcnNpb24gYnkgZGV2bGluayBkZXYgaW5mby4KJiM0MzsKJiM0MzsJCU5ldyBDUExEIGZpcm13YXJlIGlzIHByb2dyYW1tZWQgd2l0aCBkZXZsaW5rIGRldiBmbGFzaCwKJiM0MzsJCXNlbGVjdGluZyB0aGUgJiMzNDtmdy5jcGxkJiMzNDsgY29tcG9uZW50OyBzZWUKJiM0MzsJCURvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0LgomIzQzOwogV2hhdDoJCS9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlcwogRGF0ZToJCVNlcHRlbWJlciAyMDIxCiBDb250YWN0OglKb25hdGhhbiBMZW1vbiAmbHQ7am9uYXRoYW4ubGVtb25AZ21haWwuY29tJmd0OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0CmluZGV4IGQ0YTgzZmRjZmY3ZmUuLjFhZjc4MGM4MTFlZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKQEAgLTk5LDYgJiM0Mzs5OSw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy4KICAgIG5mcAogICAgb2N0ZW9udHgyCiAgICBwcmVzdGVyYQomIzQzOyAgIHB0cF9vY3AKICAgIHFlZAogICAgc2ZjCiAgICBzdG1tYWMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzdlOWYxZWJkMWE4MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0CkBAIC0wLDAgJiM0MzsxLDcwIEBACiYjNDM7Li4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MztwdHBfb2NwIGRldmxpbmsgc3VwcG9ydAomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZSBgYHB0cF9vY3BgYAomIzQzO2RldmljZSBkcml2ZXI6IHRoZSBpbmZvIHZlcnNpb25zIGl0IHJlcG9ydHMgYW5kIGl0cyBmbGFzaCB1cGRhdGUgc3VwcG9ydC4KJiM0MzsKJiM0MztJbmZvIHZlcnNpb25zCiYjNDM7PT09PT09PT09PT09PQomIzQzOwomIzQzO1RoZSBgYHB0cF9vY3BgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zCiYjNDM7CiYjNDM7Li4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZAomIzQzOyAgIDp3aWR0aHM6IDUgNSA5MAomIzQzOwomIzQzOyAgICogLSBOYW1lCiYjNDM7ICAgICAtIFR5cGUKJiM0MzsgICAgIC0gRGVzY3JpcHRpb24KJiM0MzsgICAqIC0gYGBmd2BgCiYjNDM7ICAgICAtIHJ1bm5pbmcKJiM0MzsgICAgIC0gVmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgcnVubmluZyBvbiB0aGUgY2FyZC4gIFJlcG9ydGVkIGFzIGBgbG9hZGVyYGAKJiM0MzsgICAgICAgaW5zdGVhZCB3aGVuIHRoZSBjYXJkIGlzIHJ1bm5pbmcgdGhlIGZpcm13YXJlIGxvYWRlci4KJiM0MzsgICAqIC0gYGBib2FyZC5pZGBgCiYjNDM7ICAgICAtIGZpeGVkCiYjNDM7ICAgICAtIEJvYXJkIGlkZW50aWZpZXIsIHJlYWQgZnJvbSB0aGUgb24tY2FyZCBFRVBST00uCiYjNDM7ICAgKiAtIGBgY3BsZC5pZGBgCiYjNDM7ICAgICAtIGZpeGVkCiYjNDM7ICAgICAtIExhdHRpY2UgZGV2aWNlIElEIChJRENPREUpIG9mIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzIGBgMHglMDh4YGAuCiYjNDM7ICAgICAgIE9ubHkgcHJlc2VudCBvbiBBRFZBIFRpbWVDYXJkIFgxIGJvYXJkcywgd2hpY2ggYXJlIHRoZSBvbmx5IG9uZXMKJiM0MzsgICAgICAgY2FycnlpbmcgdGhhdCBDUExELiAgUmVhZGluZyBpdCBjbGFpbXMgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZAomIzQzOyAgICAgICByZXByb2dyYW1zIHRoZSBvbi1jYXJkIG11eCwgc28gdGhlIGRyaXZlciBkb2VzIHRoYXQgb25jZSBmcm9tIGl0cwomIzQzOyAgICAgICBvd24gd29ya2VyIGFuZCByZXBvcnRzIHRoZSBjYWNoZWQgdmFsdWUgaGVyZTsgdGhlIHZlcnNpb24gaXMKJiM0MzsgICAgICAgb21pdHRlZCB1bnRpbCB0aGF0IHJlYWQgaGFzIHN1Y2NlZWRlZC4KJiM0MzsgICAqIC0gYGBmdy5jcGxkYGAKJiM0MzsgICAgIC0gcnVubmluZwomIzQzOyAgICAgLSBVU0VSQ09ERSBvZiB0aGUgaW1hZ2UgcHJvZ3JhbW1lZCBpbnRvIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzCiYjNDM7ICAgICAgIGBgMHglMDh4YGAuICBSZWFkIHRvZ2V0aGVyIHdpdGggYGBjcGxkLmlkYGAgYW5kIHJlcG9ydGVkIHRoZSBzYW1lCiYjNDM7ICAgICAgIHdheS4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCBuYW1lIHRvIHBhc3MgdG8gYGBkZXZsaW5rIGRldiBmbGFzaGBgCiYjNDM7ICAgICAgIHRvIHVwZGF0ZSB0aGUgQ1BMRC4KJiM0MzsKJiM0MztGbGFzaCB1cGRhdGUKJiM0Mzs9PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGUgZHJpdmVyIGltcGxlbWVudHMgYGBkZXZsaW5rIGRldiBmbGFzaGBgIGZvciB0d28gc2VwYXJhdGUgdGFyZ2V0cywKJiM0MztzZWxlY3RlZCB3aXRoIHRoZSBjb21wb25lbnQgbmFtZS4KJiM0MzsKJiM0MzsuLiBsaXN0LXRhYmxlOjogRmxhc2ggY29tcG9uZW50cwomIzQzOyAgIDp3aWR0aHM6IDIwIDgwCiYjNDM7CiYjNDM7ICAgKiAtIENvbXBvbmVudAomIzQzOyAgICAgLSBEZXNjcmlwdGlvbgomIzQzOyAgICogLSAobm9uZSkKJiM0MzsgICAgIC0gVGhlIGNhcmQmIzM5O3Mgb3duIGZsYXNoLCB3cml0dGVuIHRocm91Z2ggdGhlIFNQSSBjb250cm9sbGVyIHRoZSBkcml2ZXIKJiM0MzsgICAgICAgZXhwb3Nlcy4gIFRoZSBjYXJkIHJ1bnMgdGhlIG5ldyBpbWFnZSBhZnRlciBpdHMgbmV4dCByZXNldC4KJiM0MzsgICAqIC0gYGBmdy5jcGxkYGAKJiM0MzsgICAgIC0gVGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggb2YgdGhlIFRBUCBDUExEIG9uIEFEVkEgVGltZUNhcmQgWDEgYm9hcmRzLAomIzQzOyAgICAgICBwcm9ncmFtbWVkIG92ZXIgSTJDIHdpdGggdGhlIE1hY2hYTzMgaW4tc3lzdGVtIHByb2dyYW1taW5nIGNvbW1hbmRzCiYjNDM7ICAgICAgIGFuZCBhY3RpdmF0ZWQgd2l0aCBhIFJFRlJFU0gsIHNvIHRoZSBuZXcgaW1hZ2UgcnVucyBpbW1lZGlhdGVseS4KJiM0MzsgICAgICAgVGhlIGltYWdlIGlzIHRoZSByYXcgY29uZmlndXJhdGlvbiBiaXRzdHJlYW0sIGEgd2hvbGUgbnVtYmVyIG9mCiYjNDM7ICAgICAgIDE2LWJ5dGUgcGFnZXM7IGNvbnRhaW5lciBmb3JtYXRzIHN1Y2ggYXMgYGAuamVkYGAgYXJlIHJlamVjdGVkLgomIzQzOwomIzQzO1Byb2dyYW1taW5nIHRoZSBDUExEIGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgZm9yIHRoZSB3aG9sZSBjeWNsZSwgc28KJiM0MztyZWFkcyBvZiB0aGUgY2FyZCYjMzk7cyBFRVBST00gYmxvY2sgdW50aWwgaXQgY29tcGxldGVzLiAgUHJvZ3Jlc3MgaXMgcmVwb3J0ZWQKJiM0Mzt3aXRoIHRoZSBzdGFuZGFyZCBkZXZsaW5rIHN0YXR1cyBub3RpZmljYXRpb25zLgomIzQzOwomIzQzO0V4YW1wbGU6OgomIzQzOwomIzQzOyAgICAkIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOjAyOjAwLjAgZmlsZSBhZHZhLWNwbGQuYmluIGNvbXBvbmVudCBmdy5jcGxkCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDBlMDRkOTJkMWIwOTguLjExM2YzMTQzNDYxNzcgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yMDQ3OSw2ICYjNDM7MjA0NzksNyBAQCBPUEVOQ09NUFVURSBQVFAgQ0xPQ0sgRFJJVkVSCiBNOglWYWRpbSBGZWRvcmVua28gJmx0O3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXYmZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3QKIEY6CWRyaXZlcnMvcHRwL3B0cF9vY3AuYwogCiBPUEVOQ09SRVMgSTJDIEJVUyBEUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuYwppbmRleCAzZDI2ZWMxZjdiOWVjLi41OGI5MGIyYjI4MmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX29jcC5jCkBAIC0yMCwxMCAmIzQzOzIwLDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpL2FsdGVyYS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L210ZC9tdGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9udm1lbS1jb25zdW1lci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYzE2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FVEFfVElNRUNBUkQJCTB4MDQwMAogCkBAIC04NSw2ICYjNDM7ODksOCBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8gewogCXU4CQkJCXNpZ25hbHNfbnI7CiAJdTgJCQkJZnJlcV9pbl9ucjsKIAljb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAJKmF0dHJfZ3JvdXBzOwomIzQzOwkvKiB4MTogVEFQIENQTEQgcHJlc2VudCAqLwomIzQzOwlib29sCQkJCWhhc19jcGxkOwogfTsKIAogI2RlZmluZSBPQ1BfQ1RSTF9FTkFCTEUJCUJJVCgwKQpAQCAtMTYzLDcgJiM0MzsxNjksOCBAQCBzdHJ1Y3QgZ3Bpb19yZWcgewogCXUzMglncGlvMTsKIAl1MzIJX19wYWQwOwogCXUzMglncGlvMjsKLQl1MzIJX19wYWQxOwomIzQzOwkvKiBhZHZhX3gxOiBJMkMgYnVzIG93bmVyc2hpcCByZWdpc3RlcjsgcmVzZXJ2ZWQgb24gb3RoZXIgdmFyaWFudHMgKi8KJiM0MzsJdTMyCWkyY19idXNfY3RybDsKIH07CiAKIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcgewpAQCAtNDE2LDYgJiM0Mzs0MjMsMjcgQEAgc3RydWN0IHB0cF9vY3AgewogCWRwbGxfdHJhY2tlciB0cmFja2VyOwogCWludCBzaWduYWxzX25yOwogCWludCBmcmVxX2luX25yOwomIzQzOwkvKiBhZHZhX3gxIENQTEQgSTJDIChpbnRlcm5hbCB1c2Ugb25seSkgKi8KJiM0MzsJLyogc2VyaWFsaXNlcyBDUExEIG9wZXJhdGlvbnMgKi8KJiM0MzsJc3RydWN0IG11dGV4CQljcGxkX2xvY2s7CiYjNDM7CS8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi8KJiM0MzsJaW50CQkJY3BsZF9pMmNfYWRhcF9ucjsKJiM0MzsJLyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi8KJiM0MzsJc3RydWN0IGkyY19hZGFwdGVyCSpjcGxkX2FkYXA7CiYjNDM7CS8qIHNjcmF0Y2gsIHdyaXRlIGhhbGYgdGhlbiByZWFkIGhhbGY7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqLwomIzQzOwl1OAkJCSpjcGxkX2J1ZjsKJiM0MzsJLyogTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovCiYjNDM7CXUzMgkJCWNwbGRfaWQ7CiYjNDM7CS8qIFVTRVJDT0RFIG9mIHRoZSBwcm9ncmFtbWVkIGltYWdlOyB2YWxpZCBvbmNlIGNwbGRfaWQgaXMgc2V0ICovCiYjNDM7CXUzMgkJCWNwbGRfdXNlcmNvZGU7CiYjNDM7CS8qIHRoZSBvbmUtc2hvdCBJRCByZWFkIGlzIGZpbmlzaGVkLCBzdWNjZXNzZnVsbHkgb3Igbm90ICovCiYjNDM7CWJvb2wJCQljcGxkX2lkX3RyaWVkOwomIzQzOwkvKiBmYWlsZWQgSUQgcmVhZCBhdHRlbXB0cyBzbyBmYXIgKi8KJiM0MzsJdW5zaWduZWQgaW50CQljcGxkX2lkX2F0dGVtcHRzOwomIzQzOwkvKiB4MSBUQVAgQ1BMRCBwcmVzZW50ICovCiYjNDM7CWJvb2wJCQloYXNfY3BsZDsKJiM0MzsJLyogRU5fQ0ZHX1RQIGlzc3VlZCBidXQgbm90IHlldCBSRUZSRVNIJiMzOTtkICovCiYjNDM7CWJvb2wJCQljcGxkX2luX2NvbmZpZ19tb2RlOwogfTsKIAogI2RlZmluZSBPQ1BfUkVRX1RJTUVTVEFNUAlCSVQoMCkKQEAgLTQ1Miw2ICYjNDM7NDgwLDEzIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV9zbWFfb3A7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wOwogCiYjNDM7LyogRmxhc2ggY29tcG9uZW50IG5hbWluZyB0aGUgQ1BMRCBpbWFnZSwgYXMgcmVwb3J0ZWQgYnkgLSZndDtpbmZvX2dldCgpLiAqLwomIzQzOyNkZWZpbmUgQURWQV9DUExEX0NPTVBPTkVOVAkmIzM0O2Z3LmNwbGQmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBmYl90aW1lY2FyZF9ncm91cHNbXTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW107CkBAIC0xMjczLDYgJiM0MzsxMzA4LDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHsKIAkJCS5zaWduYWxzX25yICAgPSA0LAogCQkJLmZyZXFfaW5fbnIgICA9IDQsCiAJCQkuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsCiYjNDM7CQkJLmhhc19jcGxkICAgICA9IHRydWUsCiAJCX0sCiAJfSwKIAl7IH0KQEAgLTIxMzMsNiAmIzQzOzIxNjksMTcgQEAgcHRwX29jcF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKIAljb25zdCBjaGFyICptc2c7CiAJaW50IGVycjsKIAomIzQzOwlpZiAocGFyYW1zLSZndDtjb21wb25lbnQpIHsKJiM0MzsJCWlmICghYnAtJmd0O2hhc19jcGxkIHx8CiYjNDM7CQkgICAgc3RyY21wKHBhcmFtcy0mZ3Q7Y29tcG9uZW50LCBBRFZBX0NQTERfQ09NUE9ORU5UKSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O3Vuc3VwcG9ydGVkIGZsYXNoIGNvbXBvbmVudCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gYWR2YV94MV9jcGxkX2ZsYXNoKGJwLCBkZXZsaW5rLCBwYXJhbXMtJmd0O2Z3LCBleHRhY2spOwomIzQzOwl9CiYjNDM7CiAJZGV2ID0gcHRwX29jcF9maW5kX2ZsYXNoKGJwKTsKIAlpZiAoIWRldikgewogCQlkZXZfZXJyKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtDYW4mIzM5O3QgZmluZCBGbGFzaCBTUEkgYWRhcHRlclxuJiMzNDspOwpAQCAtMjE1NSwxMCAmIzQzOzIyMDIsMTMgQEAgc3RhdGljIGludAogcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlID0KJiM0MzsJCQkJCURFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfQ09NUE9ORU5UOwogCXN0cnVjdCBwdHBfb2NwICpicCA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTsKIAljb25zdCBjaGFyICpmd19pbWFnZTsKIAljaGFyIGJ1ZlszMl07CiAJaW50IGVycjsKJiM0MzsJdTMyIGlkOwogCiAJZndfaW1hZ2UgPSBicC0mZ3Q7ZndfbG9hZGVyID8gJiMzNDtsb2FkZXImIzM0OyA6ICYjMzQ7ZncmIzM0OzsKIAlzcHJpbnRmKGJ1ZiwgJiMzNDslZC4lZCYjMzQ7LCBicC0mZ3Q7ZndfdGFnLCBicC0mZ3Q7ZndfdmVyc2lvbik7CkBAIC0yMTY2LDYgJiM0MzsyMjE2LDI4IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CS8qIFJlYWQgYnkgdGhlIHdvcmtlciwgbm90IGhlcmU6IHRoaXMgY29tbWFuZCBpcyB1bnByaXZpbGVnZWQgYW5kCiYjNDM7CSAqIHJlYWRpbmcgdGhlIElEIGNsYWltcyB0aGUgSTJDIGJ1cy4gIDAgbWVhbnMgdW5yZWFkIC0gc2tpcCBpdAomIzQzOwkgKiByYXRoZXIgdGhhbiBmYWlsLCBkZXZsaW5rIGRpc2NhcmRzIHRoZSB3aG9sZSByZXBseSBvbiBlcnJvci4KJiM0MzsJICovCiYjNDM7CWlkID0gUkVBRF9PTkNFKGJwLSZndDtjcGxkX2lkKTsKJiM0MzsJaWYgKGJwLSZndDtoYXNfY3BsZCAmYW1wOyZhbXA7IGlkKSB7CiYjNDM7CQlzcHJpbnRmKGJ1ZiwgJiMzNDsweCUwOHgmIzM0OywgaWQpOwomIzQzOwkJZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgJiMzNDtjcGxkLmlkJiMzNDssIGJ1Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZmxhc2hhYmxlIGNvbXBvbmVudDogbmFtaW5nIGl0IGhlcmUgaXMgd2hhdCBsZXRzCiYjNDM7CQkgKiAmIzM0O2RldmxpbmsgZGV2IGZsYXNoIC4uLiBjb21wb25lbnQgZncuY3BsZCYjMzQ7IHRocm91Z2gsIGFzIHRoZQomIzQzOwkJICogY29yZSBtYXRjaGVzIHRoZSBuYW1lIGFnYWluc3QgdGhlIHZlcnNpb25zIHJlcG9ydGVkIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXNwcmludGYoYnVmLCAmIzM0OzB4JTA4eCYjMzQ7LCBSRUFEX09OQ0UoYnAtJmd0O2NwbGRfdXNlcmNvZGUpKTsKJiM0MzsJCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0X2V4dChyZXEsICYjMzQ7ZncuY3BsZCYjMzQ7LCBidWYsCiYjNDM7CQkJCQkJCSAgIHZlcl90eXBlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCWlmICghYnAtJmd0O2hhc19lZXByb21fZGF0YSkgewogCQlwdHBfb2NwX3JlYWRfZWVwcm9tKGJwKTsKIAkJaWYgKCFicC0mZ3Q7aGFzX2VlcHJvbV9kYXRhKQpAQCAtMzE5OSw2ICYjNDM7MzI3MSw4IEBAIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcikKIAkJcmV0dXJuIGVycjsKIAlwdHBfb2NwX3NtYV9pbml0KGJwKTsKIAomIzQzOwlicC0mZ3Q7aGFzX2NwbGQgPSBpbmZvLSZndDtoYXNfY3BsZDsKJiM0MzsKIAlyZXR1cm4gcHRwX29jcF9pbml0X2Nsb2NrKGJwLCAmYW1wO2luZm8tJmd0O3NlcnZvKTsKIH0KIApAQCAtNDIyNiw2ICYjNDM7NDMwMCw2NDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7CiAJeyB9LAogfTsKIAomIzQzOy8qCiYjNDM7ICogYWR2YV94MSBUQVAgQ1BMRCAoTGF0dGljZSBMQ01YTzNMRi0yMTAwKSBoZWxwZXJzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhcmQgaGFzIHR3byBJMkMgY29udHJvbGxlcnM7IExpbnV4IHJlZ2lzdGVycyBvbmx5IDB4MDAxNTAwMDAuCiYjNDM7ICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBpcyB3aXJlZCB0bzoKJiM0MzsgKgomIzQzOyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC0mZ3Q7IEVFUFJPTXMgICAgIDB4MTIwMDAwIC0mZ3Q7IFRNQyBvciBNLjIsIE1CJiMzOTtzIGNob2ljZQomIzQzOyAqICAgZ3JhbnQgMTogIDB4MTUwMDAwIC0mZ3Q7IFRNQyBidXMgICAgIDB4MTIwMDAwIC0mZ3Q7IE0uMgomIzQzOyAqCiYjNDM7ICogVGhlIFBDQTk1NDggYXQgMHg3NCBhbmQgdGhlIENQTEQgYXQgMHg0MCBiZWhpbmQgaXRzIGNoYW5uZWwgMCBhcmUgb24gdGhlCiYjNDM7ICogVE1DIGJ1cywgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBUaGUgRUVQUk9NcyBhcmUgbm90CiYjNDM7ICogYmVoaW5kIHRoZSBhZGFwdGVyIGZvciB0aGF0IHdpbmRvdywgc28gYSBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2sKJiM0MzsgKiBhbmQgdGhlIGFkYXB0ZXIgbG9jayB0byBrZWVwIHRoZSBFRVBST00gYW5kIG52bWVtIHBhdGhzIG9mZiBpdC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEFEVkFfTVVYX0FERFIgICAgIDB4NzQKJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDAKJiM0MzsjZGVmaW5lIEFEVkFfTVVYX0NIQU5ORUwgIDAKJiM0MzsKJiM0MzsvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqLwomIzQzOyNkZWZpbmUgQURWQV9DUExEX1hGRVJfTUFYIDMyCiYjNDM7CiYjNDM7I2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVQomIzQzOyNkZWZpbmUgTUJMQVpFX0dSQU5URUQgICAgMHg1NTU1YWFhYVUKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRUxFQVNFICAgIDB4NTU1NTAwMDBVCiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDAKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRVRSWV9VUyAgIDEwMDAwCiYjNDM7CiYjNDM7LyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqLwomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9JRCAgICAgIDB4RTAwMDAwMDBVTAomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSAweEMwMDAwMDAwVUwKJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUwKJiM0MzsjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqLwomIzQzOyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjYKJiM0MzsjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NgomIzQzOyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzAKJiM0MzsjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OQomIzQzOyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2CiYjNDM7I2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi8KJiM0MzsjZGVmaW5lIENQTERfRVJBU0VfTVMgICAgICAgICAxNTAwMCAgLyogY29uZmlnIHNlY3RvciBlcmFzZSwgZGF0YXNoZWV0IG1heCAqLwomIzQzOyNkZWZpbmUgQ1BMRF9JRF9NQVhfQVRURU1QVFMgIDEwICAgICAvKiBvbmUgcGVyIHN5bmNfd29yayB0aWNrICovCiYjNDM7CiYjNDM7LyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqLwomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KQomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMikKJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpCiYjNDM7I2RlZmluZSBDUExEX1NUQVRVU19FUlIgICAgR0VOTUFTSygyNSwgMjMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJc3N1ZSBvbmUgSTJDIHRyYW5zYWN0aW9uIG9uIHRoZSBUTUMgYnVzOiBAY21kIGlmIG5vdCBuZWdhdGl2ZSwgdGhlbgomIzQzOyAqIEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSAoTlVMTCBzZW5kcyB6ZXJvcyksIHRoZW4gQHJsZW4gYnl0ZXMgcmVhZCBiYWNrLgomIzQzOyAqIFRoZSBtZXNzYWdlIGlzIGJ1aWx0IGluIHRoZSBzY3JhdGNoIGJ1ZmZlciBmcm9tIGFkdmFfeDFfYnVzX2NsYWltKCksIHNvCiYjNDM7ICogYW4gdXBsb2FkIGNvc3RzIG9uZSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIG9uZSBwZXIgcGFnZS4gIEkyQ19NX0RNQV9TQUZFCiYjNDM7ICogaXMgbm90IHNldDogdGhlIHR3byBoYWx2ZXMgYXJlIG5vdCBzZXBhcmF0ZWx5IGFsaWduZWQsIHNvIGxldCB0aGUgY29yZQomIzQzOyAqIGJvdW5jZS4gIENhbGxlciBob2xkcyB0aGUgY2xhaW0sIGhlbmNlIF9faTJjX3RyYW5zZmVyKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCwKJiM0MzsJCQkgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sCiYjNDM7CQkJICAgIHZvaWQgKnJkYXRhLCB1OCBybGVuKQomIzQzO3sKJiM0MzsJdTggKndidWYsICpyYnVmOwomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CiYjNDM7CXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CiYjNDM7CWludCBubXNncyA9IDAsIHJldDsKJiM0MzsJdTE2IGhkciA9IGNtZCAmZ3Q7PSAwOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWFkYXAgPSBicC0mZ3Q7Y3BsZF9hZGFwOwomIzQzOwlpZiAoIWFkYXAgfHwgIWJwLSZndDtjcGxkX2J1ZikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlpZiAoaGRyICYjNDM7IHdsZW4gJmd0OyBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiAmZ3Q7IEFEVkFfQ1BMRF9YRkVSX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwl3YnVmID0gYnAtJmd0O2NwbGRfYnVmOwomIzQzOwlyYnVmID0gYnAtJmd0O2NwbGRfYnVmICYjNDM7IEFEVkFfQ1BMRF9YRkVSX01BWDsKJiM0MzsKJiM0MzsJaWYgKGhkciAmIzQzOyB3bGVuKSB7CiYjNDM7CQlpZiAoaGRyKQomIzQzOwkJCXdidWZbMF0gPSBjbWQ7CiYjNDM7CQlpZiAod2RhdGEpCiYjNDM7CQkJbWVtY3B5KHdidWYgJiM0MzsgaGRyLCB3ZGF0YSwgd2xlbik7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtc2V0KHdidWYgJiM0MzsgaGRyLCAwLCB3bGVuKTsKJiM0MzsJCW1zZ3Nbbm1zZ3MmIzQzOyYjNDM7XSA9IChzdHJ1Y3QgaTJjX21zZyl7CiYjNDM7CQkJLmFkZHIgID0gYWRkciwKJiM0MzsJCQkuZmxhZ3MgPSAwLAomIzQzOwkJCS5sZW4gICA9IGhkciAmIzQzOyB3bGVuLAomIzQzOwkJCS5idWYgICA9IHdidWYsCiYjNDM7CQl9OwomIzQzOwl9CiYjNDM7CWlmIChybGVuKSB7CiYjNDM7CQltc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpewomIzQzOwkJCS5hZGRyICA9IGFkZHIsCiYjNDM7CQkJLmZsYWdzID0gSTJDX01fUkQsCiYjNDM7CQkJLmxlbiAgID0gcmxlbiwKJiM0MzsJCQkuYnVmICAgPSByYnVmLAomIzQzOwkJfTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7CiYjNDM7CWlmIChyZXQgIT0gbm1zZ3MpCiYjNDM7CQlyZXR1cm4gKHJldCAmbHQ7IDApID8gcmV0IDogLUVJTzsKJiM0MzsKJiM0MzsJaWYgKHJkYXRhICZhbXA7JmFtcDsgcmxlbikKJiM0MzsJCW1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIYW5kIHRoZSBzZWdtZW50IGJhY2ssIGFuZCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gZHJvcCB0aGUgZ3JhbnQgYmVmb3JlCiYjNDM7ICogdGhlIGNhbGxlciB1bmxvY2tzIHRoZSBhZGFwdGVyOiBhIHRyYW5zZmVyIHF1ZXVlZCBiZWhpbmQgdXMgd291bGQKJiM0MzsgKiBvdGhlcndpc2UgYmUgY2xvY2tlZCBvdXQgd2hpbGUgdGhlIGNvbnRyb2xsZXIgaXMgc3RpbGwgb24gdGhlIFRNQyBidXMsCiYjNDM7ICogd2hpY2ggaXMgd2hhdCBob2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgYWNyb3NzIHRoZSBncmFudCBleGlzdHMgdG8gc3RvcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWJwLSZndDtwcHNfc2VsZWN0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpb3dyaXRlMzIoTUJMQVpFX1JFTEVBU0UsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CS8qIEZsdXNoIHRoZSBwb3N0ZWQgd3JpdGUsIGFzIHRoZSBhY3F1aXJlIHBhdGggZG9lcy4gKi8KJiM0MzsJaW9yZWFkMzIoJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1CTEFaRV9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGlvcmVhZDMyKCZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCkgIT0gTUJMQVpFX0dSQU5URUQpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJdXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICYjNDM7IDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl93YXJuKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtUTUMgYnVzIHN0aWxsIGdyYW50ZWQgYWZ0ZXIgcmVsZWFzZVxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBY3F1aXJlIHRoZSBzaGFyZWQgSTJDIGJ1cyBmcm9tIHRoZSBNaWNyb0JsYXplIGZpcm13YXJlLiAgUmV0dXJucyB3aXRoIG5vCiYjNDM7ICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhCiYjNDM7ICogc2VnbWVudCB0byBhIGhvc3QgdGhhdCBoYXMgZ2l2ZW4gdXAgd2FpdGluZyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWJwLSZndDtwcHNfc2VsZWN0KQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CS8qIERyb3AgYSByZXF1ZXN0IGxlZnQgYnkgYSBjYWxsZXIgdGhhdCBkaWVkIG1pZC1zZXF1ZW5jZTsgY3BsZF9sb2NrCiYjNDM7CSAqIGtlZXBzIGxpdmUgb25lcyBvdXQuICBUaGUgcmVhZCBiYWNrIG9ubHkgZmx1c2hlcyB0aGUgcG9zdGVkIHdyaXRlLgomIzQzOwkgKi8KJiM0MzsJaW93cml0ZTMyKDAsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CWlvcmVhZDMyKCZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CiYjNDM7CWlvd3JpdGUzMihNQkxBWkVfUkVRVUVTVCwgJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1CTEFaRV9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICYjNDM7IDEwMDApOwomIzQzOwkJdmFsID0gaW9yZWFkMzIoJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsJCWlmICh2YWwgPT0gTUJMQVpFX0dSQU5URUQpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuCiYjNDM7ICogU2FmZSBhZnRlciBhIGZhaWxlZCBjbGFpbTogaXQgYWxzbyBjbGVhcnMgYSByZXF1ZXN0IHRoYXQgd2FzIG5ldmVyIGdyYW50ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBicC0mZ3Q7Y3BsZF9hZGFwOwomIzQzOwomIzQzOwlpZiAoIWFkYXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApOwomIzQzOwlicC0mZ3Q7Y3BsZF9hZGFwID0gTlVMTDsKJiM0MzsJa2ZyZWUoYnAtJmd0O2NwbGRfYnVmKTsKJiM0MzsJYnAtJmd0O2NwbGRfYnVmID0gTlVMTDsKJiM0MzsJaTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTsKJiM0MzsJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhaTJjX3ZlcmlmeV9hZGFwdGVyKGRldik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FjaGUgdGhlIGFkYXB0ZXIgdGhlIENQTEQgaGFuZ3Mgb2ZmLiAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCgpIG1pc3NlcwomIzQzOyAqIGl0IHdoZW4gdGhlIGkyYyBjb250cm9sbGVyIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZDogdGhlIGFkYXB0ZXIgaXMgdGhlbgomIzQzOyAqIGFkZGVkIGZyb20gaW5zaWRlIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigpLCBiZWZvcmUgYnAtJmd0O2kyY19jdHJsIGlzIHNldC4KJiM0MzsgKiBPbmx5IGRpcmVjdCBjaGlsZHJlbiBhcmUgc2VhcmNoZWQsIHNvIGEgbXV4IGFkYXB0ZXIgY2Fubm90IG1hdGNoLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqY2hpbGQ7CiYjNDM7CiYjNDM7CWlmICghYnAtJmd0O2hhc19jcGxkIHx8ICFicC0mZ3Q7aTJjX2N0cmwgfHwKJiM0MzsJICAgIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9ucikgJmd0Oz0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZCgmYW1wO2JwLSZndDtpMmNfY3RybC0mZ3Q7ZGV2LCBOVUxMLAomIzQzOwkJCQkgIGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2gpOwomIzQzOwlpZiAoIWNoaWxkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGJwLSZndDtjcGxkX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLSZndDtucik7CiYjNDM7CXB1dF9kZXZpY2UoY2hpbGQpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENsYWltIHRoZSBUTUMgYnVzLiAgVGhlIGFkYXB0ZXIgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgaGFuZHNoYWtlIHRvIGtlZXAKJiM0MzsgKiB0aGUgRUVQUk9NLCBudm1lbSBhbmQgYXQyNCBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkCiYjNDM7ICogYXdheSBmcm9tIHRoZSBFRVBST01zOyBhbiBFRVBST00gcmVhZCBibG9ja3MgdW50aWwgdGhlIGNsYWltIGlzIGRyb3BwZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2J1c19jbGFpbShzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsKJiM0MzsJYWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIpKTsKJiM0MzsJaWYgKCFhZGFwKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CS8qIFRoZSBudW1iZXIgaXMgZnJlZWQgYmVmb3JlIHRoZSBub3RpZmllciBjbGVhcnMgaXQsIHNvIGl0IGNhbgomIzQzOwkgKiBhbHJlYWR5IGJlIGFub3RoZXIgYWRhcHRlciYjMzk7cy4gIENoZWNrIHRoaXMgaXMgc3RpbGwgb3Vycy4KJiM0MzsJICovCiYjNDM7CWlmICghYnAtJmd0O2kyY19jdHJsIHx8IGFkYXAtJmd0O2Rldi5wYXJlbnQgIT0gJmFtcDticC0mZ3Q7aTJjX2N0cmwtJmd0O2RldikgewomIzQzOwkJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGFuIHVwbG9hZAomIzQzOwkgKiBob2xkcyB0aGUgY2xhaW0gZm9yIHRoZSB3aG9sZSBpbWFnZS4KJiM0MzsJICovCiYjNDM7CWJwLSZndDtjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnAtJmd0O2NwbGRfYnVmKSB7CiYjNDM7CQlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTsKJiM0MzsJYnAtJmd0O2NwbGRfYWRhcCA9IGFkYXA7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoYnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYWR2YV94MV9idXNfcmVsZWFzZShicCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCAmbHQ7IDAgLSB0aGUgcG93ZXItb24gc3RhdGUuCiYjNDM7ICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZQomIzQzOyAqIEVFUFJPTSBwYXRocy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaCkKJiM0Mzt7CiYjNDM7CXU4IHZhbCA9IChjaCAmZ3Q7PSAwKSA/IEJJVChjaCkgOiAwOwomIzQzOwomIzQzOwlyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9NVVhfQUREUiwgdmFsLCBOVUxMLCAwLCBOVUxMLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBcmd1bWVudCBieXRlcyB0aGF0IGZvbGxvdyBhbiBJU0Mgb3Bjb2RlLiAgUmV0dXJucyBOVUxMIHdpdGggQG5hcmdzIHNldAomIzQzOyAqIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHplcm86IGFkdmFfeDFfaTJjX3hmZXIoKSB6ZXJvZXMgdGhlIGJ1ZmZlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdTggKmFkdmFfeDFfY3BsZF9hcmdzKHU4IGNtZCwgdTggKm5hcmdzKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07CiYjNDM7CS8qIGNmZyBzZWN0b3Igb25seSAqLwomIzQzOwlzdGF0aWMgY29uc3QgdTggZXJhc2VfY2ZnW10gPSB7IDB4MDQsIDB4MDAsIDB4MDAgfTsKJiM0MzsKJiM0MzsJc3dpdGNoIChjbWQpIHsKJiM0MzsJY2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6CiYjNDM7CQkqbmFyZ3MgPSBzaXplb2YoZW5fY2ZnX3RwKTsKJiM0MzsJCXJldHVybiBlbl9jZmdfdHA7CiYjNDM7CWNhc2UgQ1BMRF9DTURfRVJBU0U6CiYjNDM7CQkqbmFyZ3MgPSBzaXplb2YoZXJhc2VfY2ZnKTsKJiM0MzsJCXJldHVybiBlcmFzZV9jZmc7CiYjNDM7CWNhc2UgQ1BMRF9DTURfUkVTRVRfQUREUjoKJiM0MzsJY2FzZSBDUExEX0NNRF9TRVRfRE9ORToKJiM0MzsJCSpuYXJncyA9IDM7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJY2FzZSBDUExEX0NNRF9ESVNfQ0ZHOgomIzQzOwljYXNlIENQTERfQ01EX1JFRlJFU0g6CiYjNDM7CQkqbmFyZ3MgPSAyOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkqbmFyZ3MgPSAwOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpCiYjNDM7ewomIzQzOwljb25zdCB1OCAqYXJnczsKJiM0MzsJdTggbmFyZ3M7CiYjNDM7CiYjNDM7CWFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsICZhbXA7bmFyZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIGNtZCwgYXJncywgbmFyZ3MsIE5VTEwsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNlbmQgYSA0LWJ5dGUgY29tbWFuZCBhbmQgcmVhZCBiYWNrIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIFNUT1A6IHR3bwomIzQzOyAqIG1lc3NhZ2VzIGluIG9uZSB0cmFuc2ZlciBpcyB0aGUgTGF0dGljZSB3cml0ZSAtJmd0OyByZXBlYXRlZCBTVEFSVCAtJmd0OyByZWFkLAomIzQzOyAqIHNvIG5vIHByb3RvY29sLW1hbmdsaW5nIGZsYWcgaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCwKJiM0MzsJCQkJIHUzMiBjbWRfYmUsIHU4ICpvdXQsIHU4IG91dF9sZW4pCiYjNDM7ewomIzQzOwlfX2JlMzIgY21kID0gY3B1X3RvX2JlMzIoY21kX2JlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgJmFtcDtjbWQsIDQsIG91dCwgb3V0X2xlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpCiYjNDM7ewomIzQzOwl1OCBidWZbNF07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9TVEFUVVMsIGJ1ZiwgNCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuCiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCwKJiM0MzsgKiBhbmQgdGhlIHN0YXR1cyBpcyByZWFkIG9uY2UgbW9yZSBhZnRlciBpdCBleHBpcmVzIGJlZm9yZSBnaXZpbmcgdXAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpCiYjNDM7ewomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJaW50IGVyciA9IDAsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsCiYjNDM7CQkJCWVyciB8fCAoc3RhdHVzICZhbXA7IENQTERfU1RBVFVTX0ZBSUxFRCkgfHwKJiM0MzsJCQkJIShzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfQlVTWSksCiYjNDM7CQkJCUNQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsCiYjNDM7CQkJCWJwLCAmYW1wO3N0YXR1cyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBLZWVwIHRoZSB0cmFuc3BvcnQgZXJybm8gc28gaXQgcmVhY2hlcyB1c2Vyc3BhY2UgYXMtaXM7IC1FSU8gaXMKJiM0MzsJICogcmVzZXJ2ZWQgZm9yIHRoZSBDUExEIGl0c2VsZiByZXBvcnRpbmcgRkFJTEVELgomIzQzOwkgKi8KJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfRkFJTEVEKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXYWl0IGZvciBCVVNZIHRvIGNsZWFyLCBpZ25vcmluZyBhIHBlbmRpbmcgY2FuY2VsLiAgQW4gSVNDIGNvbW1hbmQgaXNzdWVkCiYjNDM7ICogd2hpbGUgdGhlIHBhcnQgaXMgc3RpbGwgZXJhc2luZyBvciBwcm9ncmFtbWluZyBtYXkgbm90IGxhdGNoLCBzbyBhbiBhYm9ydAomIzQzOyAqIGhhcyB0byB3YWl0IHRoZSBvcGVyYXRpb24gb3V0IGJlZm9yZSBpdCBjYW4gbGVhdmUgY29uZmlndXJhdGlvbiBtb2RlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfaWRsZShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpCiYjNDM7ewomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJaW50IGVyciA9IDAsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsCiYjNDM7CQkJCWVyciB8fCAhKHN0YXR1cyAmYW1wOyBDUExEX1NUQVRVU19CVVNZKSwKJiM0MzsJCQkJQ1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwKJiM0MzsJCQkJYnAsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qIExlYXZlIHRyYW5zcGFyZW50IGNvbmZpZ3VyYXRpb24gbW9kZS4gIGNwbGRfaW5fY29uZmlnX21vZGUgc3RheXMgc2V0IHdoZW4KJiM0MzsgKiBESVNfQ0ZHIGRvZXMgbm90IGdldCB0aHJvdWdoLCBzbyBhIGxhdGVyIGNsZWFudXAoKSB0cmllcyBhZ2FpbiByYXRoZXIgdGhhbgomIzQzOyAqIHJlY29yZGluZyBhbiBleGl0IHRoYXQgbmV2ZXIgaGFwcGVuZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFkdmFfeDFfY3BsZF93YWl0X2lkbGUoYnAsIENQTERfRVJBU0VfTVMpOwomIzQzOwomIzQzOwllcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0RJU19DRkcpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2X3dhcm4oJmFtcDticC0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O0NQTEQgbGVmdCBpbiBjb25maWd1cmF0aW9uIG1vZGU6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJZWxzZQomIzQzOwkJYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWFkIHRoZSBMYXR0aWNlIGRldmljZSBJRCBhbmQgdGhlIGltYWdlIFVTRVJDT0RFIHVuZGVyIG9uZSBidXMgY2xhaW0uCiYjNDM7ICogRG9uZSBvbmNlLCBvZmYgdGhlIHVucHJpdmlsZWdlZCBkZXZsaW5rIHBhdGgsIHdoaWNoIHJlcG9ydHMgdGhlIGNhY2hlZAomIzQzOyAqIHZhbHVlcy4gIC1FQlVTWSBtZWFucyBjcGxkX2xvY2sgaXMgaGVsZCwgc28gdGhlIGNhbGxlciBjYW4gcmV0cnkgcmF0aGVyCiYjNDM7ICogdGhhbiB3YWl0IGJlaGluZCBhIGxvbmcgQ1BMRCBvcGVyYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9pZChzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwl1MzIgaWQsIHVzZXJjb2RlOwomIzQzOwl1OCBkYXRhWzRdOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byByZWxlYXNlOwomIzQzOwlyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBkZXNlbGVjdDsKJiM0MzsJaWQgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSk7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSwgZGF0YSwgNCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGRlc2VsZWN0OwomIzQzOwl1c2VyY29kZSA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTsKJiM0MzsKJiM0MzsJLyogY3BsZF9pZCBpcyB0aGUgdmFsaWRpdHkgZmxhZyBmb3IgYm90aCwgc28gcHVibGlzaCBpdCBsYXN0LiAqLwomIzQzOwlXUklURV9PTkNFKGJwLSZndDtjcGxkX3VzZXJjb2RlLCB1c2VyY29kZSk7CiYjNDM7CVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaWQsIGlkKTsKJiM0MztkZXNlbGVjdDoKJiM0MzsJYWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7CiYjNDM7cmVsZWFzZToKJiM0MzsJYWR2YV94MV9idXNfcmVsZWFzZShicCk7CiYjNDM7b3V0OgomIzQzOwltdXRleF91bmxvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9kYmcoJmFtcDticC0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Q1BMRCBkZXZpY2UgSUQgdW5hdmFpbGFibGU6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi8KJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2NwbGRfc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCSBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IGNvdW50ID0gMDsKJiM0MzsJdTMyIHN0ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovCiYjNDM7CXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2U7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCk7CiYjNDM7CWFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpOwomIzQzO3JlbGVhc2U6CiYjNDM7CWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBGbGFnczogdGhlIG5hbWVzIG9mIHRoZSBiaXRzIHRoYXQgYXJlIHNldCwgbm90aGluZyB3aGVuIG5vbmUgaXMsCiYjNDM7CSAqIHJhdGhlciB0aGFuIGEgdmFsdWUgcGVyIGJpdCBpbiBvbmUgZmlsZS4KJiM0MzsJICovCiYjNDM7CWlmIChzdCAmYW1wOyBDUExEX1NUQVRVU19ET05FKQomIzQzOwkJY291bnQgJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgJiMzNDtkb25lJiMzNDspOwomIzQzOwlpZiAoc3QgJmFtcDsgQ1BMRF9TVEFUVVNfQlVTWSkKJiM0MzsJCWNvdW50ICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsICYjMzQ7JXNidXN5JiMzNDssIGNvdW50ID8gJiMzNDsgJiMzNDsgOiAmIzM0OyYjMzQ7KTsKJiM0MzsJaWYgKHN0ICZhbXA7IENQTERfU1RBVFVTX0ZBSUxFRCkKJiM0MzsJCWNvdW50ICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsICYjMzQ7JXNmYWlsZWQmIzM0OywKJiM0MzsJCQkJICAgICAgIGNvdW50ID8gJiMzNDsgJiMzNDsgOiAmIzM0OyYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50ICYjNDM7IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgJiMzNDtcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByb2dyYW0gdGhlIENQTEQgY29uZmlndXJhdGlvbiBmbGFzaCBmcm9tIEBmdyBhbmQgYWN0aXZhdGUgaXQuICBTZWxlY3RlZAomIzQzOyAqIGJ5IHRoZSAmIzM0O2Z3LmNwbGQmIzM0OyBmbGFzaCBjb21wb25lbnQ7IHRoZSBTUEkgZmxhc2gga2VlcHMgdGhlIGRlZmF1bHQgcGF0aC4KJiM0MzsgKiBSdW5zIHVuZGVyIGNwbGRfbG9jayB3aXRoIHRoZSBpMmMgYWRhcHRlciBsb2NrIGhlbGQsIHNvIGFuIEVFUFJPTSByZWFkCiYjNDM7ICogYmxvY2tzIGZvciBhcyBsb25nIGFzIHByb2dyYW1taW5nIHRha2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzaXplX3Qgb2Zmc2V0OwomIzQzOwlpbnQgZXJyOwomIzQzOwl1MzIgc3Q7CiYjNDM7CiYjNDM7CWlmICghZnctJmd0O3NpemUgfHwgZnctJmd0O3NpemUgJSBDUExEX1BBR0VfU0laRSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtpbWFnZSBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIG9mIDE2LWJ5dGUgcGFnZXMmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwllcnIgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byByZWxlYXNlOwomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIEVOX0NGR19UUCwgbm90IGFmdGVyOiB0aGUgQ1BMRCBtYXkgaGF2ZSBlbnRlcmVkIGNvbmZpZwomIzQzOwkgKiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIGVycm9ycyBvciB0aGUgd2FpdCB0aW1lcyBvdXQsIGFuZCBvbmx5IHRoaXMKJiM0MzsJICogbWFrZXMgdGhlIGV4aXQgcGF0aCBzZW5kIERJU19DRkcuICBBIHN0cmF5IERJU19DRkcgaXMgaGFybWxlc3M7CiYjNDM7CSAqIGxlYXZpbmcgY29uZmlnIG1vZGUgZW5hYmxlZCBpcyBub3QuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRU5fQ0ZHX1RQKTsKJiM0MzsJaWYgKCFlcnIpCiYjNDM7CQllcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgNTAwMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssICYjMzQ7RXJhc2luZyYjMzQ7LAomIzQzOwkJCQkJICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRVJBU0UpOwomIzQzOwlpZiAoIWVycikKJiM0MzsJCWVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCBDUExEX0VSQVNFX01TKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9jb25maWc7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCAmbHQ7IGZ3LSZndDtzaXplOyBvZmZzZXQgJiM0Mzs9IENQTERfUEFHRV9TSVpFKSB7CiYjNDM7CQl1OCBhcmdzWzMgJiM0MzsgQ1BMRF9QQUdFX1NJWkVdID0geyAweDAwLCAweDAwLCAweDAxIH07CiYjNDM7CiYjNDM7CQltZW1jcHkoJmFtcDthcmdzWzNdLCBmdy0mZ3Q7ZGF0YSAmIzQzOyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTsKJiM0MzsJCWVyciA9IGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBDUExEX0NNRF9XUklURV9QQUdFLAomIzQzOwkJCQkgICAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKTsKJiM0MzsJCWlmICghZXJyKQomIzQzOwkJCWVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDApOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwkJaWYgKCEob2Zmc2V0ICUgKENQTERfUEFHRV9TSVpFICogNjQpKSkKJiM0MzsJCQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssCiYjNDM7CQkJCQkJCSAgICYjMzQ7UHJvZ3JhbW1pbmcmIzM0OywKJiM0MzsJCQkJCQkJICAgQURWQV9DUExEX0NPTVBPTkVOVCwKJiM0MzsJCQkJCQkJICAgb2Zmc2V0LCBmdy0mZ3Q7c2l6ZSk7CiYjNDM7CX0KJiM0MzsJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLCAmIzM0O1Byb2dyYW1taW5nJiMzNDssCiYjNDM7CQkJCQkgICBBRFZBX0NQTERfQ09NUE9ORU5ULAomIzQzOwkJCQkJICAgZnctJmd0O3NpemUsIGZ3LSZndDtzaXplKTsKJiM0MzsKJiM0MzsJZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSk7CiYjNDM7CWlmICghZXJyKQomIzQzOwkJZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2NvbmZpZzsKJiM0MzsKJiM0MzsJZXJyID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCAmYW1wO3N0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9jb25maWc7CiYjNDM7CWlmICghKHN0ICZhbXA7IENQTERfU1RBVFVTX0RPTkUpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBleGl0X2NvbmZpZzsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssICYjMzQ7QWN0aXZhdGluZyYjMzQ7LAomIzQzOwkJCQkJICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVGUkVTSCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwkvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gdGhlIGV4aXQKJiM0MzsJICogcGF0aCBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIGEgY2hlY2sgYmVsb3cgZmFpbHMuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZywgc28gYSBzZWdtZW50IHRoYXQgaXMgbm90IGJhY2sKJiM0MzsJICogeWV0IG11c3Qgbm90IGJlIHJlcG9ydGVkIGFzIGEgZmFpbGVkIHVwZGF0ZTogcmV0cnkgdGhlIHJlc2VsZWN0CiYjNDM7CSAqIHJhdGhlciB0aGFuIHNhbXBsaW5nIHRoZSBtdXggb25jZSBhdCBhIGZpeGVkIGRlbGF5LgomIzQzOwkgKi8KJiM0MzsJbXNsZWVwKDE1MDApOwomIzQzOwllcnIgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX211eF9zZWxlY3QsIGVyciwgIWVyciwgQ1BMRF9QT0xMX1VTLAomIzQzOwkJCQkzMDAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsCiYjNDM7CQkJCWJwLCBBRFZBX01VWF9DSEFOTkVMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVzZWxlY3Q7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAzMDAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVzZWxlY3Q7CiYjNDM7CiYjNDM7CS8qIFJlcXVpcmUgRE9ORSBzZXQsIG5vdCBidXN5IGFuZCBubyBlcnJvciBjb2RlLCBhcyBtYWNoeG8yLXNwaS5jIGRvZXMKJiM0MzsJICogYWZ0ZXIgYSByZWZyZXNoOiB3aXRob3V0IGl0IGEgQ1JDIG9yIHByZWFtYmxlIGVycm9yIHJlYWRzIGJhY2sgYXMgYQomIzQzOwkgKiBzdWNjZXNzZnVsIHVwZGF0ZS4KJiM0MzsJICovCiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGRlc2VsZWN0OwomIzQzOwlpZiAoIShzdCAmYW1wOyBDUExEX1NUQVRVU19ET05FKSB8fCAoc3QgJmFtcDsgQ1BMRF9TVEFUVVNfQlVTWSkgfHwKJiM0MzsJICAgIChzdCAmYW1wOyBDUExEX1NUQVRVU19FUlIpKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0NQTEQgcmVmcmVzaCBsZWZ0IHN0YXR1cyAweCUwOHhcbiYjMzQ7LCBzdCk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0NQTEQgZGlkIG5vdCBjb21lIGJhY2sgY29uZmlndXJlZCYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIGRlc2VsZWN0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBpbWFnZSBvbiB0aGUgcGFydCBjaGFuZ2VkLCBzbyB0aGUgY2FjaGVkIFVTRVJDT0RFIGhhcyB0b28uICovCiYjNDM7CVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaWQsIDApOwomIzQzOwlXUklURV9PTkNFKGJwLSZndDtjcGxkX2lkX3RyaWVkLCBmYWxzZSk7CiYjNDM7CWJwLSZndDtjcGxkX2lkX2F0dGVtcHRzID0gMDsKJiM0MzsKJiM0MztleGl0X2NvbmZpZzoKJiM0MzsJYWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKGJwKTsKJiM0MztkZXNlbGVjdDoKJiM0MzsJYWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7CiYjNDM7cmVsZWFzZToKJiM0MzsJYWR2YV94MV9idXNfcmVsZWFzZShicCk7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfc2VyaWFsbnVtLmF0dHIsCiAJJmFtcDtkZXZfYXR0cl9nbnNzX3N5bmMuYXR0ciwKQEAgLTQyNzQsNiAmIzQzOzQ5OTAsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLAogCSZhbXA7ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsCiYjNDM7CSZhbXA7ZGV2X2F0dHJfY3BsZF9zdGF0dXMuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtNDkwNCw2ICYjNDM7NTYyMSw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicCkKIAkJY2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC0mZ3Q7aTJjX2Nsayk7CiAJaWYgKGJwLSZndDtuX2lycXMpCiAJCXBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLSZndDtwZGV2KTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwogCWRldmljZV91bnJlZ2lzdGVyKCZhbXA7YnAtJmd0O2Rldik7CiB9CiAKQEAgLTUwNTIsNiAmIzQzOzU3NzAsMjAgQEAgcHRwX29jcF9zeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJYnAtJmd0O3N5bmMgPSBzeW5jOwogCiYjNDM7CS8qIFRoZSBhZGFwdGVyIGNhbiBhcHBlYXIgYWZ0ZXIgcHJvYmUsIHNvIHJlYWQgdGhlIElEIGZyb20gaGVyZSBvbmNlCiYjNDM7CSAqIGl0IGhhcy4gIEEgY2xhaW0gY2FuIGZhaWwgdHJhbnNpZW50bHkgLSB0aGUgZmlybXdhcmUgbWF5IG5vdCBncmFudAomIzQzOwkgKiB0aGUgc2VnbWVudCBzdHJhaWdodCBhZnRlciBwb3dlci11cCAtIHNvIHJldHJ5IGEgYm91bmRlZCBudW1iZXIgb2YKJiM0MzsJICogdGltZXMuICAtRUJVU1kgbWVhbnMgY3BsZF9sb2NrIGlzIGhlbGQgYW5kIGRvZXMgbm90IGNvdW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtoYXNfY3BsZCAmYW1wOyZhbXA7ICFSRUFEX09OQ0UoYnAtJmd0O2NwbGRfaWRfdHJpZWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9ucikgJmd0Oz0gMCkgewomIzQzOwkJaW50IGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX2lkKGJwKTsKJiM0MzsKJiM0MzsJCWlmIChlcnIgIT0gLUVCVVNZICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWVyciB8fCAmIzQzOyYjNDM7YnAtJmd0O2NwbGRfaWRfYXR0ZW1wdHMgJmd0Oz0gQ1BMRF9JRF9NQVhfQVRURU1QVFMpKQomIzQzOwkJCVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaWRfdHJpZWQsIHRydWUpOwomIzQzOwl9CiYjNDM7CiAJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZhbXA7YnAtJmd0O3N5bmNfd29yaywgSFopOwogfQogCkBAIC01MDgwLDYgJiM0Mzs1ODEyLDE0IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9kaXNhYmxlOwogCiYjNDM7CS8qIEJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksIHNvCiYjNDM7CSAqIG11dGV4X2Rlc3Ryb3koKSBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LCBhbmQgYmVmb3JlCiYjNDM7CSAqIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCksIHNvIHRoaXMgc2VudGluZWwgY2Fubm90IG92ZXJ3cml0ZSBhbgomIzQzOwkgKiBhZGFwdGVyIG51bWJlciB0aGUgaTJjIG5vdGlmaWVyIHN0b3JlcyBkdXJpbmcgcmVnaXN0cmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9uciA9IC0xOwomIzQzOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7YnAtJmd0O3N5bmNfd29yaywgcHRwX29jcF9zeW5jX3dvcmspOwogCiAJLyogY29tcGF0IG1vZGUuCkBAIC01MDk5LDYgJiM0Mzs1ODM5LDggQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiYjNDM7CWFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoYnApOwomIzQzOwogCWJwLSZndDtwdHAgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDticC0mZ3Q7cHRwX2luZm8sICZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlpZiAoSVNfRVJSKGJwLSZndDtwdHApKSB7CiAJCWVyciA9IFBUUl9FUlIoYnAtJmd0O3B0cCk7CkBAIC01MTE5LDEyICYjNDM7NTg2MSwxMiBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKElTX0VSUihicC0mZ3Q7ZHBsbCkpIHsKIAkJZXJyID0gUFRSX0VSUihicC0mZ3Q7ZHBsbCk7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7ZHBsbF9kZXZpY2VfYWxsb2MgZmFpbGVkXG4mIzM0Oyk7Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfZGV2bGluazsKIAl9CiAKIAllcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC0mZ3Q7ZHBsbCwgRFBMTF9UWVBFX1BQUywgJmFtcDtkcGxsX29wcywgYnApOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfZHBsbF9wdXQ7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgT0NQX1NNQV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCWJwLSZndDtzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLApAQCAtNTE1MCw3ICYjNDM7NTg5MiwxNiBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJCWRwbGxfcGluX3VucmVnaXN0ZXIoYnAtJmd0O2RwbGwsIGJwLSZndDtzbWFbaV0uZHBsbF9waW4sICZhbXA7ZHBsbF9waW5zX29wcywgJmFtcDticC0mZ3Q7c21hW2ldKTsKIAkJZHBsbF9waW5fcHV0KGJwLSZndDtzbWFbaV0uZHBsbF9waW4sICZhbXA7YnAtJmd0O3NtYVtpXS50cmFja2VyKTsKIAl9CiYjNDM7CS8qIGRwbGxfZGV2aWNlX3JlZ2lzdGVyKCkgdGFrZXMgYSBzZWNvbmQgcmVmZXJlbmNlIGFuZCBzdG9yZXMgYnA7IG9ubHkKJiM0MzsJICogZHBsbF9kZXZpY2VfdW5yZWdpc3RlcigpIGRyb3BzIGl0LiAgV2l0aG91dCB0aGlzIHRoZSBkZXZpY2Ugc3RheXMKJiM0MzsJICogdmlzaWJsZSB3aXRoIGEgcHJpdiBwb2ludGVyIGludG8gc3RvcmFnZSBkZXZsaW5rX2ZyZWUoKSB3aWxsIHJlbGVhc2UuCiYjNDM7CSAqLwomIzQzOwlkcGxsX2RldmljZV91bnJlZ2lzdGVyKGJwLSZndDtkcGxsLCAmYW1wO2RwbGxfb3BzLCBicCk7CiYjNDM7b3V0X2RwbGxfcHV0OgogCWRwbGxfZGV2aWNlX3B1dChicC0mZ3Q7ZHBsbCwgJmFtcDticC0mZ3Q7dHJhY2tlcik7CiYjNDM7b3V0X2Rldmxpbms6CiYjNDM7CS8qIGRldGFjaCgpIGRlc3Ryb3lzIGNwbGRfbG9jazsgbm8gZGV2bGluayBvcCBtYXkgc3RpbGwgcmVhY2ggaXQgKi8KJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwogb3V0OgogCXB0cF9vY3BfZGV0YWNoKGJwKTsKIG91dF9kaXNhYmxlOgpAQCAtNTE5Niw2ICYjNDM7NTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2LCAqY2hpbGQgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CiAJc3RydWN0IHB0cF9vY3AgKmJwOwogCWJvb2wgYWRkOwogCkBAIC01MjE5LDExICYjNDM7NTk3MSwyMSBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAKIGZvdW5kOgogCWJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGFkZCkKJiM0MzsJYWRhcCA9IGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCk7CiYjNDM7CWlmIChhZGQpIHsKIAkJcHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgJiMzNDtpMmMmIzM0Oyk7Ci0JZWxzZQomIzQzOwkJLyogT25seSB0aGUgY2FyZCYjMzk7cyBvd24gY29udHJvbGxlcjogYSBtdXggY2hpbGQgYWRkZWQgb24gaXQKJiM0MzsJCSAqIHJlYWNoZXMgcHRwX29jcCB0aHJvdWdoIHRoZSBzYW1lIHdhbGsuICBOdW1iZXJzIGFyZQomIzQzOwkJICogcmVjeWNsZWQsIHNvIHRoZSBjbGFpbSByZS1jaGVja3MgdGhlIHBhcmVudCBpdHNlbGYuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChicC0mZ3Q7aTJjX2N0cmwgJmFtcDsmYW1wOyBhZGFwLSZndDtkZXYucGFyZW50ID09ICZhbXA7YnAtJmd0O2kyY19jdHJsLSZndDtkZXYpCiYjNDM7CQkJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9uciwgYWRhcC0mZ3Q7bnIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSwgYnV0IG9ubHkgZm9yIHRoZSBjYWNoZWQgYWRhcHRlciAqLwomIzQzOwkJaWYgKFJFQURfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9ucikgPT0gYWRhcC0mZ3Q7bnIpCiYjNDM7CQkJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9uciwgLTEpOwogCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2JwLSZndDtkZXYua29iaiwgJiMzNDtpMmMmIzM0Oyk7Ci0KJiM0MzsJfQogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzE1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIHNlcmllcyBpcyBkb2luZy4gSSBzZWUgaXQgdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZGAsIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3RgLCBgTUFJTlRBSU5FUlNgLCBhbmQgY3J1Y2lhbGx5LCBgZHJpdmVycy9wdHAvcHRwX29jcC5jYC4gU2VlbXMgbGlrZSBhIGRvY3VtZW50YXRpb24gdXBkYXRlLCBhIGxpa2VseSBBQkkgY2hhbmdlLCBzb21lIG5ldHdvcmtpbmcgcmVsYXRlZCBjaGFuZ2VzIGFuZCBhIGRyaXZlciBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBlYWNoLCBidXQgYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2AgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIHdvcmsgaXMgcHJvYmFibHkuCgpSaWdodCwgc28gd2hhdCYjMzk7cyBgcHRwX29jcC5jYD8gQSBxdWljayBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIGFuIE9wZW5Db21wdXRlIFBUUCBjbG9jayBkcml2ZXIuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgc2hvdWxkIGNoZWNrIHdoYXQgZGV2aWNlcyB0aGlzIGRyaXZlciBhY3R1YWxseSBzdXBwb3J0czsgYmluZGluZyB0byBQQ0kgZGV2aWNlcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHksIGxldCYjMzk7cyBxdWlja2x5IGdyZXAgaW4gdGhlIGBwdHBfb2NwLmNgIGZvciBhbnkgYHBjaV9kZXZpY2VfaWRgIGVudHJpZXMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZHJpdmVyIGlzIHVzZWQsIGFuZCB3aGF0IGRldmljZXMgaXQgaW50ZXJmYWNlcyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXChwY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jPTEzMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMjQtfTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgUFRQT0NQIERldmljZSBJRCBUYWJsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUFRQT0NQIGRyaXZlciAoYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2ApIGlkZW50aWZpZXMgYW5kIGhhbmRsZXMgc3BlY2lmaWMgaGFyZHdhcmUuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBjcml0aWNhbCBzdGVwIGluIGRlYnVnZ2luZy91bmRlcnN0YW5kaW5nLCBpcyB0byBleGFtaW5lIHRoZSBgcGNpX2RldmljZV9pZGAgdGFibGUuIFRoYXQgdGFibGUgaXMgdGhlIGhvbHkgZ3JhaWwgZm9yIGEgUENJIGRldmljZSBkcml2ZXIuIEl0IGNvbnRhaW5zIHRoZSBhbGwtaW1wb3J0YW50IHZlbmRvciBJRHMsIGRldmljZSBJRHMsIGFuZCBzb21ldGltZXMgc3Vic3lzdGVtIElEcywgdGhhdCB0aGUgZHJpdmVyIHVzZXMgdG8gY2xhaW0gZGV2aWNlcyBkdXJpbmcgcHJvYmUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXZpY2UgSURzIG1hdGNoIHRoZSBkZXZpY2VzIEkmIzM5O20gZXhhbWluaW5nLCBvciB1bmRlcnN0YW5kIHdoeSB0aGV5IGRvbiYjMzk7dC4gSXQgd2lsbCBnaXZlIG1lIGEgZmlyc3QgY2x1ZSBvbiB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzEwOlx0XHRcdFx0LmF0dHJfZ3JvdXBzICA9IGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzLFxuMTMxMTpcdFx0XHRcdC5oYXNfY3BsZCAgICAgPSB0cnVlLFxuMTMxMjpcdFx0XHR9LFxuMTMxMzpcdFx0fSxcbjEzMTQ6XHRcdHsgfVxuMTMxNTpcdH07XG4xMzE2Olx0XG4xMzE3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG4xMzE4Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBUSU1FQ0FSRCwgXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxuMTMxOTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoQ0VMRVNUSUNBLCBUSU1FQ0FSRCwgXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxuMTMyMDpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoT1JPTElBLCBBUlRDQVJELCBcdTAwMjZvY3BfYXJ0X3Jlc291cmNlKSB9LFxuMTMyMTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkQsIFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxuMTMyMjpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFx1MDAyNm9jcF9hZHZhX3gxX3Jlc291cmNlKSB9LFxuMTMyMzpcdFx0eyB9XG4xMzI0Olx0fTtcbjEzMjU6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcHRwX29jcF9wY2lkZXZfaWQpO1xuMTMyNjpcdFxuMTMyNzpcdHN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcbjEzMjg6XHRzdGF0aWMgREVGSU5FX0lEUihwdHBfb2NwX2lkcik7XG4xMzI5Olx0XG4xMzMwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9jbG9ja1tdID0ge1xuMTMzMTpcdFx0eyAubmFtZSA9IFwmIzM0O05PTkVcJiMzNDssXHQudmFsdWUgPSAwIH0sXG4xMzMyOlx0XHR7IC5uYW1lID0gXCYjMzQ7VE9EXCYjMzQ7LFx0LnZhbHVlID0gMSB9LFxuMTMzMzpcdFx0eyAubmFtZSA9IFwmIzM0O0lSSUdcJiMzNDssXHQudmFsdWUgPSAyIH0sXG4xMzM0Olx0XHR7IC5uYW1lID0gXCYjMzQ7UFBTXCYjMzQ7LFx0LnZhbHVlID0gMyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njg1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoRnV6emluZyBDcml0ZXJpYSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogSSBuZWVkIHRvIGRldGVybWluZSBpZiBJIGNhbiBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYmFzZWQgb24gc29tZSBuZWdhdGl2ZSBjcml0ZXJpYS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCByZXR1cm4gYGZhbHNlYCBPTkxZIGlmIGFsbCB0aGUgY2hhbmdlZCBjb2RlIGZhbGxzIGludG8gc3BlY2lmaWMgY2F0ZWdvcmllcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IG5lZ2F0aXZlIGNvbmRpdGlvbnM6IG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4KCkhtbSwgdGhpcyBgcHRwX29jcGAgZHJpdmVyLi4uIGRvZXMgaXQgZmFsbCB1bmRlciB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeT8gVGhhdCBzZWN0aW9uIHNwZWNpZmljYWxseSBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhlIGtpbmQgdGhhdCBuZWVkIGFjdHVhbCBoYXJkd2FyZSwgbm90IFFFTVUgZW11bGF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBhcHBseSB0byBgcHRwX29jcGA/CgpJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi4gTGV0IG1lIHNlZS4uLiBJIGhhdmUgc29tZSBQQ0kgSURzIGhlcmU6IGBQQ0lfVkVORE9SX0lEX01FVEFgLCBgUENJX0RFVklDRV9JRF9NRVRBX1RJTUVDQVJEYCwgYW5kIG90aGVycyBsaWtlIENlbGVzdGljYSwgT3JvbGlhLCBhbmQgQURWQS4gVGhlc2UgKmxvb2sqIGxpa2UgdGltZSBjYXJkcy4gVGhleSYjMzk7cmUgYWxsIGZvciBzcGVjaWFsaXplZCBQVFAgdGltZSBjYXJkIFBDSWUgY2FyZHMsIHJlbGF0ZWQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWUgQXBwbGlhbmNlIFByb2plY3QsIHRoZSAmIzM0O1RpbWUgQ2FyZCYjMzQ7LgoKUmlnaHQsIHRoaXMgaGFyZHdhcmUgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlYXNpbHkgZW11bGF0ZWQgaW4gUUVNVS4gVGhleSByZXF1aXJlIGRlZGljYXRlZCBoYXJkd2FyZS4gTXkgbmV4dCBjaGVjayB3b3VsZCBiZSB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSYjMzk7cyBhbnkgdmlydHVhbCBidXMgb3Igc29mdHdhcmUgZW11bGF0aW9uIHJlbGF0ZWQgdG8gYHB0cF9vY3BgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmaWxlIGFuZCBvdGhlciByZWxldmFudCBrZXJuZWwgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBzb21lIG1vY2ssIHZpcnR1YWwsIG9yIG90aGVyIHNvZnR3YXJlLWJhc2VkIG1ldGhvZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdHBfb2NwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIxMDEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvcHRwL01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19QVFBfMTU4OF9DTE9DS19WTVcpXHQmIzQzOz0gcHRwX3Ztdy5vXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfT0NQKVx0JiM0Mzs9IHB0cF9vY3Aub1xuZHJpdmVycy9wdHAvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BUUF9ERkxfVE9EKVx0XHQmIzQzOz0gcHRwX2RmbF90b2Qub1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00OD1zdHJ1Y3Qgb2NwX3JlZyB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTcyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjczOnN0cnVjdCBwdHBfb2NwX3NlcnZvX2NvbmYge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc0LVx0dTMyXHRzZXJ2b19vZmZzZXRfcDtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODEtICogQ29tYmluZWQgc2Vydm8gJiM0MzsgYm9hcmQtdmFyaWFudCBwYXJhbWV0ZXJzIGZvciBBRFZBIGJvYXJkcy5cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4MjogKiBFbWJlZGRlZCBpbiB0aGUgcmVzb3VyY2UgdGFibGUgLmV4dHJhIHNvIGEgc2luZ2xlIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KClcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04My0gKiBjYW4gaGFuZGxlIGJvdGggQURWQSBhbmQgQURWQS1YMSB3aXRob3V0IHBlci12YXJpYW50IGluaXQgZnVuY3Rpb25zLlxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0LSAqL1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1OnN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODY6XHRzdHJ1Y3QgcHRwX29jcF9zZXJ2b19jb25mXHRzZXJ2bztcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04Ny1cdHUzMlx0XHRcdFx0Zmxhc2hfc3RhcnQ7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTI0Mz1zdHJ1Y3QgYm9hcmRfY29uZmlnX3JlZyB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI1MS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNTI6c3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbyB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjUzLVx0Y29uc3QgY2hhciAqbmFtZTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjU4LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI1OTpzdHJ1Y3QgcHRwX29jcF9maXJtd2FyZV9oZWFkZXIge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI2MC1cdGNoYXIgbWFnaWNbNF07XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI2OS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNzA6c3RydWN0IHB0cF9vY3BfaTJjX2luZm8ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3MS1cdGNvbnN0IGNoYXIgKm5hbWU7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3Ni1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNzc6c3RydWN0IHB0cF9vY3BfZXh0X2luZm8ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3OC1cdGludCBpbmRleDtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjgyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI4MzpzdHJ1Y3QgcHRwX29jcF9leHRfc3JjIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yODQtXHR2b2lkIF9faW9tZW1cdFx0Km1lbTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyODU6XHRzdHJ1Y3QgcHRwX29jcFx0XHQqYnA7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mjg2Olx0c3RydWN0IHB0cF9vY3BfZXh0X2luZm9cdCppbmZvO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI4Ny1cdGludFx0XHRcdGlycV92ZWM7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI4OS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyOTA6ZW51bSBwdHBfb2NwX3NtYV9tb2RlIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTEtXHRTTUFfTU9ERV9JTixcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjk0LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5NTpzdGF0aWMgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBwdHBfb2NwX3NtYV9mcmVxW10gPSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjk2LVx0RFBMTF9QSU5fRlJFUVVFTkNZXzFQUFMsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTMwMS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMDI6c3RydWN0IHB0cF9vY3Bfc21hX2Nvbm5lY3RvciB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzAzOlx0ZW51bVx0cHRwX29jcF9zbWFfbW9kZSBtb2RlO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTMwNC1cdGJvb2xcdGZpeGVkX2Zjbjtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzI0PXN0cnVjdCBvY3Bfc21hX29wIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMjUtXHRjb25zdCBzdHJ1Y3Qgb2NwX3NlbGVjdG9yICp0YmxbMl07XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzI2Olx0dm9pZCAoKmluaXQpKHN0cnVjdCBwdHBfb2NwICpicCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzI3Olx0dTMyICgqZ2V0KShzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBzbWFfbnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMyODpcdGludCAoKnNldF9pbnB1dHMpKHN0cnVjdCBwdHBfb2NwICpicCwgaW50IHNtYV9uciwgdTMyIHZhbCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzI5Olx0aW50ICgqc2V0X291dHB1dCkoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgc21hX25yLCB1MzIgdmFsKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMzAtfTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzM1LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMzNjpzdHJ1Y3QgcHRwX29jcF9zaWduYWwge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTMzNy1cdGt0aW1lX3RcdFx0cGVyaW9kO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNDUtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzQ2OnN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNDctXHRpbnQgbGluZTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzU3PWVudW0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNjUtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzY2OnN0cnVjdCBwdHBfb2NwIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNjctXHRzdHJ1Y3QgcGNpX2Rldlx0XHQqcGRldjtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzgzLVx0c3RydWN0IGZyZXF1ZW5jeV9yZWdcdF9faW9tZW0gKmZyZXFfaW5bT0NQX0ZSRVFfTlVNXTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODQ6XHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXHQqc2lnbmFsX291dFtPQ1BfU0lHTkFMX05VTV07XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg1Olx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1x0KnBwcztcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODY6XHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXHQqdHMwO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM4NzpcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcdCp0czE7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg4Olx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1x0KnRzMjtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODk6XHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXHQqdHMzO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM5MDpcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcdCp0czQ7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzkxLVx0c3RydWN0IG9jcF9hcnRfZ3Bpb19yZWcgX19pb21lbSAqYXJ0X3NtYTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzk5LVx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmF0dHJfZ3JvdXA7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDAwOlx0Y29uc3Qgc3RydWN0IHB0cF9vY3BfZWVwcm9tX21hcCAqZWVwcm9tX21hcDtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDEtXHRzdHJ1Y3QgZGVudHJ5XHRcdCpkZWJ1Z19yb290O1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDYtXHRpbnRcdFx0XHRuX2lycXM7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDA3Olx0c3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnRcdHBvcnRbX19QT1JUX0NPVU5UXTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDgtXHRib29sXHRcdFx0ZndfbG9hZGVyO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MTgtXHR1NjRcdFx0XHRmd19jYXA7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDE5Olx0c3RydWN0IHB0cF9vY3Bfc2lnbmFsXHRzaWduYWxbT0NQX1NJR05BTF9OVU1dO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQyMDpcdHN0cnVjdCBwdHBfb2NwX3NtYV9jb25uZWN0b3Igc21hW09DUF9TTUFfTlVNXTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjEtXHRjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCAqc21hX29wO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00NTI9c3RydWN0IG9jcF9yZXNvdXJjZSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ1NS1cdGludCBpcnFfdmVjO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ1NjpcdGludCAoKnNldHVwKShzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ1Ny1cdHZvaWQgKmV4dHJhO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NjEtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDYyOnN0YXRpYyBpbnQgcHRwX29jcF9yZWdpc3Rlcl9tZW0oc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NjM6c3RhdGljIGludCBwdHBfb2NwX3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NDpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfc3BpKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDY1OnN0YXRpYyBpbnQgcHRwX29jcF9yZWdpc3Rlcl9zZXJpYWwoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NjY6c3RhdGljIGludCBwdHBfb2NwX3JlZ2lzdGVyX2V4dChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NzpzdGF0aWMgaW50IHB0cF9vY3BfZmJfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2ODpzdGF0aWMgaXJxcmV0dXJuX3QgcHRwX29jcF90c19pcnEoaW50IGlycSwgdm9pZCAqcHJpdik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDY5OnN0YXRpYyBpcnFyZXR1cm5fdCBwdHBfb2NwX3NpZ25hbF9pcnEoaW50IGlycSwgdm9pZCAqcHJpdik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDcwOnN0YXRpYyBpbnQgcHRwX29jcF90c19lbmFibGUodm9pZCAqcHJpdiwgdTMyIHJlcSwgYm9vbCBlbmFibGUpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3MTpzdGF0aWMgaW50IHB0cF9vY3Bfc2lnbmFsX2Zyb21fcGVyb3V0KHN0cnVjdCBwdHBfb2NwICpicCwgaW50IGdlbixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXEpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3MzpzdGF0aWMgaW50IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSh2b2lkICpwcml2LCB1MzIgcmVxLCBib29sIGVuYWJsZSk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDc0OnN0YXRpYyBpbnQgcHRwX29jcF9zbWFfc3RvcmUoc3RydWN0IHB0cF9vY3AgKmJwLCBjb25zdCBjaGFyICpidWYsIGludCBzbWFfbnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3NS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzY6c3RhdGljIGludCBwdHBfb2NwX2FydF9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDc3LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3ODpzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDc5LVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00ODE9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcDtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDg1LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ4NjpzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9mbGFzaChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ4Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3Vwc1tdO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ5Ny1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0OTg6c3RydWN0IHB0cF9vY3BfZWVwcm9tX21hcCB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDk5LVx0dTE2XHRvZmY7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUwNi1cdC5vZmYgPSBhZGRyLFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTA3Olx0LmxlbiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgcHRwX29jcCwgbWVtYmVyKSxcdFx0XFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MDg6XHQuYnBfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB0cF9vY3AsIG1lbWJlcilcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MDktXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMy1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTQ6c3RhdGljIHN0cnVjdCBwdHBfb2NwX2VlcHJvbV9tYXAgZmJfZWVwcm9tX21hcFtdID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxNS1cdHsgRUVQUk9NX0VOVFJZKDB4NDMsIGJvYXJkX2lkKSB9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTktXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTIwOnN0YXRpYyBzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIGFydF9lZXByb21fbWFwW10gPSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTIxLVx0eyBFRVBST01fRU5UUlkoMHgyMDAgJiM0MzsgMHg0MywgYm9hcmRfaWQpIH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzMS0jZGVmaW5lIE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSBcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzMjpcdC5uYW1lID0gI21lbWJlciwgLmJwX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwdHBfb2NwLCBtZW1iZXIpXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTMzLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzNC0jZGVmaW5lIE9DUF9NRU1fUkVTT1VSQ0UobWVtYmVyKSBcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzNTpcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9tZW1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MzYtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTM3LSNkZWZpbmUgT0NQX1NFUklBTF9SRVNPVVJDRShtZW1iZXIpIFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTM4Olx0T0NQX1JFU19MT0NBVElPTihtZW1iZXIpLCAuc2V0dXAgPSBwdHBfb2NwX3JlZ2lzdGVyX3NlcmlhbFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzOS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDAtI2RlZmluZSBPQ1BfSTJDX1JFU09VUkNFKG1lbWJlcikgXFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1NDE6XHRPQ1BfUkVTX0xPQ0FUSU9OKG1lbWJlciksIC5zZXR1cCA9IHB0cF9vY3BfcmVnaXN0ZXJfaTJjXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0My0jZGVmaW5lIE9DUF9TUElfUkVTT1VSQ0UobWVtYmVyKSBcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU0NDpcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9zcGlcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDUtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQ2LSNkZWZpbmUgT0NQX0VYVF9SRVNPVVJDRShtZW1iZXIpIFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTQ3Olx0T0NQX1JFU19MT0NBVElPTihtZW1iZXIpLCAuc2V0dXAgPSBwdHBfb2NwX3JlZ2lzdGVyX2V4dFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0OC1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTc2PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9mYl9yZXNvdXJjZVtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01ODMtXHRcdC5vZmZzZXQgPSAweDAxMDEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1ODQ6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU4NS1cdFx0XHQuaW5kZXggPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU4NjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU4NzpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTg4LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01OTItXHRcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1OTM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU5NC1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU5NTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU5NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTk3LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MDEtXHRcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MDI6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYwMy1cdFx0XHQuaW5kZXggPSAyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYwNDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYwNTpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjA2LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTAtXHRcdC5vZmZzZXQgPSAweDAxMTEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjExOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTItXHRcdFx0LmluZGV4ID0gMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MTM6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MTQ6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYxNS1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjE5LVx0XHQub2Zmc2V0ID0gMHgwMTEyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE2LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYyMDpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjIxLVx0XHRcdC5pbmRleCA9IDQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjIyOlx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjIzOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MjQtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYyOS1cdFx0Lm9mZnNldCA9IDB4MDEwQzAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYzMDpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjMxLVx0XHRcdC5pbmRleCA9IDUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjMyOlx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjMzOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MzQtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYzOC1cdFx0Lm9mZnNldCA9IDB4MDEwRDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Mzk6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0MC1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY0MTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NDI6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NDMtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0Ny1cdFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NDg6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0OS1cdFx0XHQuaW5kZXggPSAyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1MDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NTE6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NTItXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY1Ni1cdFx0Lm9mZnNldCA9IDB4MDEwRjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NTc6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY1OC1cdFx0XHQuaW5kZXggPSAzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1OTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NjA6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NjEtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2NS1cdFx0Lm9mZnNldCA9IDB4MDExMDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NjY6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2Ny1cdFx0XHQuaW5kZXggPSA0LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY2ODpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Njk6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NzAtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTcyMi1cdFx0Lm9mZnNldCA9IDB4MDAxNTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA3LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjcyMzpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzI0LVx0XHRcdC5uYW1lID0gXCYjMzQ7eGlpYy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTczOS1cdFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDMsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzQwOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NDEtXHRcdFx0LmJhdWQgPSAxMTUyMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc0Ni1cdFx0Lm9mZnNldCA9IDB4MDAxNzAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzQ3Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NDgtXHRcdFx0LmJhdWQgPSAxMTUyMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc1My1cdFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzU0Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NTUtXHRcdFx0LmJhdWQgPSA1NzYwMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzY0LVx0XHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzY1Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc2Ni1cdFx0XHQubmFtZSA9IFwmIzM0O3hpbGlueF9zcGlcJiMzNDssIC5wY2lfb2Zmc2V0ID0gMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzk1LVx0e1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc5NjpcdFx0LnNldHVwID0gcHRwX29jcF9mYl9ib2FyZF9pbml0LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc5NzpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcnZvX2NvbmYpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03OTgtXHRcdFx0LnNlcnZvX29mZnNldF9wID0gMHgyMDAwLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz04MTc9c3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FydF9yZXNvdXJjZVtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04MjQtXHRcdC5vZmZzZXQgPSAweDAwMTYwMDAwICYjNDM7IDB4MTAwMCwgLmlycV92ZWMgPSAzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgyNTpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODI2LVx0XHRcdC5iYXVkID0gMTE1MjAwLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04MzYtXHRcdC5vZmZzZXQgPSAweDM2MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDEyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgzNzpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODM4LVx0XHRcdC5pbmRleCA9IDAsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODM5Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODQwOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NDEtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0NS1cdFx0Lm9mZnNldCA9IDB4MzgwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gOCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NDY6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0Ny1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg0ODpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg0OTpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODUwLVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NTQtXHRcdC5vZmZzZXQgPSAweDM5MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDEwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1NTpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODU2LVx0XHRcdC5pbmRleCA9IDIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODU3Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODU4Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NTktXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg2My1cdFx0Lm9mZnNldCA9IDB4M0EwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODY0Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NjUtXHRcdFx0LmluZGV4ID0gMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NjY6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4Njc6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg2OC1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODcyLVx0XHQub2Zmc2V0ID0gMHgzQjAwMDAsIC5zaXplID0gMHgyMCwgLmlycV92ZWMgPSAxNSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NzM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg3NC1cdFx0XHQuaW5kZXggPSA0LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg3NTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg3NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODc3LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04ODItXHRcdC5vZmZzZXQgPSAweDAwMzMwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODgzOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04ODQtXHRcdFx0LmluZGV4ID0gNSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4ODU6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4ODY6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg4Ny1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODkxLVx0XHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODkyOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg5My1cdFx0XHQubmFtZSA9IFwmIzM0O3NwaV9hbHRlcmFcJiMzNDssIC5wY2lfb2Zmc2V0ID0gMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTA2LVx0XHQub2Zmc2V0ID0gMHgzNTAwMDAsIC5zaXplID0gMHgxMDAsIC5pcnFfdmVjID0gNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MDc6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9pMmNfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkwOC1cdFx0XHQubmFtZSA9IFwmIzM0O29jb3Jlcy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkyMy1cdFx0Lm9mZnNldCA9IDB4MDAxOTAwMDAsIC5pcnFfdmVjID0gNyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MjQ6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9zZXJpYWxfcG9ydCkge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkyNS1cdFx0XHQuYmF1ZCA9IDk2MDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkzMi1cdHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MzM6XHRcdC5zZXR1cCA9IHB0cF9vY3BfYXJ0X2JvYXJkX2luaXQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTM0Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2Vydm9fY29uZikge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkzNS1cdFx0XHQuc2Vydm9fb2Zmc2V0X3AgPSAweDIwMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTk0ND1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV9yZXNvdXJjZVtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NTEtXHRcdC5vZmZzZXQgPSAweDAxMDEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NTI6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk1My1cdFx0XHQuaW5kZXggPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk1NDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk1NTpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTU2LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjAtXHRcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NjE6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk2Mi1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk2MzpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk2NDpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTY1LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjktXHRcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NzA6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk3MS1cdFx0XHQuaW5kZXggPSAyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk3MjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk3MzpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTc0LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NzktXHRcdC5vZmZzZXQgPSAweDAxMEMwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5ODA6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk4MS1cdFx0XHQuaW5kZXggPSA1LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4MjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4MzpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTg0LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05ODgtXHRcdC5vZmZzZXQgPSAweDAxMEQwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTg5Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTAtXHRcdFx0LmluZGV4ID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5OTE6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTkyOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTkzLVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTctXHRcdC5vZmZzZXQgPSAweDAxMEUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTk4Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTktXHRcdFx0LmluZGV4ID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMDAwOlx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwMDE6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDAyLVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDM0LVx0XHQub2Zmc2V0ID0gMHgwMDE2MDAwMCAmIzQzOyAweDEwMDAsIC5pcnFfdmVjID0gMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMDM1Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDM2LVx0XHRcdC5iYXVkID0gOTYwMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA0MS1cdFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA0MjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA0My1cdFx0XHQuYmF1ZCA9IDExNTIwMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA1Ni1cdFx0Lm9mZnNldCA9IDB4MDAzMTA0MDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA5LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwNTc6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA1OC1cdFx0XHQubmFtZSA9IFwmIzM0O3NwaV9hbHRlcmFcJiMzNDssIC5wY2lfb2Zmc2V0ID0gMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA3MS1cdFx0Lm9mZnNldCA9IDB4MTUwMDAwLCAuc2l6ZSA9IDB4MTAwLCAuaXJxX3ZlYyA9IDcsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA3MjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA3My1cdFx0XHQubmFtZSA9IFwmIzM0O29jb3Jlcy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwOTAtXHR7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MTpcdFx0LnNldHVwID0gcHRwX29jcF9hZHZhX2JvYXJkX2luaXQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwOTMtXHRcdFx0LnNlcnZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMTYtXHRcdC5vZmZzZXQgPSAweDAxMDEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTE3Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTE4LVx0XHRcdC5pbmRleCA9IDAsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTExOTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMjA6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjEtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjUtXHRcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTI2Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTI3LVx0XHRcdC5pbmRleCA9IDEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyODpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMjk6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzAtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzQtXHRcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTM1Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTM2LVx0XHRcdC5pbmRleCA9IDIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEzNzpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMzg6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzktXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNDMtXHRcdC5vZmZzZXQgPSAweDAxMTEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE0NDpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE0NS1cdFx0XHQuaW5kZXggPSAzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNDY6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTQ3Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTQ4LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTUyLVx0XHQub2Zmc2V0ID0gMHgwMTEyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE2LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNTM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNTQtXHRcdFx0LmluZGV4ID0gNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTU1Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE1NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE1Ny1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE2Mi1cdFx0Lm9mZnNldCA9IDB4MDEwQzAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNjM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNjQtXHRcdFx0LmluZGV4ID0gNSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTY1Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE2NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE2Ny1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE3MS1cdFx0Lm9mZnNldCA9IDB4MDEwRDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTcyOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTczLVx0XHRcdC5pbmRleCA9IDEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE3NDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTc1Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE3Ni1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4MC1cdFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTgxOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTgyLVx0XHRcdC5pbmRleCA9IDIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4MzpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTg0Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4NS1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4OS1cdFx0Lm9mZnNldCA9IDB4MDEwRjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkwOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTkxLVx0XHRcdC5pbmRleCA9IDMsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE5MjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkzOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE5NC1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE5OC1cdFx0Lm9mZnNldCA9IDB4MDExMDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTk5Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjAwLVx0XHRcdC5pbmRleCA9IDQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTIwMTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjAyOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIwMy1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIzNS1cdFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDMsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTIzNjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIzNy1cdFx0XHQuYmF1ZCA9IDk2MDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDItXHRcdC5vZmZzZXQgPSAweDAwMTgwMDAwICYjNDM7IDB4MTAwMCwgLmlycV92ZWMgPSA1LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyNDM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9zZXJpYWxfcG9ydCkge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDQtXHRcdFx0LmJhdWQgPSAxMTUyMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNjUtXHRcdC5vZmZzZXQgPSAweDAwMzEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gOSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjY2Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNjctXHRcdFx0Lm5hbWUgPSBcJiMzNDt4aWxpbnhfc3BpXCYjMzQ7LCAucGNpX29mZnNldCA9IDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyODItXHRcdC5vZmZzZXQgPSAweDAwMTUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjgzOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfaTJjX2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjg0LVx0XHRcdC5uYW1lID0gXCYjMzQ7eGlpYy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTctXHR7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI5ODpcdFx0LnNldHVwID0gcHRwX29jcF9hZHZhX2JvYXJkX2luaXQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI5OTpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDAtXHRcdFx0LnNlcnZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzE2LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMTc6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMxOC1cdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMjQtfTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNi1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI3OnN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI4OnN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzI5LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFdvcnRoRnV6emluZyBDcml0ZXJpYSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgb3V0bGluaW5nIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhIOKAkyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGVzZSBhcmUgZXNzZW50aWFsbHkgbm8tZ28gem9uZXMuIEl0JiMzOTtzIHRlbGxpbmcgbWUsIGRvbiYjMzk7dCB3YXN0ZSB0aW1lIGZ1enppbmcgdGhpcyBjb2RlLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNhdGVnb3JpZXMgaGVyZToKCiogICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBkb2NzLCBjb21tZW50cywgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZyB0aGF0JiMzOTtzIHB1cmVseSBkZWNvcmF0aXZlLCBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gVGhpcyBpcyBiYXNpY2FsbHkgc3R1ZmYgdGhhdCB3b24mIzM5O3QgY2hhbmdlIHRoZSBjb21waWxlZCBrZXJuZWwuIE1ha2VzIHNlbnNlLgoqICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVmVuZG9yLXNwZWNpZmljIHN0dWZmIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpbmdzIGxpa2Ugc3BlY2lmaWMgUENJZSBjYXJkcywgU21hcnROSUNzLCBHUFUgZHJpdmVycy4gVGhpcyBpcyB3aGF0IEkgaGF2ZSB0byBmb2N1cyBvbi4KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3Mgb25seSB1c2VkIGR1cmluZyBob3QtdW5wbHVnLCBvciBjb2RlIGV4Y2x1c2l2ZSB0byBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcywgc28gYW55dGhpbmcgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzZXR1cC4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgbGV0JiMzOTtzIGZvY3VzIG9uIGBwdHBfb2NwYC4gVGhpcyBpcyBhbiBPcGVuIENvbXB1dGUgUHJvamVjdCAoT0NQKSBUaW1lIENhcmQgZHJpdmVyLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byDigJMgaXMgdGhpcyBhIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBjYXJkcz8gT2theSwgeWVzLCBpdCYjMzk7cyB0aGUgZHJpdmVyIGZvciB0aGUgT0NQIFRpbWVDYXJkLCB3aGljaCBpcyBhIHBoeXNpY2FsIFBDSWUgY2FyZCB0aGF0IHByb3ZpZGVzIGF0b21pYyBjbG9jaywgR05TUywgYW5kIFBUUCB0aW1pbmcgcmVmZXJlbmNlIGZvciBzZXJ2ZXJzIGluIGRhdGFjZW50ZXJzLiBNZXRhIGluaXRpYXRlZCB0aGlzLCBJIHJlY2FsbC4gSSBrbm93IHRoZSBUaW1lQ2FyZCBkZXZpY2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBQQ0kgZGV2aWNlczogTWV0YSBUaW1lQ2FyZCwgQ2VsZXN0aWNhIFRpbWVDYXJkLCBPcm9saWEgQXJ0Q2FyZCwgQURWQSBUaW1lQ2FyZCBhbmQgQURWQSBUaW1lQ2FyZCBYMS4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgTWV0YSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkPyBObyEgUUVNVSAqZG9lc24mIzM5O3QqIGVtdWxhdGUgdGhpcyBoYXJkd2FyZS4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQhIFNvLCBzaW5jZSB0aGUgVGltZUNhcmQgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCBmYWxscyB1bmRlciB0aGF0ICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGNhdGVnb3J5LgoKTm93LCBiZWZvcmUgSSBtYWtlIGEgZmluYWwgZGV0ZXJtaW5hdGlvbiwgSSBuZWVkIHRvIHZlcmlmeTogY2FuIGBwdHBfb2NwYCBiZSBwcm9iZWQgb3IgaW5zdGFudGlhdGVkICp3aXRob3V0KiB0aGUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZT8gTGV0IG1lIGNoZWNrIGhvdyB0aGUgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGhhdmUgYW4gYWx0ZXJuYXRpdmUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9vY3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTk5Nz1wdHBfb2NwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxNC1cdHdoYXQgPSBcJiMzNDtwdHBfb2NwIGRyaXZlclwmIzM0OztcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MDE1Olx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZwdHBfb2NwX2RyaXZlcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxNi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjU0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUFRQIEluaXRpYWxpemF0aW9uIGFuZCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgUFRQIGNvbXBvbmVudHMgYXJlIGludGVyYWN0aW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byBgcHRwX29jcF9pbml0YC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBjbG9ja3MsIGFuZCBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgc3luY2hyb25pemF0aW9uIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgcGVyaGFwcyBkdXJpbmcgZWFybHkgYm9vdD8gQXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgc2V0IHVwIGNvcnJlY3RseT8gQW55IGlzc3VlcyBhcm91bmQgY2xvY2sgc291cmNlIHNlbGVjdGlvbj8gQW5kIHRoZW4gSSYjMzk7bGwgbW92ZSB0byB0aGUgYHB0cF9vY3BfZHJpdmVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgUFRQIHRpbWVzdGFtcHMsIGFuZCBob3cgaXQmIzM5O3MgZXhwb3NlZCB0byB0aGUgdXNlciBzcGFjZS4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXM/IEFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBvciBkYXRhIHRyYW5zZmVyPyBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGJvdGggb2YgdGhlc2UgbW9kdWxlcywgZXNwZWNpYWxseSB0aGUgY2FzZXMgd2hlcmUgdGhlIGluaXRpYWxpemF0aW9uIGZhaWxzLiBJIGFtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBpc3N1ZXMgYXJvdW5kIGRhdGEgcmFjZXMgb3IgaG93IHRoZXkgYXJlIGhhbmRsZWQsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBpbiBlZGdlIGNhc2VzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGVuZC10by1lbmQgUFRQIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9vY3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk5MDpcdH1cbjU5OTE6XHRcbjU5OTI6XHRzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHB0cF9vY3BfaTJjX25vdGlmaWVyID0ge1xuNTk5MzpcdFx0Lm5vdGlmaWVyX2NhbGwgPSBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsLFxuNTk5NDpcdH07XG41OTk1Olx0XG41OTk2Olx0c3RhdGljIGludCBfX2luaXRcbjU5OTc6XHRwdHBfb2NwX2luaXQodm9pZClcbjU5OTg6XHR7XG41OTk5Olx0XHRjb25zdCBjaGFyICp3aGF0O1xuNjAwMDpcdFx0aW50IGVycjtcbjYwMDE6XHRcbjYwMDI6XHRcdHB0cF9vY3BfZGVidWdmc19pbml0KCk7XG42MDAzOlx0XG42MDA0Olx0XHR3aGF0ID0gXCYjMzQ7dGltZWNhcmQgY2xhc3NcJiMzNDs7XG42MDA1Olx0XHRlcnIgPSBjbGFzc19yZWdpc3RlcihcdTAwMjZ0aW1lY2FyZF9jbGFzcyk7XG42MDA2Olx0XHRpZiAoZXJyKVxuNjAwNzpcdFx0XHRnb3RvIG91dDtcbjYwMDg6XHRcbjYwMDk6XHRcdHdoYXQgPSBcJiMzNDtpMmMgbm90aWZpZXJcJiMzNDs7XG42MDEwOlx0XHRlcnIgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2aTJjX2J1c190eXBlLCBcdTAwMjZwdHBfb2NwX2kyY19ub3RpZmllcik7XG42MDExOlx0XHRpZiAoZXJyKVxuNjAxMjpcdFx0XHRnb3RvIG91dF9ub3RpZmllcjtcbjYwMTM6XHRcbjYwMTQ6XHRcdHdoYXQgPSBcJiMzNDtwdHBfb2NwIGRyaXZlclwmIzM0OztcbjYwMTU6XHRcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2cHRwX29jcF9kcml2ZXIpO1xuNjAxNjpcdFx0aWYgKGVycilcbjYwMTc6XHRcdFx0Z290byBvdXRfcmVnaXN0ZXI7XG42MDE4Olx0XG42MDE5Olx0XHRyZXR1cm4gMDtcbjYwMjA6XHRcbjYwMjE6XHRvdXRfcmVnaXN0ZXI6XG42MDIyOlx0XHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZpMmNfYnVzX3R5cGUsIFx1MDAyNnB0cF9vY3BfaTJjX25vdGlmaWVyKTtcbjYwMjM6XHRvdXRfbm90aWZpZXI6XG42MDI0Olx0XHRjbGFzc191bnJlZ2lzdGVyKFx1MDAyNnRpbWVjYXJkX2NsYXNzKTtcbjYwMjU6XHRvdXQ6XG42MDI2Olx0XHRwdHBfb2NwX2RlYnVnZnNfZmluaSgpO1xuNjAyNzpcdFx0cHJfZXJyKEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogZmFpbGVkIHRvIHJlZ2lzdGVyICVzOiAlZFxcblwmIzM0Oywgd2hhdCwgZXJyKTtcbjYwMjg6XHRcdHJldHVybiBlcnI7XG42MDI5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU0NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFEVkEgeDEgVEFQIEJvYXJkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwdHBfb2NwX2RyaXZlcmAuIEl0JiMzOTtzIGRlZmluZWQgYXMgYSBzdGFuZGFyZCBgc3RydWN0IHBjaV9kcml2ZXJgLCBub3RoaW5nIGdyb3VuZGJyZWFraW5nIHRoZXJlLiBUaGUgaW50ZXJlc3RpbmcgYml0LCBhcyBhbHdheXMsIGlzIGhvdyBpdCBwcm9iZXMuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElEcywgcmlnaHQ/IEFuZCBJIHNlZSB0aGUgdGFibGU6IGBwdHBfb2NwX3BjaWRldl9pZGAuCgpSaWdodCwgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEFEVkEgeDEgVEFQIGJvYXJkcyAoYFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRF9YMSwgJmFtcDtvY3BfYWR2YV94MV9yZXNvdXJjZSlgKS4gVGhlc2UgYXJlIGFjdHVhbCBQQ0llIGNhcmRzIHdpdGggdGhlIFBDSSBJRCAweGFkNWE6MHgwNDEwLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBmdW5jdGlvbnMgcmVsYXRlIHRvIENQTEQgZmxhc2ggdXBkYXRlcyBhbmQgcmVhZGluZyBpdHMgc3RhdHVzIG9uICp0aG9zZSogYm9hcmRzOiBgYWR2YV94MV9jcGxkX2ZsYXNoYCwgYGFkdmFfeDFfY3BsZF9yZWFkX2lkYCwgcGx1cyB0aGUgc3lzZnMgYXR0cmlidXRlIGBjcGxkX3N0YXR1c2AuIEl0JiMzOTtzIGFkZGluZyBkZXZsaW5rIHN1cHBvcnQgZm9yIGZsYXNoaW5nIGFuZCBpbmZvcm1hdGlvbiByZXRyaWV2YWwsIGluY2x1ZGluZyBgcHRwX29jcF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAsIGBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXRgLCBhbmQgYHB0cF9vY3Bfc3luY193b3JrYC4gVGhlcmUgYXJlIGFsc28gc29tZSBlcnJvciBmaXhlcyBpbiBgcHRwX29jcF9wcm9iZWAgLyBgcHRwX29jcF9kZXRhY2hgLCBhcyB3ZWxsIGFzIG11dGV4IGluaXRpYWxpemF0aW9uLgoKTm93LCBob2xkIG9uLi4uIHRoYXQgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgIGZ1bmN0aW9uLiBJdCAqcmVnaXN0ZXJzKiBhbiBJMkMgYWRhcHRlci4gSSB3b25kZXIsIGRvZXMgaXQgbWF0Y2ggYW4gSTJDIGFkYXB0ZXIganVzdCBmb3IgdGhlc2UgVEFQIGJvYXJkcywgb3IgY291bGQgaXQgcG90ZW50aWFsbHkgYmUgaW52b2tlZCBvbiBvdGhlciBJMkMgYnVzIGV2ZW50cz8gSSBzaG91bGQgY2hlY2sgdGhlIGNvZGUgZm9yIHRoYXQuIEJldHRlciBsb29rIGF0IHRoZSBsaW5lcyA1OTQ2LTU5ODkgb2YgYHB0cF9vY3AuY2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBicm9hZCBidXMgbWF0Y2hpbmcgZ29pbmcgb24uIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGlzIEkyQyBub3RpZmllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU5NDU6XHRzdGF0aWMgaW50XG41OTQ2Olx0cHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuNTk0NzpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXG41OTQ4Olx0e1xuNTk0OTpcdFx0c3RydWN0IGRldmljZSAqZGV2LCAqY2hpbGQgPSBkYXRhO1xuNTk1MDpcdFx0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuNTk1MTpcdFx0c3RydWN0IHB0cF9vY3AgKmJwO1xuNTk1MjpcdFx0Ym9vbCBhZGQ7XG41OTUzOlx0XG41OTU0Olx0XHRzd2l0Y2ggKGFjdGlvbikge1xuNTk1NTpcdFx0Y2FzZSBCVVNfTk9USUZZX0FERF9ERVZJQ0U6XG41OTU2Olx0XHRjYXNlIEJVU19OT1RJRllfREVMX0RFVklDRTpcbjU5NTc6XHRcdFx0YWRkID0gYWN0aW9uID09IEJVU19OT1RJRllfQUREX0RFVklDRTtcbjU5NTg6XHRcdFx0YnJlYWs7XG41OTU5Olx0XHRkZWZhdWx0OlxuNTk2MDpcdFx0XHRyZXR1cm4gMDtcbjU5NjE6XHRcdH1cbjU5NjI6XHRcbjU5NjM6XHRcdGlmICghaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKSlcbjU5NjQ6XHRcdFx0cmV0dXJuIDA7XG41OTY1Olx0XG41OTY2Olx0XHRkZXYgPSBjaGlsZDtcbjU5Njc6XHRcdHdoaWxlICgoZGV2ID0gZGV2LVx1MDAzZXBhcmVudCkpXG41OTY4Olx0XHRcdGlmIChkZXYtXHUwMDNlZHJpdmVyIFx1MDAyNlx1MDAyNiAhc3RyY21wKGRldi1cdTAwM2Vkcml2ZXItXHUwMDNlbmFtZSwgS0JVSUxEX01PRE5BTUUpKVxuNTk2OTpcdFx0XHRcdGdvdG8gZm91bmQ7XG41OTcwOlx0XHRyZXR1cm4gMDtcbjU5NzE6XHRcbjU5NzI6XHRmb3VuZDpcbjU5NzM6XHRcdGJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG41OTc0Olx0XHRhZGFwID0gaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKTtcbjU5NzU6XHRcdGlmIChhZGQpIHtcbjU5NzY6XHRcdFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXCYjMzQ7aTJjXCYjMzQ7KTtcbjU5Nzc6XHRcdFx0LyogT25seSB0aGUgY2FyZCYjMzk7cyBvd24gY29udHJvbGxlcjogYSBtdXggY2hpbGQgYWRkZWQgb24gaXRcbjU5Nzg6XHRcdFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXG41OTc5Olx0XHRcdCAqIHJlY3ljbGVkLCBzbyB0aGUgY2xhaW0gcmUtY2hlY2tzIHRoZSBwYXJlbnQgaXRzZWxmLlxuNTk4MDpcdFx0XHQgKi9cbjU5ODE6XHRcdFx0aWYgKGJwLVx1MDAzZWkyY19jdHJsIFx1MDAyNlx1MDAyNiBhZGFwLVx1MDAzZWRldi5wYXJlbnQgPT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KVxuNTk4MjpcdFx0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgYWRhcC1cdTAwM2Vucik7XG41OTgzOlx0XHR9IGVsc2Uge1xuNTk4NDpcdFx0XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXG41OTg1Olx0XHRcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikgPT0gYWRhcC1cdTAwM2VucilcbjU5ODY6XHRcdFx0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIC0xKTtcbjU5ODc6XHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwmIzM0O2kyY1wmIzM0Oyk7XG41OTg4Olx0XHR9XG41OTg5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gVGhlIGNvbW1lbnQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBJMkMgZGV2aWNlIGlzIGFkZGVkIG9yIHJlbW92ZWQuIEludGVyZXN0aW5nLiBTbywgaXQmIzM5O3MgYSBob3RwbHVnIG5vdGlmaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2suIEl0IHN0YXJ0cyBieSB0cmF2ZXJzaW5nIHRoZSBkZXZpY2UgaGllcmFyY2h5IHVwd2FyZHMgZnJvbSB0aGUgY2hpbGQgZGV2aWNlIChgZGV2ID0gY2hpbGRgKSBhbmQgbG9va3MgZm9yIGEgcGFyZW50IHRoYXQgaGFzIGEgZHJpdmVyIG5hbWVkICYjMzQ7cHRwX29jcC4mIzM0OyBUaGUgbG9vcCBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyB3ZSYjMzk7cmUgdHJhY2luZyBiYWNrIHRoZSBkZXZpY2UmIzM5O3MgYW5jZXN0cnkgdG8gc2VlIGlmIGl0JiMzOTtzIGNvbm5lY3RlZCB0byBzb21ldGhpbmcgcmVsZXZhbnQuIFRoZSBgc3RyY21wYCBpcyBob3cgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIG5hbWUsIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIHNvIHRoZSBjb2RlIGp1bXBzIHRvIGBmb3VuZGAgaWYgdGhhdCBkcml2ZXIgZXhpc3RzLiBBbmQgaWYgaXQgZG9lc24mIzM5O3QgZmluZCBhIGBwdHBfb2NwYCBkcml2ZXIgYXR0YWNoZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDAuCgpXYWl0IGEgc2Vjb25k4oCmIElmIG5vIGBwdHBfb2NwYCBwYXJlbnQgaXMgZm91bmQsIGl0IHJldHVybnMgd2l0aG91dCBkb2luZyBhbnl0aGluZz8gVGhhdCBzZWVtc+KApiByZXN0cmljdGl2ZS4gSXQgc2VlbXMgdG8gc3VnZ2VzdCB0aGlzIHdob2xlIGZ1bmN0aW9uIGlzIG9ubHkgcmVsZXZhbnQgaWYgYSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIGEgYHB0cF9vY3BgIGRldmljZS4gQW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBgcHRwX29jcGAgaXMgb25seSBpbnN0YW50aWF0ZWQgaWYgaXQgcHJvYmVzIHdpdGggYSBQQ0kgSUQgaW4gdGhhdCBgcHRwX29jcF9wY2lkZXZfaWRgIGFycmF5LgoKU28gaGVyZSYjMzk7cyB0aGUgcXVlc3Rpb246IGluIGEgUUVNVSBlbnZpcm9ubWVudCwgaXMgdGhlcmUgKmFueSogdmlydHVhbCBidXMgb3IgZW11bGF0aW9uIHRoYXQgKmNhbiogYWN0dWFsbHkgaW5zdGFudGlhdGUgdGhlIGBwdHBfb2NwYCBkZXZpY2U/IEkmIzM5O20gZHJhd2luZyBhIGJsYW5rIHJpZ2h0IG5vdy4gSXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBibGluZCBzcG90IGluIG15IHNldHVwLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGVyZSYjMzk7cyBldmVuIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBub3RpZmljYXRpb24gaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHRoaW5rIEkmIzM5O2xsIGxvb2sgYXJvdW5kIGluIHRoZSBrZXJuZWwgdHJlZSBmb3Igb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGBwdHBfb2NwYCBkZXZpY2VzIGFyZSBjcmVhdGVkLiBJdCBtaWdodCBvZmZlciBzb21lIGluc2lnaHQgaW50byBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBvciBhbHRlcm5hdGUgaW5zdGFudGlhdGlvbiBtZXRob2RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcJiMzNDtwdHBfb2NwXCYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9vY3AuYz0yMjY5PV9fcHRwX29jcF9nZXRfbWVtKHN0cnVjdCBwdHBfb2NwICpicCwgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBpbnQgc2l6ZSlcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yMjcwLXtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyMjcxOlx0c3RydWN0IHJlc291cmNlIHJlcyA9IERFRklORV9SRVNfTUVNX05BTUVEKHN0YXJ0LCBzaXplLCBcJiMzNDtwdHBfb2NwXCYjMzQ7KTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yMjcyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIzMAoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA5NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiAmIzM0O3B0cF9vY3AmIzM0OyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IHJldmVhbCBhbnkgcmVkIGZsYWdzLiBCdXQsIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgJiMzNDtwdHBfb2NwJiMzNDsgaXNuJiMzOTt0IGJpbmRpbmcgYW55dGhpbmcgc3BlY2lmaWMgaW4gbXkgbWVudGFsIG1vZGVsLCBzbyBJIHdlbnQgZGVlcGVyLiAgSSBxdWlja2x5IHJlZmVyZW5jZWQgdGhlIFBDSSB2ZW5kb3IgSURzLCB0aGUgTUVUQSwgQURWQSwgQ0VMRVNUSUNBLCBhbmQgT1JPTElBIElEcywgYWxsIG9mIHdoaWNoIGFyZSBhIG5vbi1lbXVsYXRlZCBieSBRRU1VIGFuZCBHQ0UsIGEgY29tbW9uIGluZGljYXRvciBvZiBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuCgpUaGUgZGVjaXNpdmUgZmFjdG9yIGlzIHRoZSBjcml0aWNhbCBzZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucy4gVGhpcyBzZWN0aW9uIGRlZmluZXMgd2hlbiBhIHBhdGNoIHNob3VsZCAqbm90KiBiZSBmdXp6ZWQgKFdvcnRoRnV6emluZz1mYWxzZSkuIEkgbWV0aWN1bG91c2x5IHJlYWQgdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBJdCBjbGVhcmx5IHN0YXRlcyB0aGF0IHZlbmRvci1zcGVjaWZpYyBQQ0llIGRldmljZXMgdGhhdCBhcmVuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgYXJlIGV4Y2x1ZGVkLiAgVGhpcyBkaXJlY3RseSBoaXRzIGhvbWU6IHNwZWNpZmljYWxseSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4gSSBrbm93IHRoaXMgdmVyeSB3ZWxsIQoKU2VjdGlvbiAxIHJlaW5mb3JjZXMgdGhpcy4gUmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudC4gSWYgY29kZSBjYW4mIzM5O3QgZXhlY3V0ZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nLiBObyBtYXR0ZXIgaG93IGNsZXZlciBvciBjb21wbGV4LCBpZiBpdCYjMzk7cyBub3QgKnJlYWNoYWJsZSosIGl0JiMzOTtzIG5vdCBmdXp6ZWQuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBwYXRjaCBjb250ZW50LiBJIG5lZWQgdG8gYmUgZXhhY3QuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW46CgoxLiAgYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRgCjIuICBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0YAozLiAgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0YAo0LiAgYE1BSU5UQUlORVJTYAo1LiAgYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2AKClRoZSBkb2N1bWVudGF0aW9uIGFuZCBgTUFJTlRBSU5FUlNgIGNoYW5nZXMgYXJlIHB1cmUgZG9jdW1lbnRhdGlvbi4gTm90IGV4ZWN1dGFibGUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGlzIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLiAgVGhpcyBpcyB0aGUgT3BlbkNvbXB1dGUgUFRQIGNsb2NrIFBDSWUgZHJpdmVyLiAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgZGVwZW5kcyBvbiBzcGVjaWZpYywgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgdGhlIEFEVkEgVGltZUNhcmQgWDEgUENJZSBjYXJkLiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUgb3IgR0NFLgoKVGh1cywgd2l0aG91dCB0aGUgKnBoeXNpY2FsKiBQQ0llIGRldmljZSwgdGhlIGBwdHBfb2NwX3Byb2JlKClgIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC4gTm8gYHB0cF9vY3BgIGluc3RhbmNlIGlzIGNyZWF0ZWQsIG5vIGRldmxpbmsgb3Igc3lzZnMgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuIEFsbCB0aGUgbW9kaWZpZWQgY29kZSBpbiB0aGlzIGRyaXZlciwgdGhlIG5ldyBhbmQgb2xkLCBpcyB1bnJlYWNoYWJsZSBieSBzeXprYWxsZXIuCgpJIGNvbmZpcm0gdGhlcmUgd2VyZSBubyB0b3VjaGVzIHRvIGNvcmUgb3IgZ2VuZXJpYyBzdWJzeXN0ZW0gY29kZS4gSnVzdCB0aGUgZHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBmdW5kYW1lbnRhbGx5ICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLgoKSGVuY2UsIGl0JiMzOTtzIGEgY2xlYXI6CgoqICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFsgXSoqCiogICAqKkZvY3VzU3ltYm9sczogXFsgXSoqCgpUaGUgcmVhc29uaW5nIGlzIHNpbXBsZSBhbmQgcHJlY2lzZTogdGhlIGNoYW5nZXMgaW52b2x2ZSBEb2N1bWVudGF0aW9uIGFuZCBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCwgYSBzcGVjaWFsaXplZCBQQ0llIHRpbWVjYXJkIGRyaXZlciAoTWV0YSAvIEFEVkEgVGltZUNhcmQgWDEpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoaXMgbWFrZXMgdGhlIGFmZmVjdGVkIGNvZGUgaW5hY2Nlc3NpYmxlIHRvIHN5emthbGxlciwgd2hpY2ggZGVwZW5kcyBvbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjc6MjAuNTAzOTI0OTcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NjA0MzAwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzoyMC41MDM5MjkxMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg5MzgyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3M2JlZTg4MTY4MWJiM2U1NTQwYTc0OGI1Y2VjZTViYjQwOGJjNzhkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDA3OjI3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNmRkY2E0NTJiYzYzMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbkBAIC0xMSw2ICsxMSwzNCBAQCBDb250YWN0OlxcdEpvbmF0aGFuIExlbW9uIFxcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cXHUwMDNlXFxuIERlc2NyaXB0aW9uOlxcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcXG4gXFx0XFx0cmVnaXN0ZXJlZC5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXFxuK0RhdGU6XFx0XFx0SnVseSAyMDI2XFxuK0NvbnRhY3Q6XFx0U2FnaSBNYWltb24gXFx1MDAzY21haW1vbi5zYWdpQGdtYWlsLmNvbVxcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0KFJPLCByb290IG9ubHkpIFRoZSBmbGFncyBzZXQgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBvZiB0aGVcXG4rXFx0XFx0VEFQIENQTEQsIHNwYWNlIHNlcGFyYXRlZCwgb3IgYW4gZW1wdHkgbGluZSB3aGVuIG5vbmUgaXNcXG4rXFx0XFx0c2V0LiAgT25seSBwcmVzZW50IG9uIEFEVkEgeDEgVEFQIGJvYXJkcyAoUENJIElEXFxuK1xcdFxcdDB4YWQ1YToweDA0MTApLlxcbitcXG4rXFx0XFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdFxcdGRvbmUgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBwcm9ncmFtbWVkXFxuK1xcdFxcdFxcdCAgICBzdWNjZXNzZnVsbHkgYW5kIGlzIGFjdGl2ZVxcbitcXHRcXHRidXN5ICAgICAgICBhbiBpbnRlcm5hbCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3NcXG4rXFx0XFx0ZmFpbGVkICAgICAgdGhlIGxhc3QgSVNDIG9wZXJhdGlvbiBmYWlsZWRcXG4rXFx0XFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitcXHRcXHRGb3IgZXhhbXBsZSBcXFwiYnVzeVxcXCIgd2hpbGUgcHJvZ3JhbW1pbmcsIG9yIFxcXCJidXN5IGZhaWxlZFxcXCIgaWYgYVxcbitcXHRcXHRmYWlsdXJlIGlzIGxhdGNoZWQgd2hpbGUgYW5vdGhlciBvcGVyYXRpb24gcnVucy5cXG4rXFxuK1xcdFxcdEEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlXFxuK1xcdFxcdG9uLWNhcmQgbXV4LCBzbyBpdCBpcyByZXN0cmljdGVkIHRvIHJvb3QuICBUaGUgTGF0dGljZSBkZXZpY2VcXG4rXFx0XFx0SUQgb2YgdGhlIENQTEQgaXMgcmVhZCBvbmNlIGJ5IHRoZSBkcml2ZXIsIHNob3J0bHkgYWZ0ZXJcXG4rXFx0XFx0cHJvYmUsIGFuZCByZXBvcnRlZCBmcm9tIHRoYXQgY2FjaGVkIHZhbHVlIGFzIHRoZSBmaXhlZFxcbitcXHRcXHRcXFwiY3BsZC5pZFxcXCIgdmVyc2lvbiBieSBkZXZsaW5rIGRldiBpbmZvLlxcbitcXG4rXFx0XFx0TmV3IENQTEQgZmlybXdhcmUgaXMgcHJvZ3JhbW1lZCB3aXRoIGRldmxpbmsgZGV2IGZsYXNoLFxcbitcXHRcXHRzZWxlY3RpbmcgdGhlIFxcXCJmdy5jcGxkXFxcIiBjb21wb25lbnQ7IHNlZVxcbitcXHRcXHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdC5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXFxuIERhdGU6XFx0XFx0U2VwdGVtYmVyIDIwMjFcXG4gQ29udGFjdDpcXHRKb25hdGhhbiBMZW1vbiBcXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcXG5pbmRleCBkNGE4M2ZkY2ZmN2ZlLi4xYWY3ODBjODExZWUyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbkBAIC05OSw2ICs5OSw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy5cXG4gICAgbmZwXFxuICAgIG9jdGVvbnR4MlxcbiAgICBwcmVzdGVyYVxcbisgICBwdHBfb2NwXFxuICAgIHFlZFxcbiAgICBzZmNcXG4gICAgc3RtbWFjXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3RcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM3ZTlmMWViZDFhODFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3RcXG5AQCAtMCwwICsxLDcwIEBAXFxuKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbis9PT09PT09PT09PT09PT09PT09PT09PT1cXG4rcHRwX29jcCBkZXZsaW5rIHN1cHBvcnRcXG4rPT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGV2bGluayBmZWF0dXJlcyBpbXBsZW1lbnRlZCBieSB0aGUgYGBwdHBfb2NwYGBcXG4rZGV2aWNlIGRyaXZlcjogdGhlIGluZm8gdmVyc2lvbnMgaXQgcmVwb3J0cyBhbmQgaXRzIGZsYXNoIHVwZGF0ZSBzdXBwb3J0LlxcbitcXG4rSW5mbyB2ZXJzaW9uc1xcbis9PT09PT09PT09PT09XFxuK1xcbitUaGUgYGBwdHBfb2NwYGAgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyB2ZXJzaW9uc1xcbitcXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZFxcbisgICA6d2lkdGhzOiA1IDUgOTBcXG4rXFxuKyAgICogLSBOYW1lXFxuKyAgICAgLSBUeXBlXFxuKyAgICAgLSBEZXNjcmlwdGlvblxcbisgICAqIC0gYGBmd2BgXFxuKyAgICAgLSBydW5uaW5nXFxuKyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBjYXJkLiAgUmVwb3J0ZWQgYXMgYGBsb2FkZXJgYFxcbisgICAgICAgaW5zdGVhZCB3aGVuIHRoZSBjYXJkIGlzIHJ1bm5pbmcgdGhlIGZpcm13YXJlIGxvYWRlci5cXG4rICAgKiAtIGBgYm9hcmQuaWRgYFxcbisgICAgIC0gZml4ZWRcXG4rICAgICAtIEJvYXJkIGlkZW50aWZpZXIsIHJlYWQgZnJvbSB0aGUgb24tY2FyZCBFRVBST00uXFxuKyAgICogLSBgYGNwbGQuaWRgYFxcbisgICAgIC0gZml4ZWRcXG4rICAgICAtIExhdHRpY2UgZGV2aWNlIElEIChJRENPREUpIG9mIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzIGBgMHglMDh4YGAuXFxuKyAgICAgICBPbmx5IHByZXNlbnQgb24gQURWQSBUaW1lQ2FyZCBYMSBib2FyZHMsIHdoaWNoIGFyZSB0aGUgb25seSBvbmVzXFxuKyAgICAgICBjYXJyeWluZyB0aGF0IENQTEQuICBSZWFkaW5nIGl0IGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgYW5kXFxuKyAgICAgICByZXByb2dyYW1zIHRoZSBvbi1jYXJkIG11eCwgc28gdGhlIGRyaXZlciBkb2VzIHRoYXQgb25jZSBmcm9tIGl0c1xcbisgICAgICAgb3duIHdvcmtlciBhbmQgcmVwb3J0cyB0aGUgY2FjaGVkIHZhbHVlIGhlcmU7IHRoZSB2ZXJzaW9uIGlzXFxuKyAgICAgICBvbWl0dGVkIHVudGlsIHRoYXQgcmVhZCBoYXMgc3VjY2VlZGVkLlxcbisgICAqIC0gYGBmdy5jcGxkYGBcXG4rICAgICAtIHJ1bm5pbmdcXG4rICAgICAtIFVTRVJDT0RFIG9mIHRoZSBpbWFnZSBwcm9ncmFtbWVkIGludG8gdGhlIFRBUCBDUExELCBmb3JtYXR0ZWQgYXNcXG4rICAgICAgIGBgMHglMDh4YGAuICBSZWFkIHRvZ2V0aGVyIHdpdGggYGBjcGxkLmlkYGAgYW5kIHJlcG9ydGVkIHRoZSBzYW1lXFxuKyAgICAgICB3YXkuICBUaGlzIGlzIHRoZSBjb21wb25lbnQgbmFtZSB0byBwYXNzIHRvIGBgZGV2bGluayBkZXYgZmxhc2hgYFxcbisgICAgICAgdG8gdXBkYXRlIHRoZSBDUExELlxcbitcXG4rRmxhc2ggdXBkYXRlXFxuKz09PT09PT09PT09PVxcbitcXG4rVGhlIGRyaXZlciBpbXBsZW1lbnRzIGBgZGV2bGluayBkZXYgZmxhc2hgYCBmb3IgdHdvIHNlcGFyYXRlIHRhcmdldHMsXFxuK3NlbGVjdGVkIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lLlxcbitcXG4rLi4gbGlzdC10YWJsZTo6IEZsYXNoIGNvbXBvbmVudHNcXG4rICAgOndpZHRoczogMjAgODBcXG4rXFxuKyAgICogLSBDb21wb25lbnRcXG4rICAgICAtIERlc2NyaXB0aW9uXFxuKyAgICogLSAobm9uZSlcXG4rICAgICAtIFRoZSBjYXJkJ3Mgb3duIGZsYXNoLCB3cml0dGVuIHRocm91Z2ggdGhlIFNQSSBjb250cm9sbGVyIHRoZSBkcml2ZXJcXG4rICAgICAgIGV4cG9zZXMuICBUaGUgY2FyZCBydW5zIHRoZSBuZXcgaW1hZ2UgYWZ0ZXIgaXRzIG5leHQgcmVzZXQuXFxuKyAgICogLSBgYGZ3LmNwbGRgYFxcbisgICAgIC0gVGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggb2YgdGhlIFRBUCBDUExEIG9uIEFEVkEgVGltZUNhcmQgWDEgYm9hcmRzLFxcbisgICAgICAgcHJvZ3JhbW1lZCBvdmVyIEkyQyB3aXRoIHRoZSBNYWNoWE8zIGluLXN5c3RlbSBwcm9ncmFtbWluZyBjb21tYW5kc1xcbisgICAgICAgYW5kIGFjdGl2YXRlZCB3aXRoIGEgUkVGUkVTSCwgc28gdGhlIG5ldyBpbWFnZSBydW5zIGltbWVkaWF0ZWx5LlxcbisgICAgICAgVGhlIGltYWdlIGlzIHRoZSByYXcgY29uZmlndXJhdGlvbiBiaXRzdHJlYW0sIGEgd2hvbGUgbnVtYmVyIG9mXFxuKyAgICAgICAxNi1ieXRlIHBhZ2VzOyBjb250YWluZXIgZm9ybWF0cyBzdWNoIGFzIGBgLmplZGBgIGFyZSByZWplY3RlZC5cXG4rXFxuK1Byb2dyYW1taW5nIHRoZSBDUExEIGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgZm9yIHRoZSB3aG9sZSBjeWNsZSwgc29cXG4rcmVhZHMgb2YgdGhlIGNhcmQncyBFRVBST00gYmxvY2sgdW50aWwgaXQgY29tcGxldGVzLiAgUHJvZ3Jlc3MgaXMgcmVwb3J0ZWRcXG4rd2l0aCB0aGUgc3RhbmRhcmQgZGV2bGluayBzdGF0dXMgbm90aWZpY2F0aW9ucy5cXG4rXFxuK0V4YW1wbGU6OlxcbitcXG4rICAgICQgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6MDI6MDAuMCBmaWxlIGFkdmEtY3BsZC5iaW4gY29tcG9uZW50IGZ3LmNwbGRcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDBlMDRkOTJkMWIwOTguLjExM2YzMTQzNDYxNzcgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0yMDQ3OSw2ICsyMDQ3OSw3IEBAIE9QRU5DT01QVVRFIFBUUCBDTE9DSyBEUklWRVJcXG4gTTpcXHRWYWRpbSBGZWRvcmVua28gXFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxcbiBGOlxcdGRyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbiBcXG4gT1BFTkNPUkVTIEkyQyBCVVMgRFJJVkVSXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbmluZGV4IDNkMjZlYzFmN2I5ZWMuLjU4YjkwYjJiMjgyZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuKysrIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuQEAgLTIwLDEwICsyMCwxNCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpL2FsdGVyYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdGQvbXRkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMTYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RwbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFxcdFxcdDB4MDQwMFxcbiBcXG5AQCAtODUsNiArODksOCBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8ge1xcbiBcXHR1OFxcdFxcdFxcdFxcdHNpZ25hbHNfbnI7XFxuIFxcdHU4XFx0XFx0XFx0XFx0ZnJlcV9pbl9ucjtcXG4gXFx0Y29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwXFx0KmF0dHJfZ3JvdXBzO1xcbitcXHQvKiB4MTogVEFQIENQTEQgcHJlc2VudCAqL1xcbitcXHRib29sXFx0XFx0XFx0XFx0aGFzX2NwbGQ7XFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVxcdFxcdEJJVCgwKVxcbkBAIC0xNjMsNyArMTY5LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcXG4gXFx0dTMyXFx0Z3BpbzE7XFxuIFxcdHUzMlxcdF9fcGFkMDtcXG4gXFx0dTMyXFx0Z3BpbzI7XFxuLVxcdHUzMlxcdF9fcGFkMTtcXG4rXFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuK1xcdHUzMlxcdGkyY19idXNfY3RybDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xcbkBAIC00MTYsNiArNDIzLDI3IEBAIHN0cnVjdCBwdHBfb2NwIHtcXG4gXFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XFxuIFxcdGludCBzaWduYWxzX25yO1xcbiBcXHRpbnQgZnJlcV9pbl9ucjtcXG4rXFx0LyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovXFxuK1xcdC8qIHNlcmlhbGlzZXMgQ1BMRCBvcGVyYXRpb25zICovXFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGNwbGRfbG9jaztcXG4rXFx0LyogSTJDIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xcbitcXHRpbnRcXHRcXHRcXHRjcGxkX2kyY19hZGFwX25yO1xcbitcXHQvKiBjbGFpbWVkIGFkYXB0ZXI7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXJcXHQqY3BsZF9hZGFwO1xcbitcXHQvKiBzY3JhdGNoLCB3cml0ZSBoYWxmIHRoZW4gcmVhZCBoYWxmOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cXG4rXFx0dThcXHRcXHRcXHQqY3BsZF9idWY7XFxuK1xcdC8qIExhdHRpY2UgZGV2aWNlIElEOyAwIGlmIHVucmVhZCAqL1xcbitcXHR1MzJcXHRcXHRcXHRjcGxkX2lkO1xcbitcXHQvKiBVU0VSQ09ERSBvZiB0aGUgcHJvZ3JhbW1lZCBpbWFnZTsgdmFsaWQgb25jZSBjcGxkX2lkIGlzIHNldCAqL1xcbitcXHR1MzJcXHRcXHRcXHRjcGxkX3VzZXJjb2RlO1xcbitcXHQvKiB0aGUgb25lLXNob3QgSUQgcmVhZCBpcyBmaW5pc2hlZCwgc3VjY2Vzc2Z1bGx5IG9yIG5vdCAqL1xcbitcXHRib29sXFx0XFx0XFx0Y3BsZF9pZF90cmllZDtcXG4rXFx0LyogZmFpbGVkIElEIHJlYWQgYXR0ZW1wdHMgc28gZmFyICovXFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGNwbGRfaWRfYXR0ZW1wdHM7XFxuK1xcdC8qIHgxIFRBUCBDUExEIHByZXNlbnQgKi9cXG4rXFx0Ym9vbFxcdFxcdFxcdGhhc19jcGxkO1xcbitcXHQvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gnZCAqL1xcbitcXHRib29sXFx0XFx0XFx0Y3BsZF9pbl9jb25maWdfbW9kZTtcXG4gfTtcXG4gXFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcXHRCSVQoMClcXG5AQCAtNDUyLDYgKzQ4MCwxMyBAQCBzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV9zbWFfb3A7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XFxuIFxcbisvKiBGbGFzaCBjb21wb25lbnQgbmFtaW5nIHRoZSBDUExEIGltYWdlLCBhcyByZXBvcnRlZCBieSAtXFx1MDAzZWluZm9fZ2V0KCkuICovXFxuKyNkZWZpbmUgQURWQV9DUExEX0NPTVBPTkVOVFxcdFxcXCJmdy5jcGxkXFxcIlxcbitcXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfZmxhc2goc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXTtcXG5AQCAtMTI3Myw2ICsxMzA4LDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcXG4gXFx0XFx0XFx0LnNpZ25hbHNfbnIgICA9IDQsXFxuIFxcdFxcdFxcdC5mcmVxX2luX25yICAgPSA0LFxcbiBcXHRcXHRcXHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXFxuK1xcdFxcdFxcdC5oYXNfY3BsZCAgICAgPSB0cnVlLFxcbiBcXHRcXHR9LFxcbiBcXHR9LFxcbiBcXHR7IH1cXG5AQCAtMjEzMyw2ICsyMTY5LDE3IEBAIHB0cF9vY3BfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdGNvbnN0IGNoYXIgKm1zZztcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHRpZiAoIWJwLVxcdTAwM2VoYXNfY3BsZCB8fFxcbitcXHRcXHQgICAgc3RyY21wKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50LCBBRFZBX0NQTERfQ09NUE9ORU5UKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwidW5zdXBwb3J0ZWQgZmxhc2ggY29tcG9uZW50XFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmV0dXJuIGFkdmFfeDFfY3BsZF9mbGFzaChicCwgZGV2bGluaywgcGFyYW1zLVxcdTAwM2VmdywgZXh0YWNrKTtcXG4rXFx0fVxcbitcXG4gXFx0ZGV2ID0gcHRwX29jcF9maW5kX2ZsYXNoKGJwKTtcXG4gXFx0aWYgKCFkZXYpIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2YnAtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbid0IGZpbmQgRmxhc2ggU1BJIGFkYXB0ZXJcXFxcblxcXCIpO1xcbkBAIC0yMTU1LDEwICsyMjAyLDEzIEBAIHN0YXRpYyBpbnRcXG4gcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiBcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGVudW0gZGV2bGlua19pbmZvX3ZlcnNpb25fdHlwZSB2ZXJfdHlwZSA9XFxuK1xcdFxcdFxcdFxcdFxcdERFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfQ09NUE9ORU5UO1xcbiBcXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XFxuIFxcdGNvbnN0IGNoYXIgKmZ3X2ltYWdlO1xcbiBcXHRjaGFyIGJ1ZlszMl07XFxuIFxcdGludCBlcnI7XFxuK1xcdHUzMiBpZDtcXG4gXFxuIFxcdGZ3X2ltYWdlID0gYnAtXFx1MDAzZWZ3X2xvYWRlciA/IFxcXCJsb2FkZXJcXFwiIDogXFxcImZ3XFxcIjtcXG4gXFx0c3ByaW50ZihidWYsIFxcXCIlZC4lZFxcXCIsIGJwLVxcdTAwM2Vmd190YWcsIGJwLVxcdTAwM2Vmd192ZXJzaW9uKTtcXG5AQCAtMjE2Niw2ICsyMjE2LDI4IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdC8qIFJlYWQgYnkgdGhlIHdvcmtlciwgbm90IGhlcmU6IHRoaXMgY29tbWFuZCBpcyB1bnByaXZpbGVnZWQgYW5kXFxuK1xcdCAqIHJlYWRpbmcgdGhlIElEIGNsYWltcyB0aGUgSTJDIGJ1cy4gIDAgbWVhbnMgdW5yZWFkIC0gc2tpcCBpdFxcbitcXHQgKiByYXRoZXIgdGhhbiBmYWlsLCBkZXZsaW5rIGRpc2NhcmRzIHRoZSB3aG9sZSByZXBseSBvbiBlcnJvci5cXG4rXFx0ICovXFxuK1xcdGlkID0gUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2lkKTtcXG4rXFx0aWYgKGJwLVxcdTAwM2VoYXNfY3BsZCBcXHUwMDI2XFx1MDAyNiBpZCkge1xcbitcXHRcXHRzcHJpbnRmKGJ1ZiwgXFxcIjB4JTA4eFxcXCIsIGlkKTtcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgXFxcImNwbGQuaWRcXFwiLCBidWYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0LyogVGhlIGZsYXNoYWJsZSBjb21wb25lbnQ6IG5hbWluZyBpdCBoZXJlIGlzIHdoYXQgbGV0c1xcbitcXHRcXHQgKiBcXFwiZGV2bGluayBkZXYgZmxhc2ggLi4uIGNvbXBvbmVudCBmdy5jcGxkXFxcIiB0aHJvdWdoLCBhcyB0aGVcXG4rXFx0XFx0ICogY29yZSBtYXRjaGVzIHRoZSBuYW1lIGFnYWluc3QgdGhlIHZlcnNpb25zIHJlcG9ydGVkIGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzcHJpbnRmKGJ1ZiwgXFxcIjB4JTA4eFxcXCIsIFJFQURfT05DRShicC1cXHUwMDNlY3BsZF91c2VyY29kZSkpO1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBcXFwiZncuY3BsZFxcXCIsIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdmVyX3R5cGUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWJwLVxcdTAwM2VoYXNfZWVwcm9tX2RhdGEpIHtcXG4gXFx0XFx0cHRwX29jcF9yZWFkX2VlcHJvbShicCk7XFxuIFxcdFxcdGlmICghYnAtXFx1MDAzZWhhc19lZXByb21fZGF0YSlcXG5AQCAtMzE5OSw2ICszMjcxLDggQEAgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRwdHBfb2NwX3NtYV9pbml0KGJwKTtcXG4gXFxuK1xcdGJwLVxcdTAwM2VoYXNfY3BsZCA9IGluZm8tXFx1MDAzZWhhc19jcGxkO1xcbitcXG4gXFx0cmV0dXJuIHB0cF9vY3BfaW5pdF9jbG9jayhicCwgXFx1MDAyNmluZm8tXFx1MDAzZXNlcnZvKTtcXG4gfVxcbiBcXG5AQCAtNDIyNiw2ICs0MzAwLDY0OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHtcXG4gXFx0eyB9LFxcbiB9O1xcbiBcXG4rLypcXG4rICogYWR2YV94MSBUQVAgQ1BMRCAoTGF0dGljZSBMQ01YTzNMRi0yMTAwKSBoZWxwZXJzLlxcbisgKlxcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cXG4rICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBpcyB3aXJlZCB0bzpcXG4rICpcXG4rICogICBncmFudCAwOiAgMHgxNTAwMDAgLVxcdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVxcdTAwM2UgVE1DIG9yIE0uMiwgTUIncyBjaG9pY2VcXG4rICogICBncmFudCAxOiAgMHgxNTAwMDAgLVxcdTAwM2UgVE1DIGJ1cyAgICAgMHgxMjAwMDAgLVxcdTAwM2UgTS4yXFxuKyAqXFxuKyAqIFRoZSBQQ0E5NTQ4IGF0IDB4NzQgYW5kIHRoZSBDUExEIGF0IDB4NDAgYmVoaW5kIGl0cyBjaGFubmVsIDAgYXJlIG9uIHRoZVxcbisgKiBUTUMgYnVzLCByZWFjaGFibGUgb25seSB3aGlsZSB0aGUgZ3JhbnQgaXMgaGVsZC4gIFRoZSBFRVBST01zIGFyZSBub3RcXG4rICogYmVoaW5kIHRoZSBhZGFwdGVyIGZvciB0aGF0IHdpbmRvdywgc28gYSBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2tcXG4rICogYW5kIHRoZSBhZGFwdGVyIGxvY2sgdG8ga2VlcCB0aGUgRUVQUk9NIGFuZCBudm1lbSBwYXRocyBvZmYgaXQuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBBRFZBX01VWF9BRERSICAgICAweDc0XFxuKyNkZWZpbmUgQURWQV9DUExEX0FERFIgICAgMHg0MFxcbisjZGVmaW5lIEFEVkFfTVVYX0NIQU5ORUwgIDBcXG4rXFxuKy8qIExvbmdlc3QgY29tbWFuZCBvciByZXBseTsgYm91bmRzIGVhY2ggaGFsZiBvZiB0aGUgcGVyLWNsYWltIHNjcmF0Y2guICovXFxuKyNkZWZpbmUgQURWQV9DUExEX1hGRVJfTUFYIDMyXFxuK1xcbisjZGVmaW5lIE1CTEFaRV9SRVFVRVNUICAgIDB4MDAwMGFhYWFVXFxuKyNkZWZpbmUgTUJMQVpFX0dSQU5URUQgICAgMHg1NTU1YWFhYVVcXG4rI2RlZmluZSBNQkxBWkVfUkVMRUFTRSAgICAweDU1NTUwMDAwVVxcbisjZGVmaW5lIE1CTEFaRV9SRVRSSUVTICAgIDIwMFxcbisjZGVmaW5lIE1CTEFaRV9SRVRSWV9VUyAgIDEwMDAwXFxuK1xcbisvKiBMYXR0aWNlIExDTVhPM0xGIElTQyBjb21tYW5kIGNvZGVzICovXFxuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9JRCAgICAgIDB4RTAwMDAwMDBVTFxcbisjZGVmaW5lIENQTERfQ01EX1JFQURfVVNFUkNPREUgMHhDMDAwMDAwMFVMXFxuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9TVEFUVVMgIDB4M0MwMDAwMDBVTFxcbisjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqL1xcbisjZGVmaW5lIENQTERfQ01EX0RJU19DRkcgICAgICAweDI2XFxuKyNkZWZpbmUgQ1BMRF9DTURfRVJBU0UgICAgICAgIDB4MEVcXG4rI2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NlxcbisjZGVmaW5lIENQTERfQ01EX1dSSVRFX1BBR0UgICAweDcwXFxuKyNkZWZpbmUgQ1BMRF9DTURfU0VUX0RPTkUgICAgIDB4NUVcXG4rI2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OVxcbisjZGVmaW5lIENQTERfUEFHRV9TSVpFICAgICAgICAxNlxcbisjZGVmaW5lIENQTERfUE9MTF9VUyAgICAgICAgICAxMDAwMCAgLyogc3RhdHVzIHBvbGwgaW50ZXJ2YWwgd2hpbGUgYnVzeSAqL1xcbisjZGVmaW5lIENQTERfRVJBU0VfTVMgICAgICAgICAxNTAwMCAgLyogY29uZmlnIHNlY3RvciBlcmFzZSwgZGF0YXNoZWV0IG1heCAqL1xcbisjZGVmaW5lIENQTERfSURfTUFYX0FUVEVNUFRTICAxMCAgICAgLyogb25lIHBlciBzeW5jX3dvcmsgdGljayAqL1xcbitcXG4rLyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqL1xcbisjZGVmaW5lIENQTERfU1RBVFVTX0RPTkUgICBCSVQoOClcXG4rI2RlZmluZSBDUExEX1NUQVRVU19CVVNZICAgQklUKDEyKVxcbisjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpXFxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRVJSICAgIEdFTk1BU0soMjUsIDIzKVxcbitcXG4rLypcXG4rICogSXNzdWUgb25lIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1czogQGNtZCBpZiBub3QgbmVnYXRpdmUsIHRoZW5cXG4rICogQHdsZW4gYnl0ZXMgb2YgQHdkYXRhIChOVUxMIHNlbmRzIHplcm9zKSwgdGhlbiBAcmxlbiBieXRlcyByZWFkIGJhY2suXFxuKyAqIFRoZSBtZXNzYWdlIGlzIGJ1aWx0IGluIHRoZSBzY3JhdGNoIGJ1ZmZlciBmcm9tIGFkdmFfeDFfYnVzX2NsYWltKCksIHNvXFxuKyAqIGFuIHVwbG9hZCBjb3N0cyBvbmUgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBvbmUgcGVyIHBhZ2UuICBJMkNfTV9ETUFfU0FGRVxcbisgKiBpcyBub3Qgc2V0OiB0aGUgdHdvIGhhbHZlcyBhcmUgbm90IHNlcGFyYXRlbHkgYWxpZ25lZCwgc28gbGV0IHRoZSBjb3JlXFxuKyAqIGJvdW5jZS4gIENhbGxlciBob2xkcyB0aGUgY2xhaW0sIGhlbmNlIF9faTJjX3RyYW5zZmVyKCkuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfaTJjX3hmZXIoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBhZGRyLCBpbnQgY21kLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sXFxuK1xcdFxcdFxcdCAgICB2b2lkICpyZGF0YSwgdTggcmxlbilcXG4re1xcbitcXHR1OCAqd2J1ZiwgKnJidWY7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcXG4rXFx0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcXG4rXFx0aW50IG5tc2dzID0gMCwgcmV0O1xcbitcXHR1MTYgaGRyID0gY21kIFxcdTAwM2U9IDA7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFxuK1xcdGFkYXAgPSBicC1cXHUwMDNlY3BsZF9hZGFwO1xcbitcXHRpZiAoIWFkYXAgfHwgIWJwLVxcdTAwM2VjcGxkX2J1ZilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRpZiAoaGRyICsgd2xlbiBcXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWCB8fCBybGVuIFxcdTAwM2UgQURWQV9DUExEX1hGRVJfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHdidWYgPSBicC1cXHUwMDNlY3BsZF9idWY7XFxuK1xcdHJidWYgPSBicC1cXHUwMDNlY3BsZF9idWYgKyBBRFZBX0NQTERfWEZFUl9NQVg7XFxuK1xcbitcXHRpZiAoaGRyICsgd2xlbikge1xcbitcXHRcXHRpZiAoaGRyKVxcbitcXHRcXHRcXHR3YnVmWzBdID0gY21kO1xcbitcXHRcXHRpZiAod2RhdGEpXFxuK1xcdFxcdFxcdG1lbWNweSh3YnVmICsgaGRyLCB3ZGF0YSwgd2xlbik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWVtc2V0KHdidWYgKyBoZHIsIDAsIHdsZW4pO1xcbitcXHRcXHRtc2dzW25tc2dzKytdID0gKHN0cnVjdCBpMmNfbXNnKXtcXG4rXFx0XFx0XFx0LmFkZHIgID0gYWRkcixcXG4rXFx0XFx0XFx0LmZsYWdzID0gMCxcXG4rXFx0XFx0XFx0LmxlbiAgID0gaGRyICsgd2xlbixcXG4rXFx0XFx0XFx0LmJ1ZiAgID0gd2J1ZixcXG4rXFx0XFx0fTtcXG4rXFx0fVxcbitcXHRpZiAocmxlbikge1xcbitcXHRcXHRtc2dzW25tc2dzKytdID0gKHN0cnVjdCBpMmNfbXNnKXtcXG4rXFx0XFx0XFx0LmFkZHIgID0gYWRkcixcXG4rXFx0XFx0XFx0LmZsYWdzID0gSTJDX01fUkQsXFxuK1xcdFxcdFxcdC5sZW4gICA9IHJsZW4sXFxuK1xcdFxcdFxcdC5idWYgICA9IHJidWYsXFxuK1xcdFxcdH07XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcXG4rXFx0aWYgKHJldCAhPSBubXNncylcXG4rXFx0XFx0cmV0dXJuIChyZXQgXFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XFxuK1xcbitcXHRpZiAocmRhdGEgXFx1MDAyNlxcdTAwMjYgcmxlbilcXG4rXFx0XFx0bWVtY3B5KHJkYXRhLCByYnVmLCBybGVuKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBIYW5kIHRoZSBzZWdtZW50IGJhY2ssIGFuZCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gZHJvcCB0aGUgZ3JhbnQgYmVmb3JlXFxuKyAqIHRoZSBjYWxsZXIgdW5sb2NrcyB0aGUgYWRhcHRlcjogYSB0cmFuc2ZlciBxdWV1ZWQgYmVoaW5kIHVzIHdvdWxkXFxuKyAqIG90aGVyd2lzZSBiZSBjbG9ja2VkIG91dCB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBzdGlsbCBvbiB0aGUgVE1DIGJ1cyxcXG4rICogd2hpY2ggaXMgd2hhdCBob2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgYWNyb3NzIHRoZSBncmFudCBleGlzdHMgdG8gc3RvcC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGFkdmFfeDFfbWJsYXplX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcHBzX3NlbGVjdClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW93cml0ZTMyKE1CTEFaRV9SRUxFQVNFLCBcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCk7XFxuK1xcdC8qIEZsdXNoIHRoZSBwb3N0ZWQgd3JpdGUsIGFzIHRoZSBhY3F1aXJlIHBhdGggZG9lcy4gKi9cXG4rXFx0aW9yZWFkMzIoXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1CTEFaRV9SRVRSSUVTOyBpKyspIHtcXG4rXFx0XFx0aWYgKGlvcmVhZDMyKFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKSAhPSBNQkxBWkVfR1JBTlRFRClcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgKyAxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJUTUMgYnVzIHN0aWxsIGdyYW50ZWQgYWZ0ZXIgcmVsZWFzZVxcXFxuXFxcIik7XFxuK31cXG4rXFxuKy8qIEFjcXVpcmUgdGhlIHNoYXJlZCBJMkMgYnVzIGZyb20gdGhlIE1pY3JvQmxhemUgZmlybXdhcmUuICBSZXR1cm5zIHdpdGggbm9cXG4rICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhXFxuKyAqIHNlZ21lbnQgdG8gYSBob3N0IHRoYXQgaGFzIGdpdmVuIHVwIHdhaXRpbmcgZm9yIGl0LlxcbisgKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghYnAtXFx1MDAzZXBwc19zZWxlY3QpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0LyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2tcXG4rXFx0ICoga2VlcHMgbGl2ZSBvbmVzIG91dC4gIFRoZSByZWFkIGJhY2sgb25seSBmbHVzaGVzIHRoZSBwb3N0ZWQgd3JpdGUuXFxuK1xcdCAqL1xcbitcXHRpb3dyaXRlMzIoMCwgXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRpb3JlYWQzMihcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCk7XFxuK1xcbitcXHRpb3dyaXRlMzIoTUJMQVpFX1JFUVVFU1QsIFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1CTEFaRV9SRVRSSUVTOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICsgMTAwMCk7XFxuK1xcdFxcdHZhbCA9IGlvcmVhZDMyKFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rXFx0XFx0aWYgKHZhbCA9PSBNQkxBWkVfR1JBTlRFRClcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApO1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rLyogUm91dGUgdGhlIGhvc3QgY29udHJvbGxlciBiYWNrIHRvIHRoZSBFRVBST01zIGFuZCByZWxlYXNlIHRoZSBhZGFwdGVyLlxcbisgKiBTYWZlIGFmdGVyIGEgZmFpbGVkIGNsYWltOiBpdCBhbHNvIGNsZWFycyBhIHJlcXVlc3QgdGhhdCB3YXMgbmV2ZXIgZ3JhbnRlZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGFkdmFfeDFfYnVzX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLVxcdTAwM2VjcGxkX2FkYXA7XFxuK1xcbitcXHRpZiAoIWFkYXApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApO1xcbitcXHRicC1cXHUwMDNlY3BsZF9hZGFwID0gTlVMTDtcXG4rXFx0a2ZyZWUoYnAtXFx1MDAzZWNwbGRfYnVmKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfYnVmID0gTlVMTDtcXG4rXFx0aTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcXG4rXFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHJldHVybiAhIWkyY192ZXJpZnlfYWRhcHRlcihkZXYpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDYWNoZSB0aGUgYWRhcHRlciB0aGUgQ1BMRCBoYW5ncyBvZmYuICBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKCkgbWlzc2VzXFxuKyAqIGl0IHdoZW4gdGhlIGkyYyBjb250cm9sbGVyIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZDogdGhlIGFkYXB0ZXIgaXMgdGhlblxcbisgKiBhZGRlZCBmcm9tIGluc2lkZSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoKSwgYmVmb3JlIGJwLVxcdTAwM2VpMmNfY3RybCBpcyBzZXQuXFxuKyAqIE9ubHkgZGlyZWN0IGNoaWxkcmVuIGFyZSBzZWFyY2hlZCwgc28gYSBtdXggYWRhcHRlciBjYW5ub3QgbWF0Y2guXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhZHZhX3gxX2NhY2hlX2kyY19hZGFwKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpjaGlsZDtcXG4rXFxuK1xcdGlmICghYnAtXFx1MDAzZWhhc19jcGxkIHx8ICFicC1cXHUwMDNlaTJjX2N0cmwgfHxcXG4rXFx0ICAgIFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2YnAtXFx1MDAzZWkyY19jdHJsLVxcdTAwM2VkZXYsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgYWR2YV94MV9pMmNfYWRhcF9tYXRjaCk7XFxuK1xcdGlmICghY2hpbGQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXFx1MDAzZW5yKTtcXG4rXFx0cHV0X2RldmljZShjaGlsZCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENsYWltIHRoZSBUTUMgYnVzLiAgVGhlIGFkYXB0ZXIgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgaGFuZHNoYWtlIHRvIGtlZXBcXG4rICogdGhlIEVFUFJPTSwgbnZtZW0gYW5kIGF0MjQgcGF0aHMgb2ZmIHRoZSBjb250cm9sbGVyIHdoaWxlIGl0IGlzIHJvdXRlZFxcbisgKiBhd2F5IGZyb20gdGhlIEVFUFJPTXM7IGFuIEVFUFJPTSByZWFkIGJsb2NrcyB1bnRpbCB0aGUgY2xhaW0gaXMgZHJvcHBlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9idXNfY2xhaW0oc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0YWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcXG4rXFx0aWYgKCFhZGFwKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdC8qIFRoZSBudW1iZXIgaXMgZnJlZWQgYmVmb3JlIHRoZSBub3RpZmllciBjbGVhcnMgaXQsIHNvIGl0IGNhblxcbitcXHQgKiBhbHJlYWR5IGJlIGFub3RoZXIgYWRhcHRlcidzLiAgQ2hlY2sgdGhpcyBpcyBzdGlsbCBvdXJzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFicC1cXHUwMDNlaTJjX2N0cmwgfHwgYWRhcC1cXHUwMDNlZGV2LnBhcmVudCAhPSBcXHUwMDI2YnAtXFx1MDAzZWkyY19jdHJsLVxcdTAwM2VkZXYpIHtcXG4rXFx0XFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0LyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGFuIHVwbG9hZFxcbitcXHQgKiBob2xkcyB0aGUgY2xhaW0gZm9yIHRoZSB3aG9sZSBpbWFnZS5cXG4rXFx0ICovXFxuK1xcdGJwLVxcdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghYnAtXFx1MDAzZWNwbGRfYnVmKSB7XFxuK1xcdFxcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGkyY19sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xcbitcXHRicC1cXHUwMDNlY3BsZF9hZGFwID0gYWRhcDtcXG4rXFxuK1xcdHJldCA9IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoYnApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCBcXHUwMDNjIDAgLSB0aGUgcG93ZXItb24gc3RhdGUuXFxuKyAqIFRoZSBtdXggaXMgb24gdGhlIFRNQyBidXMsIHNvIHdoYXQgaXQgaXMgbGVmdCBzZXQgdG8gbmV2ZXIgYWZmZWN0cyB0aGVcXG4rICogRUVQUk9NIHBhdGhzLlxcbisgKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX211eF9zZWxlY3Qoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgY2gpXFxuK3tcXG4rXFx0dTggdmFsID0gKGNoIFxcdTAwM2U9IDApID8gQklUKGNoKSA6IDA7XFxuK1xcbitcXHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9NVVhfQUREUiwgdmFsLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogQXJndW1lbnQgYnl0ZXMgdGhhdCBmb2xsb3cgYW4gSVNDIG9wY29kZS4gIFJldHVybnMgTlVMTCB3aXRoIEBuYXJncyBzZXRcXG4rICogd2hlbiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgemVybzogYWR2YV94MV9pMmNfeGZlcigpIHplcm9lcyB0aGUgYnVmZmVyLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHU4ICphZHZhX3gxX2NwbGRfYXJncyh1OCBjbWQsIHU4ICpuYXJncylcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgdTggZW5fY2ZnX3RwW10gPSB7IDB4MDgsIDB4MDAgfTtcXG4rXFx0LyogY2ZnIHNlY3RvciBvbmx5ICovXFxuK1xcdHN0YXRpYyBjb25zdCB1OCBlcmFzZV9jZmdbXSA9IHsgMHgwNCwgMHgwMCwgMHgwMCB9O1xcbitcXG4rXFx0c3dpdGNoIChjbWQpIHtcXG4rXFx0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XFxuK1xcdFxcdCpuYXJncyA9IHNpemVvZihlbl9jZmdfdHApO1xcbitcXHRcXHRyZXR1cm4gZW5fY2ZnX3RwO1xcbitcXHRjYXNlIENQTERfQ01EX0VSQVNFOlxcbitcXHRcXHQqbmFyZ3MgPSBzaXplb2YoZXJhc2VfY2ZnKTtcXG4rXFx0XFx0cmV0dXJuIGVyYXNlX2NmZztcXG4rXFx0Y2FzZSBDUExEX0NNRF9SRVNFVF9BRERSOlxcbitcXHRjYXNlIENQTERfQ01EX1NFVF9ET05FOlxcbitcXHRcXHQqbmFyZ3MgPSAzO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0Y2FzZSBDUExEX0NNRF9ESVNfQ0ZHOlxcbitcXHRjYXNlIENQTERfQ01EX1JFRlJFU0g6XFxuK1xcdFxcdCpuYXJncyA9IDI7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQqbmFyZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBTZW5kIGFuIElTQyBjb21tYW5kIHdpdGggdGhlIGZpeGVkIGFyZ3VtZW50cyB0aGF0IGJlbG9uZyB0byBpdC4gKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXFxuK3tcXG4rXFx0Y29uc3QgdTggKmFyZ3M7XFxuK1xcdHU4IG5hcmdzO1xcbitcXG4rXFx0YXJncyA9IGFkdmFfeDFfY3BsZF9hcmdzKGNtZCwgXFx1MDAyNm5hcmdzKTtcXG4rXFxuK1xcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgY21kLCBhcmdzLCBuYXJncywgTlVMTCwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNlbmQgYSA0LWJ5dGUgY29tbWFuZCBhbmQgcmVhZCBiYWNrIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIFNUT1A6IHR3b1xcbisgKiBtZXNzYWdlcyBpbiBvbmUgdHJhbnNmZXIgaXMgdGhlIExhdHRpY2Ugd3JpdGUgLVxcdTAwM2UgcmVwZWF0ZWQgU1RBUlQgLVxcdTAwM2UgcmVhZCxcXG4rICogc28gbm8gcHJvdG9jb2wtbWFuZ2xpbmcgZmxhZyBpcyBuZWVkZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChzdHJ1Y3QgcHRwX29jcCAqYnAsXFxuK1xcdFxcdFxcdFxcdCB1MzIgY21kX2JlLCB1OCAqb3V0LCB1OCBvdXRfbGVuKVxcbit7XFxuK1xcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xcbitcXG4rXFx0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgXFx1MDAyNmNtZCwgNCwgb3V0LCBvdXRfbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKnN0YXR1cylcXG4re1xcbitcXHR1OCBidWZbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfU1RBVFVTLCBidWYsIDQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuXFxuKyAqIFRoZSBkZWFkbGluZSBpcyBvbiB3YWxsIHRpbWUsIHNvIHRoZSBJMkMgdHJhbnNhY3Rpb25zIGNvdW50IGFnYWluc3QgaXQsXFxuKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHJlYWQgb25jZSBtb3JlIGFmdGVyIGl0IGV4cGlyZXMgYmVmb3JlIGdpdmluZyB1cC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoc3RydWN0IHB0cF9vY3AgKmJwLCB1bnNpZ25lZCBpbnQgbWF4X21zKVxcbit7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHRpbnQgZXJyID0gMCwgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXFxuK1xcdFxcdFxcdFxcdGVyciB8fCAoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxcbitcXHRcXHRcXHRcXHQhKHN0YXR1cyBcXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxcbitcXHRcXHRcXHRcXHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRicCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIEtlZXAgdGhlIHRyYW5zcG9ydCBlcnJubyBzbyBpdCByZWFjaGVzIHVzZXJzcGFjZSBhcy1pczsgLUVJTyBpc1xcbitcXHQgKiByZXNlcnZlZCBmb3IgdGhlIENQTEQgaXRzZWxmIHJlcG9ydGluZyBGQUlMRUQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBXYWl0IGZvciBCVVNZIHRvIGNsZWFyLCBpZ25vcmluZyBhIHBlbmRpbmcgY2FuY2VsLiAgQW4gSVNDIGNvbW1hbmQgaXNzdWVkXFxuKyAqIHdoaWxlIHRoZSBwYXJ0IGlzIHN0aWxsIGVyYXNpbmcgb3IgcHJvZ3JhbW1pbmcgbWF5IG5vdCBsYXRjaCwgc28gYW4gYWJvcnRcXG4rICogaGFzIHRvIHdhaXQgdGhlIG9wZXJhdGlvbiBvdXQgYmVmb3JlIGl0IGNhbiBsZWF2ZSBjb25maWd1cmF0aW9uIG1vZGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF93YWl0X2lkbGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1bnNpZ25lZCBpbnQgbWF4X21zKVxcbit7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHRpbnQgZXJyID0gMCwgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXFxuK1xcdFxcdFxcdFxcdGVyciB8fCAhKHN0YXR1cyBcXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxcbitcXHRcXHRcXHRcXHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRicCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKiBMZWF2ZSB0cmFuc3BhcmVudCBjb25maWd1cmF0aW9uIG1vZGUuICBjcGxkX2luX2NvbmZpZ19tb2RlIHN0YXlzIHNldCB3aGVuXFxuKyAqIERJU19DRkcgZG9lcyBub3QgZ2V0IHRocm91Z2gsIHNvIGEgbGF0ZXIgY2xlYW51cCgpIHRyaWVzIGFnYWluIHJhdGhlciB0aGFuXFxuKyAqIHJlY29yZGluZyBhbiBleGl0IHRoYXQgbmV2ZXIgaGFwcGVuZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhZHZhX3gxX2NwbGRfZXhpdF9jb25maWcoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWJwLVxcdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhZHZhX3gxX2NwbGRfd2FpdF9pZGxlKGJwLCBDUExEX0VSQVNFX01TKTtcXG4rXFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGRldl93YXJuKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkNQTEQgbGVmdCBpbiBjb25maWd1cmF0aW9uIG1vZGU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGJwLVxcdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlYWQgdGhlIExhdHRpY2UgZGV2aWNlIElEIGFuZCB0aGUgaW1hZ2UgVVNFUkNPREUgdW5kZXIgb25lIGJ1cyBjbGFpbS5cXG4rICogRG9uZSBvbmNlLCBvZmYgdGhlIHVucHJpdmlsZWdlZCBkZXZsaW5rIHBhdGgsIHdoaWNoIHJlcG9ydHMgdGhlIGNhY2hlZFxcbisgKiB2YWx1ZXMuICAtRUJVU1kgbWVhbnMgY3BsZF9sb2NrIGlzIGhlbGQsIHNvIHRoZSBjYWxsZXIgY2FuIHJldHJ5IHJhdGhlclxcbisgKiB0aGFuIHdhaXQgYmVoaW5kIGEgbG9uZyBDUExEIG9wZXJhdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfaWQoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHUzMiBpZCwgdXNlcmNvZGU7XFxuK1xcdHU4IGRhdGFbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0cmV0ID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlO1xcbitcXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGRlc2VsZWN0O1xcbitcXHRpZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcXG4rXFxuK1xcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSwgZGF0YSwgNCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcdHVzZXJjb2RlID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xcbitcXG4rXFx0LyogY3BsZF9pZCBpcyB0aGUgdmFsaWRpdHkgZmxhZyBmb3IgYm90aCwgc28gcHVibGlzaCBpdCBsYXN0LiAqL1xcbitcXHRXUklURV9PTkNFKGJwLVxcdTAwM2VjcGxkX3VzZXJjb2RlLCB1c2VyY29kZSk7XFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaWQsIGlkKTtcXG4rZGVzZWxlY3Q6XFxuK1xcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xcbityZWxlYXNlOlxcbitcXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcXG4rb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZGJnKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiQ1BMRCBkZXZpY2UgSUQgdW5hdmFpbGFibGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi9cXG4rc3RhdGljIHNzaXplX3RcXG4rY3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHQgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRpbnQgY291bnQgPSAwO1xcbitcXHR1MzIgc3QgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovXFxuK1xcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlbGVhc2U7XFxuK1xcdHJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KTtcXG4rXFx0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XFxuK3JlbGVhc2U6XFxuK1xcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBGbGFnczogdGhlIG5hbWVzIG9mIHRoZSBiaXRzIHRoYXQgYXJlIHNldCwgbm90aGluZyB3aGVuIG5vbmUgaXMsXFxuK1xcdCAqIHJhdGhlciB0aGFuIGEgdmFsdWUgcGVyIGJpdCBpbiBvbmUgZmlsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChzdCBcXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpXFxuK1xcdFxcdGNvdW50ICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgXFxcImRvbmVcXFwiKTtcXG4rXFx0aWYgKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSlcXG4rXFx0XFx0Y291bnQgKz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcXFwiJXNidXN5XFxcIiwgY291bnQgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIik7XFxuK1xcdGlmIChzdCBcXHUwMDI2IENQTERfU1RBVFVTX0ZBSUxFRClcXG4rXFx0XFx0Y291bnQgKz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcXFwiJXNmYWlsZWRcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY291bnQgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gY291bnQgKyBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFxcXCJcXFxcblxcXCIpO1xcbit9XFxuK3N0YXRpYyBERVZJQ0VfQVRUUl9BRE1JTl9STyhjcGxkX3N0YXR1cyk7XFxuK1xcbisvKlxcbisgKiBQcm9ncmFtIHRoZSBDUExEIGNvbmZpZ3VyYXRpb24gZmxhc2ggZnJvbSBAZncgYW5kIGFjdGl2YXRlIGl0LiAgU2VsZWN0ZWRcXG4rICogYnkgdGhlIFxcXCJmdy5jcGxkXFxcIiBmbGFzaCBjb21wb25lbnQ7IHRoZSBTUEkgZmxhc2gga2VlcHMgdGhlIGRlZmF1bHQgcGF0aC5cXG4rICogUnVucyB1bmRlciBjcGxkX2xvY2sgd2l0aCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBoZWxkLCBzbyBhbiBFRVBST00gcmVhZFxcbisgKiBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9mbGFzaChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c2l6ZV90IG9mZnNldDtcXG4rXFx0aW50IGVycjtcXG4rXFx0dTMyIHN0O1xcbitcXG4rXFx0aWYgKCFmdy1cXHUwMDNlc2l6ZSB8fCBmdy1cXHUwMDNlc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJpbWFnZSBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIG9mIDE2LWJ5dGUgcGFnZXNcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0ZXJyID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0ZXJyID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byByZWxlYXNlO1xcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBFTl9DRkdfVFAsIG5vdCBhZnRlcjogdGhlIENQTEQgbWF5IGhhdmUgZW50ZXJlZCBjb25maWdcXG4rXFx0ICogbW9kZSBldmVuIGlmIHRoZSB3cml0ZSBlcnJvcnMgb3IgdGhlIHdhaXQgdGltZXMgb3V0LCBhbmQgb25seSB0aGlzXFxuK1xcdCAqIG1ha2VzIHRoZSBleGl0IHBhdGggc2VuZCBESVNfQ0ZHLiAgQSBzdHJheSBESVNfQ0ZHIGlzIGhhcm1sZXNzO1xcbitcXHQgKiBsZWF2aW5nIGNvbmZpZyBtb2RlIGVuYWJsZWQgaXMgbm90LlxcbitcXHQgKi9cXG4rXFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSB0cnVlO1xcbitcXG4rXFx0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FTl9DRkdfVFApO1xcbitcXHRpZiAoIWVycilcXG4rXFx0XFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGV4aXRfY29uZmlnO1xcbitcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLCBcXFwiRXJhc2luZ1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VSQVNFKTtcXG4rXFx0aWYgKCFlcnIpXFxuK1xcdFxcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCBDUExEX0VSQVNFX01TKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2NvbmZpZztcXG4rXFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9jb25maWc7XFxuK1xcbitcXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGZ3LVxcdTAwM2VzaXplOyBvZmZzZXQgKz0gQ1BMRF9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0dTggYXJnc1szICsgQ1BMRF9QQUdFX1NJWkVdID0geyAweDAwLCAweDAwLCAweDAxIH07XFxuK1xcbitcXHRcXHRtZW1jcHkoXFx1MDAyNmFyZ3NbM10sIGZ3LVxcdTAwM2VkYXRhICsgb2Zmc2V0LCBDUExEX1BBR0VfU0laRSk7XFxuK1xcdFxcdGVyciA9IGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBDUExEX0NNRF9XUklURV9QQUdFLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDApO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGV4aXRfY29uZmlnO1xcbitcXG4rXFx0XFx0aWYgKCEob2Zmc2V0ICUgKENQTERfUEFHRV9TSVpFICogNjQpKSlcXG4rXFx0XFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiUHJvZ3JhbW1pbmdcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQsIGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0fVxcbitcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJQcm9ncmFtbWluZ1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGZ3LVxcdTAwM2VzaXplLCBmdy1cXHUwMDNlc2l6ZSk7XFxuK1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1NFVF9ET05FKTtcXG4rXFx0aWYgKCFlcnIpXFxuK1xcdFxcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2NvbmZpZztcXG4rXFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2NvbmZpZztcXG4rXFx0aWYgKCEoc3QgXFx1MDAyNiBDUExEX1NUQVRVU19ET05FKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIGV4aXRfY29uZmlnO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJBY3RpdmF0aW5nXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7XFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVGUkVTSCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9jb25maWc7XFxuK1xcbitcXHQvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gdGhlIGV4aXRcXG4rXFx0ICogcGF0aCBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIGEgY2hlY2sgYmVsb3cgZmFpbHMuXFxuK1xcdCAqL1xcbitcXHRicC1cXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xcbitcXG4rXFx0LyogVGhlIG5ldyBpbWFnZSBpcyBhbHJlYWR5IHJ1bm5pbmcsIHNvIGEgc2VnbWVudCB0aGF0IGlzIG5vdCBiYWNrXFxuK1xcdCAqIHlldCBtdXN0IG5vdCBiZSByZXBvcnRlZCBhcyBhIGZhaWxlZCB1cGRhdGU6IHJldHJ5IHRoZSByZXNlbGVjdFxcbitcXHQgKiByYXRoZXIgdGhhbiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcCgxNTAwKTtcXG4rXFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9tdXhfc2VsZWN0LCBlcnIsICFlcnIsIENQTERfUE9MTF9VUyxcXG4rXFx0XFx0XFx0XFx0MzAwMCAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRicCwgQURWQV9NVVhfQ0hBTk5FTCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMzAwMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcbitcXHQvKiBSZXF1aXJlIERPTkUgc2V0LCBub3QgYnVzeSBhbmQgbm8gZXJyb3IgY29kZSwgYXMgbWFjaHhvMi1zcGkuYyBkb2VzXFxuK1xcdCAqIGFmdGVyIGEgcmVmcmVzaDogd2l0aG91dCBpdCBhIENSQyBvciBwcmVhbWJsZSBlcnJvciByZWFkcyBiYWNrIGFzIGFcXG4rXFx0ICogc3VjY2Vzc2Z1bCB1cGRhdGUuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFxcdTAwMjZzdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcdGlmICghKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkgfHwgKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSkgfHxcXG4rXFx0ICAgIChzdCBcXHUwMDI2IENQTERfU1RBVFVTX0VSUikpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2YnAtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkNQTEQgcmVmcmVzaCBsZWZ0IHN0YXR1cyAweCUwOHhcXFxcblxcXCIsIHN0KTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNQTEQgZGlkIG5vdCBjb21lIGJhY2sgY29uZmlndXJlZFxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIGRlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgaW1hZ2Ugb24gdGhlIHBhcnQgY2hhbmdlZCwgc28gdGhlIGNhY2hlZCBVU0VSQ09ERSBoYXMgdG9vLiAqL1xcbitcXHRXUklURV9PTkNFKGJwLVxcdTAwM2VjcGxkX2lkLCAwKTtcXG4rXFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pZF90cmllZCwgZmFsc2UpO1xcbitcXHRicC1cXHUwMDNlY3BsZF9pZF9hdHRlbXB0cyA9IDA7XFxuK1xcbitleGl0X2NvbmZpZzpcXG4rXFx0YWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKGJwKTtcXG4rZGVzZWxlY3Q6XFxuK1xcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xcbityZWxlYXNlOlxcbitcXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfYXR0cnNbXSA9IHtcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3NlcmlhbG51bS5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfZ25zc19zeW5jLmF0dHIsXFxuQEAgLTQyNzQsNiArNDk5MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsXFxuIFxcdFxcdTAwMjZkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0cixcXG4rXFx0XFx1MDAyNmRldl9hdHRyX2NwbGRfc3RhdHVzLmF0dHIsXFxuIFxcdE5VTEwsXFxuIH07XFxuIFxcbkBAIC00OTA0LDYgKzU2MjEsNyBAQCBwdHBfb2NwX2RldGFjaChzdHJ1Y3QgcHRwX29jcCAqYnApXFxuIFxcdFxcdGNsa19od191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUoYnAtXFx1MDAzZWkyY19jbGspO1xcbiBcXHRpZiAoYnAtXFx1MDAzZW5faXJxcylcXG4gXFx0XFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtXFx1MDAzZXBkZXYpO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4gXFx0ZGV2aWNlX3VucmVnaXN0ZXIoXFx1MDAyNmJwLVxcdTAwM2VkZXYpO1xcbiB9XFxuIFxcbkBAIC01MDUyLDYgKzU3NzAsMjAgQEAgcHRwX29jcF9zeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gXFx0YnAtXFx1MDAzZXN5bmMgPSBzeW5jO1xcbiBcXG4rXFx0LyogVGhlIGFkYXB0ZXIgY2FuIGFwcGVhciBhZnRlciBwcm9iZSwgc28gcmVhZCB0aGUgSUQgZnJvbSBoZXJlIG9uY2VcXG4rXFx0ICogaXQgaGFzLiAgQSBjbGFpbSBjYW4gZmFpbCB0cmFuc2llbnRseSAtIHRoZSBmaXJtd2FyZSBtYXkgbm90IGdyYW50XFxuK1xcdCAqIHRoZSBzZWdtZW50IHN0cmFpZ2h0IGFmdGVyIHBvd2VyLXVwIC0gc28gcmV0cnkgYSBib3VuZGVkIG51bWJlciBvZlxcbitcXHQgKiB0aW1lcy4gIC1FQlVTWSBtZWFucyBjcGxkX2xvY2sgaXMgaGVsZCBhbmQgZG9lcyBub3QgY291bnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoYnAtXFx1MDAzZWhhc19jcGxkIFxcdTAwMjZcXHUwMDI2ICFSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfaWRfdHJpZWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aW50IGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX2lkKGJwKTtcXG4rXFxuK1xcdFxcdGlmIChlcnIgIT0gLUVCVVNZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWVyciB8fCArK2JwLVxcdTAwM2VjcGxkX2lkX2F0dGVtcHRzIFxcdTAwM2U9IENQTERfSURfTUFYX0FUVEVNUFRTKSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pZF90cmllZCwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuIFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcXHUwMDI2YnAtXFx1MDAzZXN5bmNfd29yaywgSFopO1xcbiB9XFxuIFxcbkBAIC01MDgwLDYgKzU4MTIsMTQgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dF9kaXNhYmxlO1xcbiBcXG4rXFx0LyogQmVmb3JlIHRoZSBmaXJzdCBlcnJvciBwYXRoIHRoYXQgY2FsbHMgcHRwX29jcF9kZXRhY2goKSwgc29cXG4rXFx0ICogbXV0ZXhfZGVzdHJveSgpIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXgsIGFuZCBiZWZvcmVcXG4rXFx0ICogcHRwX29jcF9yZWdpc3Rlcl9yZXNvdXJjZXMoKSwgc28gdGhpcyBzZW50aW5lbCBjYW5ub3Qgb3ZlcndyaXRlIGFuXFxuK1xcdCAqIGFkYXB0ZXIgbnVtYmVyIHRoZSBpMmMgbm90aWZpZXIgc3RvcmVzIGR1cmluZyByZWdpc3RyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIgPSAtMTtcXG4rXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XFxuIFxcbiBcXHQvKiBjb21wYXQgbW9kZS5cXG5AQCAtNTA5OSw2ICs1ODM5LDggQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdGFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoYnApO1xcbitcXG4gXFx0YnAtXFx1MDAzZXB0cCA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2YnAtXFx1MDAzZXB0cF9pbmZvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKElTX0VSUihicC1cXHUwMDNlcHRwKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKGJwLVxcdTAwM2VwdHApO1xcbkBAIC01MTE5LDEyICs1ODYxLDEyIEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKElTX0VSUihicC1cXHUwMDNlZHBsbCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihicC1cXHUwMDNlZHBsbCk7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImRwbGxfZGV2aWNlX2FsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF9kZXZsaW5rO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXFx1MDAyNmRwbGxfb3BzLCBicCk7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF9kcGxsX3B1dDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBPQ1BfU01BX05VTTsgaSsrKSB7XFxuIFxcdFxcdGJwLVxcdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLFxcbkBAIC01MTUwLDcgKzU4OTIsMTYgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRcXHRkcGxsX3Bpbl91bnJlZ2lzdGVyKGJwLVxcdTAwM2VkcGxsLCBicC1cXHUwMDNlc21hW2ldLmRwbGxfcGluLCBcXHUwMDI2ZHBsbF9waW5zX29wcywgXFx1MDAyNmJwLVxcdTAwM2VzbWFbaV0pO1xcbiBcXHRcXHRkcGxsX3Bpbl9wdXQoYnAtXFx1MDAzZXNtYVtpXS5kcGxsX3BpbiwgXFx1MDAyNmJwLVxcdTAwM2VzbWFbaV0udHJhY2tlcik7XFxuIFxcdH1cXG4rXFx0LyogZHBsbF9kZXZpY2VfcmVnaXN0ZXIoKSB0YWtlcyBhIHNlY29uZCByZWZlcmVuY2UgYW5kIHN0b3JlcyBicDsgb25seVxcbitcXHQgKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyKCkgZHJvcHMgaXQuICBXaXRob3V0IHRoaXMgdGhlIGRldmljZSBzdGF5c1xcbitcXHQgKiB2aXNpYmxlIHdpdGggYSBwcml2IHBvaW50ZXIgaW50byBzdG9yYWdlIGRldmxpbmtfZnJlZSgpIHdpbGwgcmVsZWFzZS5cXG4rXFx0ICovXFxuK1xcdGRwbGxfZGV2aWNlX3VucmVnaXN0ZXIoYnAtXFx1MDAzZWRwbGwsIFxcdTAwMjZkcGxsX29wcywgYnApO1xcbitvdXRfZHBsbF9wdXQ6XFxuIFxcdGRwbGxfZGV2aWNlX3B1dChicC1cXHUwMDNlZHBsbCwgXFx1MDAyNmJwLVxcdTAwM2V0cmFja2VyKTtcXG4rb3V0X2Rldmxpbms6XFxuK1xcdC8qIGRldGFjaCgpIGRlc3Ryb3lzIGNwbGRfbG9jazsgbm8gZGV2bGluayBvcCBtYXkgc3RpbGwgcmVhY2ggaXQgKi9cXG4rXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbiBvdXQ6XFxuIFxcdHB0cF9vY3BfZGV0YWNoKGJwKTtcXG4gb3V0X2Rpc2FibGU6XFxuQEAgLTUxOTYsNiArNTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYsICpjaGlsZCA9IGRhdGE7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcXG4gXFx0c3RydWN0IHB0cF9vY3AgKmJwO1xcbiBcXHRib29sIGFkZDtcXG4gXFxuQEAgLTUyMTksMTEgKzU5NzEsMjEgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbiBcXG4gZm91bmQ6XFxuIFxcdGJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuLVxcdGlmIChhZGQpXFxuK1xcdGFkYXAgPSBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpO1xcbitcXHRpZiAoYWRkKSB7XFxuIFxcdFxcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFxcXCJpMmNcXFwiKTtcXG4tXFx0ZWxzZVxcbitcXHRcXHQvKiBPbmx5IHRoZSBjYXJkJ3Mgb3duIGNvbnRyb2xsZXI6IGEgbXV4IGNoaWxkIGFkZGVkIG9uIGl0XFxuK1xcdFxcdCAqIHJlYWNoZXMgcHRwX29jcCB0aHJvdWdoIHRoZSBzYW1lIHdhbGsuICBOdW1iZXJzIGFyZVxcbitcXHRcXHQgKiByZWN5Y2xlZCwgc28gdGhlIGNsYWltIHJlLWNoZWNrcyB0aGUgcGFyZW50IGl0c2VsZi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChicC1cXHUwMDNlaTJjX2N0cmwgXFx1MDAyNlxcdTAwMjYgYWRhcC1cXHUwMDNlZGV2LnBhcmVudCA9PSBcXHUwMDI2YnAtXFx1MDAzZWkyY19jdHJsLVxcdTAwM2VkZXYpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGFkYXAtXFx1MDAzZW5yKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSwgYnV0IG9ubHkgZm9yIHRoZSBjYWNoZWQgYWRhcHRlciAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2kyY19hZGFwX25yKSA9PSBhZGFwLVxcdTAwM2VucilcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgLTEpO1xcbiBcXHRcXHRzeXNmc19yZW1vdmVfbGluayhcXHUwMDI2YnAtXFx1MDAzZWRldi5rb2JqLCBcXFwiaTJjXFxcIik7XFxuLVxcbitcXHR9XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzoyMi4xOTM2MTk2MjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2OTcwNzIzNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczYmVlODgxNjgxYmIzZTU1NDBhNzQ4YjVjZWNlNWJiNDA4YmM3OGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwNzoyNzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5pbmRleCAzYWU0MWI3NjM0YWM5Li42ZGRjYTQ1MmJjNjMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuQEAgLTExLDYgKzExLDM0IEBAIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcbiBcdFx0cmVnaXN0ZXJlZC5cbiBcbitXaGF0Olx0XHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vY3BsZF9zdGF0dXNcbitEYXRlOlx0XHRKdWx5IDIwMjZcbitDb250YWN0Olx0U2FnaSBNYWltb24gXHUwMDNjbWFpbW9uLnNhZ2lAZ21haWwuY29tXHUwMDNlXG4rRGVzY3JpcHRpb246XHQoUk8sIHJvb3Qgb25seSkgVGhlIGZsYWdzIHNldCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZVxuK1x0XHRUQVAgQ1BMRCwgc3BhY2Ugc2VwYXJhdGVkLCBvciBhbiBlbXB0eSBsaW5lIHdoZW4gbm9uZSBpc1xuK1x0XHRzZXQuICBPbmx5IHByZXNlbnQgb24gQURWQSB4MSBUQVAgYm9hcmRzIChQQ0kgSURcbitcdFx0MHhhZDVhOjB4MDQxMCkuXG4rXG4rXHRcdD09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0XHRkb25lICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBmbGFzaCB3YXMgcHJvZ3JhbW1lZFxuK1x0XHRcdCAgICBzdWNjZXNzZnVsbHkgYW5kIGlzIGFjdGl2ZVxuK1x0XHRidXN5ICAgICAgICBhbiBpbnRlcm5hbCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbitcdFx0ZmFpbGVkICAgICAgdGhlIGxhc3QgSVNDIG9wZXJhdGlvbiBmYWlsZWRcbitcdFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rXHRcdEZvciBleGFtcGxlIFwiYnVzeVwiIHdoaWxlIHByb2dyYW1taW5nLCBvciBcImJ1c3kgZmFpbGVkXCIgaWYgYVxuK1x0XHRmYWlsdXJlIGlzIGxhdGNoZWQgd2hpbGUgYW5vdGhlciBvcGVyYXRpb24gcnVucy5cbitcbitcdFx0QSByZWFkIGFyYml0cmF0ZXMgZm9yIHRoZSBzaGFyZWQgSTJDIGJ1cyBhbmQgcmVwcm9ncmFtcyB0aGVcbitcdFx0b24tY2FyZCBtdXgsIHNvIGl0IGlzIHJlc3RyaWN0ZWQgdG8gcm9vdC4gIFRoZSBMYXR0aWNlIGRldmljZVxuK1x0XHRJRCBvZiB0aGUgQ1BMRCBpcyByZWFkIG9uY2UgYnkgdGhlIGRyaXZlciwgc2hvcnRseSBhZnRlclxuK1x0XHRwcm9iZSwgYW5kIHJlcG9ydGVkIGZyb20gdGhhdCBjYWNoZWQgdmFsdWUgYXMgdGhlIGZpeGVkXG4rXHRcdFwiY3BsZC5pZFwiIHZlcnNpb24gYnkgZGV2bGluayBkZXYgaW5mby5cbitcbitcdFx0TmV3IENQTEQgZmlybXdhcmUgaXMgcHJvZ3JhbW1lZCB3aXRoIGRldmxpbmsgZGV2IGZsYXNoLFxuK1x0XHRzZWxlY3RpbmcgdGhlIFwiZncuY3BsZFwiIGNvbXBvbmVudDsgc2VlXG4rXHRcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0LlxuK1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlc1xuIERhdGU6XHRcdFNlcHRlbWJlciAyMDIxXG4gQ29udGFjdDpcdEpvbmF0aGFuIExlbW9uIFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVx1MDAzZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuaW5kZXggZDRhODNmZGNmZjdmZS4uMWFmNzgwYzgxMWVlMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5AQCAtOTksNiArOTksNyBAQCBwYXJhbWV0ZXJzLCBpbmZvIHZlcnNpb25zLCBhbmQgb3RoZXIgZmVhdHVyZXMgaXQgc3VwcG9ydHMuXG4gICAgbmZwXG4gICAgb2N0ZW9udHgyXG4gICAgcHJlc3RlcmFcbisgICBwdHBfb2NwXG4gICAgcWVkXG4gICAgc2ZjXG4gICAgc3RtbWFjXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM3ZTlmMWViZDFhODFcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0XG5AQCAtMCwwICsxLDcwIEBAXG4rLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbis9PT09PT09PT09PT09PT09PT09PT09PT1cbitwdHBfb2NwIGRldmxpbmsgc3VwcG9ydFxuKz09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZSBgYHB0cF9vY3BgYFxuK2RldmljZSBkcml2ZXI6IHRoZSBpbmZvIHZlcnNpb25zIGl0IHJlcG9ydHMgYW5kIGl0cyBmbGFzaCB1cGRhdGUgc3VwcG9ydC5cbitcbitJbmZvIHZlcnNpb25zXG4rPT09PT09PT09PT09PVxuK1xuK1RoZSBgYHB0cF9vY3BgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZFxuKyAgIDp3aWR0aHM6IDUgNSA5MFxuK1xuKyAgICogLSBOYW1lXG4rICAgICAtIFR5cGVcbisgICAgIC0gRGVzY3JpcHRpb25cbisgICAqIC0gYGBmd2BgXG4rICAgICAtIHJ1bm5pbmdcbisgICAgIC0gVmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgcnVubmluZyBvbiB0aGUgY2FyZC4gIFJlcG9ydGVkIGFzIGBgbG9hZGVyYGBcbisgICAgICAgaW5zdGVhZCB3aGVuIHRoZSBjYXJkIGlzIHJ1bm5pbmcgdGhlIGZpcm13YXJlIGxvYWRlci5cbisgICAqIC0gYGBib2FyZC5pZGBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIEJvYXJkIGlkZW50aWZpZXIsIHJlYWQgZnJvbSB0aGUgb24tY2FyZCBFRVBST00uXG4rICAgKiAtIGBgY3BsZC5pZGBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIExhdHRpY2UgZGV2aWNlIElEIChJRENPREUpIG9mIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzIGBgMHglMDh4YGAuXG4rICAgICAgIE9ubHkgcHJlc2VudCBvbiBBRFZBIFRpbWVDYXJkIFgxIGJvYXJkcywgd2hpY2ggYXJlIHRoZSBvbmx5IG9uZXNcbisgICAgICAgY2FycnlpbmcgdGhhdCBDUExELiAgUmVhZGluZyBpdCBjbGFpbXMgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZFxuKyAgICAgICByZXByb2dyYW1zIHRoZSBvbi1jYXJkIG11eCwgc28gdGhlIGRyaXZlciBkb2VzIHRoYXQgb25jZSBmcm9tIGl0c1xuKyAgICAgICBvd24gd29ya2VyIGFuZCByZXBvcnRzIHRoZSBjYWNoZWQgdmFsdWUgaGVyZTsgdGhlIHZlcnNpb24gaXNcbisgICAgICAgb21pdHRlZCB1bnRpbCB0aGF0IHJlYWQgaGFzIHN1Y2NlZWRlZC5cbisgICAqIC0gYGBmdy5jcGxkYGBcbisgICAgIC0gcnVubmluZ1xuKyAgICAgLSBVU0VSQ09ERSBvZiB0aGUgaW1hZ2UgcHJvZ3JhbW1lZCBpbnRvIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzXG4rICAgICAgIGBgMHglMDh4YGAuICBSZWFkIHRvZ2V0aGVyIHdpdGggYGBjcGxkLmlkYGAgYW5kIHJlcG9ydGVkIHRoZSBzYW1lXG4rICAgICAgIHdheS4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCBuYW1lIHRvIHBhc3MgdG8gYGBkZXZsaW5rIGRldiBmbGFzaGBgXG4rICAgICAgIHRvIHVwZGF0ZSB0aGUgQ1BMRC5cbitcbitGbGFzaCB1cGRhdGVcbis9PT09PT09PT09PT1cbitcbitUaGUgZHJpdmVyIGltcGxlbWVudHMgYGBkZXZsaW5rIGRldiBmbGFzaGBgIGZvciB0d28gc2VwYXJhdGUgdGFyZ2V0cyxcbitzZWxlY3RlZCB3aXRoIHRoZSBjb21wb25lbnQgbmFtZS5cbitcbisuLiBsaXN0LXRhYmxlOjogRmxhc2ggY29tcG9uZW50c1xuKyAgIDp3aWR0aHM6IDIwIDgwXG4rXG4rICAgKiAtIENvbXBvbmVudFxuKyAgICAgLSBEZXNjcmlwdGlvblxuKyAgICogLSAobm9uZSlcbisgICAgIC0gVGhlIGNhcmQncyBvd24gZmxhc2gsIHdyaXR0ZW4gdGhyb3VnaCB0aGUgU1BJIGNvbnRyb2xsZXIgdGhlIGRyaXZlclxuKyAgICAgICBleHBvc2VzLiAgVGhlIGNhcmQgcnVucyB0aGUgbmV3IGltYWdlIGFmdGVyIGl0cyBuZXh0IHJlc2V0LlxuKyAgICogLSBgYGZ3LmNwbGRgYFxuKyAgICAgLSBUaGUgY29uZmlndXJhdGlvbiBmbGFzaCBvZiB0aGUgVEFQIENQTEQgb24gQURWQSBUaW1lQ2FyZCBYMSBib2FyZHMsXG4rICAgICAgIHByb2dyYW1tZWQgb3ZlciBJMkMgd2l0aCB0aGUgTWFjaFhPMyBpbi1zeXN0ZW0gcHJvZ3JhbW1pbmcgY29tbWFuZHNcbisgICAgICAgYW5kIGFjdGl2YXRlZCB3aXRoIGEgUkVGUkVTSCwgc28gdGhlIG5ldyBpbWFnZSBydW5zIGltbWVkaWF0ZWx5LlxuKyAgICAgICBUaGUgaW1hZ2UgaXMgdGhlIHJhdyBjb25maWd1cmF0aW9uIGJpdHN0cmVhbSwgYSB3aG9sZSBudW1iZXIgb2ZcbisgICAgICAgMTYtYnl0ZSBwYWdlczsgY29udGFpbmVyIGZvcm1hdHMgc3VjaCBhcyBgYC5qZWRgYCBhcmUgcmVqZWN0ZWQuXG4rXG4rUHJvZ3JhbW1pbmcgdGhlIENQTEQgY2xhaW1zIHRoZSBzaGFyZWQgSTJDIGJ1cyBmb3IgdGhlIHdob2xlIGN5Y2xlLCBzb1xuK3JlYWRzIG9mIHRoZSBjYXJkJ3MgRUVQUk9NIGJsb2NrIHVudGlsIGl0IGNvbXBsZXRlcy4gIFByb2dyZXNzIGlzIHJlcG9ydGVkXG4rd2l0aCB0aGUgc3RhbmRhcmQgZGV2bGluayBzdGF0dXMgbm90aWZpY2F0aW9ucy5cbitcbitFeGFtcGxlOjpcbitcbisgICAgJCBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDowMjowMC4wIGZpbGUgYWR2YS1jcGxkLmJpbiBjb21wb25lbnQgZncuY3BsZFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDBlMDRkOTJkMWIwOTguLjExM2YzMTQzNDYxNzcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMDQ3OSw2ICsyMDQ3OSw3IEBAIE9QRU5DT01QVVRFIFBUUCBDTE9DSyBEUklWRVJcbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4rRjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0XG4gRjpcdGRyaXZlcnMvcHRwL3B0cF9vY3AuY1xuIFxuIE9QRU5DT1JFUyBJMkMgQlVTIERSSVZFUlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuaW5kZXggM2QyNmVjMWY3YjllYy4uNThiOTBiMmIyODJmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXG5AQCAtMjAsMTAgKzIwLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpL2FsdGVyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICs4OSw4IEBAIHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XG4gXHR1OFx0XHRcdFx0c2lnbmFsc19ucjtcbiBcdHU4XHRcdFx0XHRmcmVxX2luX25yO1xuIFx0Y29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwXHQqYXR0cl9ncm91cHM7XG4rXHQvKiB4MTogVEFQIENQTEQgcHJlc2VudCAqL1xuK1x0Ym9vbFx0XHRcdFx0aGFzX2NwbGQ7XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVx0XHRCSVQoMClcbkBAIC0xNjMsNyArMTY5LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcbiBcdHUzMlx0Z3BpbzE7XG4gXHR1MzJcdF9fcGFkMDtcbiBcdHUzMlx0Z3BpbzI7XG4tXHR1MzJcdF9fcGFkMTtcbitcdC8qIGFkdmFfeDE6IEkyQyBidXMgb3duZXJzaGlwIHJlZ2lzdGVyOyByZXNlcnZlZCBvbiBvdGhlciB2YXJpYW50cyAqL1xuK1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiArNDIzLDI3IEBAIHN0cnVjdCBwdHBfb2NwIHtcbiBcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuIFx0aW50IHNpZ25hbHNfbnI7XG4gXHRpbnQgZnJlcV9pbl9ucjtcbitcdC8qIGFkdmFfeDEgQ1BMRCBJMkMgKGludGVybmFsIHVzZSBvbmx5KSAqL1xuK1x0Lyogc2VyaWFsaXNlcyBDUExEIG9wZXJhdGlvbnMgKi9cbitcdHN0cnVjdCBtdXRleFx0XHRjcGxkX2xvY2s7XG4rXHQvKiBJMkMgYWRhcHRlciBucjsgLTEgaWYgYWJzZW50ICovXG4rXHRpbnRcdFx0XHRjcGxkX2kyY19hZGFwX25yO1xuK1x0LyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cbitcdHN0cnVjdCBpMmNfYWRhcHRlclx0KmNwbGRfYWRhcDtcbitcdC8qIHNjcmF0Y2gsIHdyaXRlIGhhbGYgdGhlbiByZWFkIGhhbGY7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuK1x0dThcdFx0XHQqY3BsZF9idWY7XG4rXHQvKiBMYXR0aWNlIGRldmljZSBJRDsgMCBpZiB1bnJlYWQgKi9cbitcdHUzMlx0XHRcdGNwbGRfaWQ7XG4rXHQvKiBVU0VSQ09ERSBvZiB0aGUgcHJvZ3JhbW1lZCBpbWFnZTsgdmFsaWQgb25jZSBjcGxkX2lkIGlzIHNldCAqL1xuK1x0dTMyXHRcdFx0Y3BsZF91c2VyY29kZTtcbitcdC8qIHRoZSBvbmUtc2hvdCBJRCByZWFkIGlzIGZpbmlzaGVkLCBzdWNjZXNzZnVsbHkgb3Igbm90ICovXG4rXHRib29sXHRcdFx0Y3BsZF9pZF90cmllZDtcbitcdC8qIGZhaWxlZCBJRCByZWFkIGF0dGVtcHRzIHNvIGZhciAqL1xuK1x0dW5zaWduZWQgaW50XHRcdGNwbGRfaWRfYXR0ZW1wdHM7XG4rXHQvKiB4MSBUQVAgQ1BMRCBwcmVzZW50ICovXG4rXHRib29sXHRcdFx0aGFzX2NwbGQ7XG4rXHQvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gnZCAqL1xuK1x0Ym9vbFx0XHRcdGNwbGRfaW5fY29uZmlnX21vZGU7XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXHRCSVQoMClcbkBAIC00NTIsNiArNDgwLDEzIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XG4gXG4rLyogRmxhc2ggY29tcG9uZW50IG5hbWluZyB0aGUgQ1BMRCBpbWFnZSwgYXMgcmVwb3J0ZWQgYnkgLVx1MDAzZWluZm9fZ2V0KCkuICovXG4rI2RlZmluZSBBRFZBX0NQTERfQ09NUE9ORU5UXHRcImZ3LmNwbGRcIlxuK1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW107XG5AQCAtMTI3Myw2ICsxMzA4LDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcbiBcdFx0XHQuc2lnbmFsc19uciAgID0gNCxcbiBcdFx0XHQuZnJlcV9pbl9uciAgID0gNCxcbiBcdFx0XHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXG4rXHRcdFx0Lmhhc19jcGxkICAgICA9IHRydWUsXG4gXHRcdH0sXG4gXHR9LFxuIFx0eyB9XG5AQCAtMjEzMyw2ICsyMTY5LDE3IEBAIHB0cF9vY3BfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRjb25zdCBjaGFyICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbitcdFx0aWYgKCFicC1cdTAwM2VoYXNfY3BsZCB8fFxuK1x0XHQgICAgc3RyY21wKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIEFEVkFfQ1BMRF9DT01QT05FTlQpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJ1bnN1cHBvcnRlZCBmbGFzaCBjb21wb25lbnRcIik7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiBhZHZhX3gxX2NwbGRfZmxhc2goYnAsIGRldmxpbmssIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbitcdH1cbitcbiBcdGRldiA9IHB0cF9vY3BfZmluZF9mbGFzaChicCk7XG4gXHRpZiAoIWRldikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcIkNhbid0IGZpbmQgRmxhc2ggU1BJIGFkYXB0ZXJcXG5cIik7XG5AQCAtMjE1NSwxMCArMjIwMiwxMyBAQCBzdGF0aWMgaW50XG4gcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlID1cbitcdFx0XHRcdFx0REVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4gXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4gXHRjb25zdCBjaGFyICpmd19pbWFnZTtcbiBcdGNoYXIgYnVmWzMyXTtcbiBcdGludCBlcnI7XG4rXHR1MzIgaWQ7XG4gXG4gXHRmd19pbWFnZSA9IGJwLVx1MDAzZWZ3X2xvYWRlciA/IFwibG9hZGVyXCIgOiBcImZ3XCI7XG4gXHRzcHJpbnRmKGJ1ZiwgXCIlZC4lZFwiLCBicC1cdTAwM2Vmd190YWcsIGJwLVx1MDAzZWZ3X3ZlcnNpb24pO1xuQEAgLTIxNjYsNiArMjIxNiwyOCBAQCBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0LyogUmVhZCBieSB0aGUgd29ya2VyLCBub3QgaGVyZTogdGhpcyBjb21tYW5kIGlzIHVucHJpdmlsZWdlZCBhbmRcbitcdCAqIHJlYWRpbmcgdGhlIElEIGNsYWltcyB0aGUgSTJDIGJ1cy4gIDAgbWVhbnMgdW5yZWFkIC0gc2tpcCBpdFxuK1x0ICogcmF0aGVyIHRoYW4gZmFpbCwgZGV2bGluayBkaXNjYXJkcyB0aGUgd2hvbGUgcmVwbHkgb24gZXJyb3IuXG4rXHQgKi9cbitcdGlkID0gUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaWQpO1xuK1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkIFx1MDAyNlx1MDAyNiBpZCkge1xuK1x0XHRzcHJpbnRmKGJ1ZiwgXCIweCUwOHhcIiwgaWQpO1xuK1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBcImNwbGQuaWRcIiwgYnVmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHQvKiBUaGUgZmxhc2hhYmxlIGNvbXBvbmVudDogbmFtaW5nIGl0IGhlcmUgaXMgd2hhdCBsZXRzXG4rXHRcdCAqIFwiZGV2bGluayBkZXYgZmxhc2ggLi4uIGNvbXBvbmVudCBmdy5jcGxkXCIgdGhyb3VnaCwgYXMgdGhlXG4rXHRcdCAqIGNvcmUgbWF0Y2hlcyB0aGUgbmFtZSBhZ2FpbnN0IHRoZSB2ZXJzaW9ucyByZXBvcnRlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0c3ByaW50ZihidWYsIFwiMHglMDh4XCIsIFJFQURfT05DRShicC1cdTAwM2VjcGxkX3VzZXJjb2RlKSk7XG4rXHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0X2V4dChyZXEsIFwiZncuY3BsZFwiLCBidWYsXG4rXHRcdFx0XHRcdFx0XHQgICB2ZXJfdHlwZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGlmICghYnAtXHUwMDNlaGFzX2VlcHJvbV9kYXRhKSB7XG4gXHRcdHB0cF9vY3BfcmVhZF9lZXByb20oYnApO1xuIFx0XHRpZiAoIWJwLVx1MDAzZWhhc19lZXByb21fZGF0YSlcbkBAIC0zMTk5LDYgKzMyNzEsOCBAQCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRwdHBfb2NwX3NtYV9pbml0KGJwKTtcbiBcbitcdGJwLVx1MDAzZWhhc19jcGxkID0gaW5mby1cdTAwM2VoYXNfY3BsZDtcbitcbiBcdHJldHVybiBwdHBfb2NwX2luaXRfY2xvY2soYnAsIFx1MDAyNmluZm8tXHUwMDNlc2Vydm8pO1xuIH1cbiBcbkBAIC00MjI2LDYgKzQzMDAsNjQ4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0ge1xuIFx0eyB9LFxuIH07XG4gXG4rLypcbisgKiBhZHZhX3gxIFRBUCBDUExEIChMYXR0aWNlIExDTVhPM0xGLTIxMDApIGhlbHBlcnMuXG4rICpcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cbisgKiBUaGUgaTJjX2J1c19jdHJsIGhhbmRzaGFrZSByZS1yb3V0ZXMgd2hhdCBlYWNoIGlzIHdpcmVkIHRvOlxuKyAqXG4rICogICBncmFudCAwOiAgMHgxNTAwMDAgLVx1MDAzZSBFRVBST01zICAgICAweDEyMDAwMCAtXHUwMDNlIFRNQyBvciBNLjIsIE1CJ3MgY2hvaWNlXG4rICogICBncmFudCAxOiAgMHgxNTAwMDAgLVx1MDAzZSBUTUMgYnVzICAgICAweDEyMDAwMCAtXHUwMDNlIE0uMlxuKyAqXG4rICogVGhlIFBDQTk1NDggYXQgMHg3NCBhbmQgdGhlIENQTEQgYXQgMHg0MCBiZWhpbmQgaXRzIGNoYW5uZWwgMCBhcmUgb24gdGhlXG4rICogVE1DIGJ1cywgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBUaGUgRUVQUk9NcyBhcmUgbm90XG4rICogYmVoaW5kIHRoZSBhZGFwdGVyIGZvciB0aGF0IHdpbmRvdywgc28gYSBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2tcbisgKiBhbmQgdGhlIGFkYXB0ZXIgbG9jayB0byBrZWVwIHRoZSBFRVBST00gYW5kIG52bWVtIHBhdGhzIG9mZiBpdC5cbisgKi9cbitcbisjZGVmaW5lIEFEVkFfTVVYX0FERFIgICAgIDB4NzRcbisjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcbisjZGVmaW5lIEFEVkFfTVVYX0NIQU5ORUwgIDBcbitcbisvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xuKyNkZWZpbmUgQURWQV9DUExEX1hGRVJfTUFYIDMyXG4rXG4rI2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxuKyNkZWZpbmUgTUJMQVpFX0dSQU5URUQgICAgMHg1NTU1YWFhYVVcbisjZGVmaW5lIE1CTEFaRV9SRUxFQVNFICAgIDB4NTU1NTAwMDBVXG4rI2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcbisjZGVmaW5lIE1CTEFaRV9SRVRSWV9VUyAgIDEwMDAwXG4rXG4rLyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9JRCAgICAgIDB4RTAwMDAwMDBVTFxuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSAweEMwMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqL1xuKyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcbisjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFXG4rI2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NlxuKyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcbisjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFXG4rI2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OVxuKyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XG4rI2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi9cbisjZGVmaW5lIENQTERfRVJBU0VfTVMgICAgICAgICAxNTAwMCAgLyogY29uZmlnIHNlY3RvciBlcmFzZSwgZGF0YXNoZWV0IG1heCAqL1xuKyNkZWZpbmUgQ1BMRF9JRF9NQVhfQVRURU1QVFMgIDEwICAgICAvKiBvbmUgcGVyIHN5bmNfd29yayB0aWNrICovXG4rXG4rLyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqL1xuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KVxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMilcbisjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpXG4rI2RlZmluZSBDUExEX1NUQVRVU19FUlIgICAgR0VOTUFTSygyNSwgMjMpXG4rXG4rLypcbisgKiBJc3N1ZSBvbmUgSTJDIHRyYW5zYWN0aW9uIG9uIHRoZSBUTUMgYnVzOiBAY21kIGlmIG5vdCBuZWdhdGl2ZSwgdGhlblxuKyAqIEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSAoTlVMTCBzZW5kcyB6ZXJvcyksIHRoZW4gQHJsZW4gYnl0ZXMgcmVhZCBiYWNrLlxuKyAqIFRoZSBtZXNzYWdlIGlzIGJ1aWx0IGluIHRoZSBzY3JhdGNoIGJ1ZmZlciBmcm9tIGFkdmFfeDFfYnVzX2NsYWltKCksIHNvXG4rICogYW4gdXBsb2FkIGNvc3RzIG9uZSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIG9uZSBwZXIgcGFnZS4gIEkyQ19NX0RNQV9TQUZFXG4rICogaXMgbm90IHNldDogdGhlIHR3byBoYWx2ZXMgYXJlIG5vdCBzZXBhcmF0ZWx5IGFsaWduZWQsIHNvIGxldCB0aGUgY29yZVxuKyAqIGJvdW5jZS4gIENhbGxlciBob2xkcyB0aGUgY2xhaW0sIGhlbmNlIF9faTJjX3RyYW5zZmVyKCkuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbitcdFx0XHQgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sXG4rXHRcdFx0ICAgIHZvaWQgKnJkYXRhLCB1OCBybGVuKVxuK3tcbitcdHU4ICp3YnVmLCAqcmJ1ZjtcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbitcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4rXHRpbnQgbm1zZ3MgPSAwLCByZXQ7XG4rXHR1MTYgaGRyID0gY21kIFx1MDAzZT0gMDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4rXHRpZiAoIWFkYXAgfHwgIWJwLVx1MDAzZWNwbGRfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGlmIChoZHIgKyB3bGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiBcdTAwM2UgQURWQV9DUExEX1hGRVJfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHdidWYgPSBicC1cdTAwM2VjcGxkX2J1ZjtcbitcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiArIEFEVkFfQ1BMRF9YRkVSX01BWDtcbitcbitcdGlmIChoZHIgKyB3bGVuKSB7XG4rXHRcdGlmIChoZHIpXG4rXHRcdFx0d2J1ZlswXSA9IGNtZDtcbitcdFx0aWYgKHdkYXRhKVxuK1x0XHRcdG1lbWNweSh3YnVmICsgaGRyLCB3ZGF0YSwgd2xlbik7XG4rXHRcdGVsc2VcbitcdFx0XHRtZW1zZXQod2J1ZiArIGhkciwgMCwgd2xlbik7XG4rXHRcdG1zZ3Nbbm1zZ3MrK10gPSAoc3RydWN0IGkyY19tc2cpe1xuK1x0XHRcdC5hZGRyICA9IGFkZHIsXG4rXHRcdFx0LmZsYWdzID0gMCxcbitcdFx0XHQubGVuICAgPSBoZHIgKyB3bGVuLFxuK1x0XHRcdC5idWYgICA9IHdidWYsXG4rXHRcdH07XG4rXHR9XG4rXHRpZiAocmxlbikge1xuK1x0XHRtc2dzW25tc2dzKytdID0gKHN0cnVjdCBpMmNfbXNnKXtcbitcdFx0XHQuYWRkciAgPSBhZGRyLFxuK1x0XHRcdC5mbGFncyA9IEkyQ19NX1JELFxuK1x0XHRcdC5sZW4gICA9IHJsZW4sXG4rXHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbitcdFx0fTtcbitcdH1cbitcbitcdHJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcbitcdGlmIChyZXQgIT0gbm1zZ3MpXG4rXHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4rXG4rXHRpZiAocmRhdGEgXHUwMDI2XHUwMDI2IHJsZW4pXG4rXHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogSGFuZCB0aGUgc2VnbWVudCBiYWNrLCBhbmQgd2FpdCBmb3IgdGhlIGZpcm13YXJlIHRvIGRyb3AgdGhlIGdyYW50IGJlZm9yZVxuKyAqIHRoZSBjYWxsZXIgdW5sb2NrcyB0aGUgYWRhcHRlcjogYSB0cmFuc2ZlciBxdWV1ZWQgYmVoaW5kIHVzIHdvdWxkXG4rICogb3RoZXJ3aXNlIGJlIGNsb2NrZWQgb3V0IHdoaWxlIHRoZSBjb250cm9sbGVyIGlzIHN0aWxsIG9uIHRoZSBUTUMgYnVzLFxuKyAqIHdoaWNoIGlzIHdoYXQgaG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIGFjcm9zcyB0aGUgZ3JhbnQgZXhpc3RzIHRvIHN0b3AuXG4rICovXG4rc3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWJwLVx1MDAzZXBwc19zZWxlY3QpXG4rXHRcdHJldHVybjtcbitcbitcdGlvd3JpdGUzMihNQkxBWkVfUkVMRUFTRSwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0LyogRmx1c2ggdGhlIHBvc3RlZCB3cml0ZSwgYXMgdGhlIGFjcXVpcmUgcGF0aCBkb2VzLiAqL1xuK1x0aW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkrKykge1xuK1x0XHRpZiAoaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpICE9IE1CTEFaRV9HUkFOVEVEKVxuK1x0XHRcdHJldHVybjtcbitcdFx0dXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICsgMTAwMCk7XG4rXHR9XG4rXG4rXHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJUTUMgYnVzIHN0aWxsIGdyYW50ZWQgYWZ0ZXIgcmVsZWFzZVxcblwiKTtcbit9XG4rXG4rLyogQWNxdWlyZSB0aGUgc2hhcmVkIEkyQyBidXMgZnJvbSB0aGUgTWljcm9CbGF6ZSBmaXJtd2FyZS4gIFJldHVybnMgd2l0aCBub1xuKyAqIHJlcXVlc3Qgb3V0c3RhbmRpbmcgb24gZmFpbHVyZSwgc28gdGhlIGZpcm13YXJlIGlzIG5ldmVyIGxlZnQgZ3JhbnRpbmcgYVxuKyAqIHNlZ21lbnQgdG8gYSBob3N0IHRoYXQgaGFzIGdpdmVuIHVwIHdhaXRpbmcgZm9yIGl0LlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9tYmxhemVfYWNxdWlyZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCBpO1xuK1xuK1x0aWYgKCFicC1cdTAwM2VwcHNfc2VsZWN0KVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdC8qIERyb3AgYSByZXF1ZXN0IGxlZnQgYnkgYSBjYWxsZXIgdGhhdCBkaWVkIG1pZC1zZXF1ZW5jZTsgY3BsZF9sb2NrXG4rXHQgKiBrZWVwcyBsaXZlIG9uZXMgb3V0LiAgVGhlIHJlYWQgYmFjayBvbmx5IGZsdXNoZXMgdGhlIHBvc3RlZCB3cml0ZS5cbitcdCAqL1xuK1x0aW93cml0ZTMyKDAsIFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbitcdGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbitcbitcdGlvd3JpdGUzMihNQkxBWkVfUkVRVUVTVCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkrKykge1xuK1x0XHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgKyAxMDAwKTtcbitcdFx0dmFsID0gaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0XHRpZiAodmFsID09IE1CTEFaRV9HUkFOVEVEKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rLyogUm91dGUgdGhlIGhvc3QgY29udHJvbGxlciBiYWNrIHRvIHRoZSBFRVBST01zIGFuZCByZWxlYXNlIHRoZSBhZGFwdGVyLlxuKyAqIFNhZmUgYWZ0ZXIgYSBmYWlsZWQgY2xhaW06IGl0IGFsc28gY2xlYXJzIGEgcmVxdWVzdCB0aGF0IHdhcyBuZXZlciBncmFudGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFkdmFfeDFfYnVzX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxuK3tcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLVx1MDAzZWNwbGRfYWRhcDtcbitcbitcdGlmICghYWRhcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4rXHRicC1cdTAwM2VjcGxkX2FkYXAgPSBOVUxMO1xuK1x0a2ZyZWUoYnAtXHUwMDNlY3BsZF9idWYpO1xuK1x0YnAtXHUwMDNlY3BsZF9idWYgPSBOVUxMO1xuK1x0aTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbitcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbit9XG4rXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY19hZGFwX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbit7XG4rXHRyZXR1cm4gISFpMmNfdmVyaWZ5X2FkYXB0ZXIoZGV2KTtcbit9XG4rXG4rLypcbisgKiBDYWNoZSB0aGUgYWRhcHRlciB0aGUgQ1BMRCBoYW5ncyBvZmYuICBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKCkgbWlzc2VzXG4rICogaXQgd2hlbiB0aGUgaTJjIGNvbnRyb2xsZXIgZHJpdmVyIGlzIGFscmVhZHkgbG9hZGVkOiB0aGUgYWRhcHRlciBpcyB0aGVuXG4rICogYWRkZWQgZnJvbSBpbnNpZGUgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCksIGJlZm9yZSBicC1cdTAwM2VpMmNfY3RybCBpcyBzZXQuXG4rICogT25seSBkaXJlY3QgY2hpbGRyZW4gYXJlIHNlYXJjaGVkLCBzbyBhIG11eCBhZGFwdGVyIGNhbm5vdCBtYXRjaC5cbisgKi9cbitzdGF0aWMgdm9pZCBhZHZhX3gxX2NhY2hlX2kyY19hZGFwKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpjaGlsZDtcbitcbitcdGlmICghYnAtXHUwMDNlaGFzX2NwbGQgfHwgIWJwLVx1MDAzZWkyY19jdHJsIHx8XG4rXHQgICAgUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpIFx1MDAzZT0gMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZChcdTAwMjZicC1cdTAwM2VpMmNfY3RybC1cdTAwM2VkZXYsIE5VTEwsXG4rXHRcdFx0XHQgIGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2gpO1xuK1x0aWYgKCFjaGlsZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLVx1MDAzZW5yKTtcbitcdHB1dF9kZXZpY2UoY2hpbGQpO1xuK31cbitcbisvKlxuKyAqIENsYWltIHRoZSBUTUMgYnVzLiAgVGhlIGFkYXB0ZXIgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgaGFuZHNoYWtlIHRvIGtlZXBcbisgKiB0aGUgRUVQUk9NLCBudm1lbSBhbmQgYXQyNCBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkXG4rICogYXdheSBmcm9tIHRoZSBFRVBST01zOyBhbiBFRVBST00gcmVhZCBibG9ja3MgdW50aWwgdGhlIGNsYWltIGlzIGRyb3BwZWQuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2J1c19jbGFpbShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcbitcdGlmICghYWRhcClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHQvKiBUaGUgbnVtYmVyIGlzIGZyZWVkIGJlZm9yZSB0aGUgbm90aWZpZXIgY2xlYXJzIGl0LCBzbyBpdCBjYW5cbitcdCAqIGFscmVhZHkgYmUgYW5vdGhlciBhZGFwdGVyJ3MuICBDaGVjayB0aGlzIGlzIHN0aWxsIG91cnMuXG4rXHQgKi9cbitcdGlmICghYnAtXHUwMDNlaTJjX2N0cmwgfHwgYWRhcC1cdTAwM2VkZXYucGFyZW50ICE9IFx1MDAyNmJwLVx1MDAzZWkyY19jdHJsLVx1MDAzZWRldikge1xuK1x0XHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0LyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGFuIHVwbG9hZFxuK1x0ICogaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UuXG4rXHQgKi9cbitcdGJwLVx1MDAzZWNwbGRfYnVmID0ga3phbGxvYygyICogQURWQV9DUExEX1hGRVJfTUFYLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYnAtXHUwMDNlY3BsZF9idWYpIHtcbitcdFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGkyY19sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xuK1x0YnAtXHUwMDNlY3BsZF9hZGFwID0gYWRhcDtcbitcbitcdHJldCA9IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoYnApO1xuK1x0aWYgKHJldClcbitcdFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBTZWxlY3QgYSBtdXggY2hhbm5lbCwgb3IgZGVzZWxlY3QgYWxsIHdpdGggY2ggXHUwMDNjIDAgLSB0aGUgcG93ZXItb24gc3RhdGUuXG4rICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZVxuKyAqIEVFUFJPTSBwYXRocy5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaClcbit7XG4rXHR1OCB2YWwgPSAoY2ggXHUwMDNlPSAwKSA/IEJJVChjaCkgOiAwO1xuK1xuK1x0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfTVVYX0FERFIsIHZhbCwgTlVMTCwgMCwgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogQXJndW1lbnQgYnl0ZXMgdGhhdCBmb2xsb3cgYW4gSVNDIG9wY29kZS4gIFJldHVybnMgTlVMTCB3aXRoIEBuYXJncyBzZXRcbisgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuXG4rICovXG4rc3RhdGljIGNvbnN0IHU4ICphZHZhX3gxX2NwbGRfYXJncyh1OCBjbWQsIHU4ICpuYXJncylcbit7XG4rXHRzdGF0aWMgY29uc3QgdTggZW5fY2ZnX3RwW10gPSB7IDB4MDgsIDB4MDAgfTtcbitcdC8qIGNmZyBzZWN0b3Igb25seSAqL1xuK1x0c3RhdGljIGNvbnN0IHU4IGVyYXNlX2NmZ1tdID0geyAweDA0LCAweDAwLCAweDAwIH07XG4rXG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XG4rXHRcdCpuYXJncyA9IHNpemVvZihlbl9jZmdfdHApO1xuK1x0XHRyZXR1cm4gZW5fY2ZnX3RwO1xuK1x0Y2FzZSBDUExEX0NNRF9FUkFTRTpcbitcdFx0Km5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7XG4rXHRcdHJldHVybiBlcmFzZV9jZmc7XG4rXHRjYXNlIENQTERfQ01EX1JFU0VUX0FERFI6XG4rXHRjYXNlIENQTERfQ01EX1NFVF9ET05FOlxuK1x0XHQqbmFyZ3MgPSAzO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdGNhc2UgQ1BMRF9DTURfRElTX0NGRzpcbitcdGNhc2UgQ1BMRF9DTURfUkVGUkVTSDpcbitcdFx0Km5hcmdzID0gMjtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRkZWZhdWx0OlxuK1x0XHQqbmFyZ3MgPSAwO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4rLyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXG4re1xuK1x0Y29uc3QgdTggKmFyZ3M7XG4rXHR1OCBuYXJncztcbitcbitcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFx1MDAyNm5hcmdzKTtcbitcbitcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgY21kLCBhcmdzLCBuYXJncywgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogU2VuZCBhIDQtYnl0ZSBjb21tYW5kIGFuZCByZWFkIGJhY2sgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgU1RPUDogdHdvXG4rICogbWVzc2FnZXMgaW4gb25lIHRyYW5zZmVyIGlzIHRoZSBMYXR0aWNlIHdyaXRlIC1cdTAwM2UgcmVwZWF0ZWQgU1RBUlQgLVx1MDAzZSByZWFkLFxuKyAqIHNvIG5vIHByb3RvY29sLW1hbmdsaW5nIGZsYWcgaXMgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCxcbitcdFx0XHRcdCB1MzIgY21kX2JlLCB1OCAqb3V0LCB1OCBvdXRfbGVuKVxuK3tcbitcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xuK1xuK1x0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgXHUwMDI2Y21kLCA0LCBvdXQsIG91dF9sZW4pO1xuK31cbitcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcHRwX29jcCAqYnAsIHUzMiAqc3RhdHVzKVxuK3tcbitcdHU4IGJ1Zls0XTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfU1RBVFVTLCBidWYsIDQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdCpzdGF0dXMgPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuXG4rICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCxcbisgKiBhbmQgdGhlIHN0YXR1cyBpcyByZWFkIG9uY2UgbW9yZSBhZnRlciBpdCBleHBpcmVzIGJlZm9yZSBnaXZpbmcgdXAuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4re1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHRpbnQgZXJyID0gMCwgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXG4rXHRcdFx0XHRlcnIgfHwgKHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxuK1x0XHRcdFx0IShzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxuK1x0XHRcdFx0Q1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcbitcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIEtlZXAgdGhlIHRyYW5zcG9ydCBlcnJubyBzbyBpdCByZWFjaGVzIHVzZXJzcGFjZSBhcy1pczsgLUVJTyBpc1xuK1x0ICogcmVzZXJ2ZWQgZm9yIHRoZSBDUExEIGl0c2VsZiByZXBvcnRpbmcgRkFJTEVELlxuK1x0ICovXG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBXYWl0IGZvciBCVVNZIHRvIGNsZWFyLCBpZ25vcmluZyBhIHBlbmRpbmcgY2FuY2VsLiAgQW4gSVNDIGNvbW1hbmQgaXNzdWVkXG4rICogd2hpbGUgdGhlIHBhcnQgaXMgc3RpbGwgZXJhc2luZyBvciBwcm9ncmFtbWluZyBtYXkgbm90IGxhdGNoLCBzbyBhbiBhYm9ydFxuKyAqIGhhcyB0byB3YWl0IHRoZSBvcGVyYXRpb24gb3V0IGJlZm9yZSBpdCBjYW4gbGVhdmUgY29uZmlndXJhdGlvbiBtb2RlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfaWRsZShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4re1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHRpbnQgZXJyID0gMCwgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXG4rXHRcdFx0XHRlcnIgfHwgIShzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxuK1x0XHRcdFx0Q1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcbitcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIExlYXZlIHRyYW5zcGFyZW50IGNvbmZpZ3VyYXRpb24gbW9kZS4gIGNwbGRfaW5fY29uZmlnX21vZGUgc3RheXMgc2V0IHdoZW5cbisgKiBESVNfQ0ZHIGRvZXMgbm90IGdldCB0aHJvdWdoLCBzbyBhIGxhdGVyIGNsZWFudXAoKSB0cmllcyBhZ2FpbiByYXRoZXIgdGhhblxuKyAqIHJlY29yZGluZyBhbiBleGl0IHRoYXQgbmV2ZXIgaGFwcGVuZWQuXG4rICovXG4rc3RhdGljIHZvaWQgYWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCFicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhZHZhX3gxX2NwbGRfd2FpdF9pZGxlKGJwLCBDUExEX0VSQVNFX01TKTtcbitcbitcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJDUExEIGxlZnQgaW4gY29uZmlndXJhdGlvbiBtb2RlOiAlZFxcblwiLCBlcnIpO1xuK1x0ZWxzZVxuK1x0XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgYW5kIHRoZSBpbWFnZSBVU0VSQ09ERSB1bmRlciBvbmUgYnVzIGNsYWltLlxuKyAqIERvbmUgb25jZSwgb2ZmIHRoZSB1bnByaXZpbGVnZWQgZGV2bGluayBwYXRoLCB3aGljaCByZXBvcnRzIHRoZSBjYWNoZWRcbisgKiB2YWx1ZXMuICAtRUJVU1kgbWVhbnMgY3BsZF9sb2NrIGlzIGhlbGQsIHNvIHRoZSBjYWxsZXIgY2FuIHJldHJ5IHJhdGhlclxuKyAqIHRoYW4gd2FpdCBiZWhpbmQgYSBsb25nIENQTEQgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfaWQoc3RydWN0IHB0cF9vY3AgKmJwKVxuK3tcbitcdHUzMiBpZCwgdXNlcmNvZGU7XG4rXHR1OCBkYXRhWzRdO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZWxlYXNlO1xuK1x0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX0lELCBkYXRhLCA0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZGVzZWxlY3Q7XG4rXHRpZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcbitcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSwgZGF0YSwgNCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGRlc2VsZWN0O1xuK1x0dXNlcmNvZGUgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSk7XG4rXG4rXHQvKiBjcGxkX2lkIGlzIHRoZSB2YWxpZGl0eSBmbGFnIGZvciBib3RoLCBzbyBwdWJsaXNoIGl0IGxhc3QuICovXG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfdXNlcmNvZGUsIHVzZXJjb2RlKTtcbitcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCwgaWQpO1xuK2Rlc2VsZWN0OlxuK1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4rcmVsZWFzZTpcbitcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2RiZyhcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIkNQTEQgZGV2aWNlIElEIHVuYXZhaWxhYmxlOiAlZFxcblwiLCByZXQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi9cbitzdGF0aWMgc3NpemVfdFxuK2NwbGRfc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0IGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGludCBjb3VudCA9IDA7XG4rXHR1MzIgc3QgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEEgQ1BMRCBvcGVyYXRpb24gY2FuIGhvbGQgY3BsZF9sb2NrIGEgbG9uZyB0aW1lOyBzdGF5IGtpbGxhYmxlLiAqL1xuK1x0cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZWxlYXNlO1xuK1x0cmV0ID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4rXHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcbityZWxlYXNlOlxuK1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rb3V0OlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogRmxhZ3M6IHRoZSBuYW1lcyBvZiB0aGUgYml0cyB0aGF0IGFyZSBzZXQsIG5vdGhpbmcgd2hlbiBub25lIGlzLFxuK1x0ICogcmF0aGVyIHRoYW4gYSB2YWx1ZSBwZXIgYml0IGluIG9uZSBmaWxlLlxuK1x0ICovXG4rXHRpZiAoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpXG4rXHRcdGNvdW50ICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgXCJkb25lXCIpO1xuK1x0aWYgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKVxuK1x0XHRjb3VudCArPSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFwiJXNidXN5XCIsIGNvdW50ID8gXCIgXCIgOiBcIlwiKTtcbitcdGlmIChzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKVxuK1x0XHRjb3VudCArPSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFwiJXNmYWlsZWRcIixcbitcdFx0XHRcdCAgICAgICBjb3VudCA/IFwiIFwiIDogXCJcIik7XG4rXG4rXHRyZXR1cm4gY291bnQgKyBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFwiXFxuXCIpO1xuK31cbitzdGF0aWMgREVWSUNFX0FUVFJfQURNSU5fUk8oY3BsZF9zdGF0dXMpO1xuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgQ1BMRCBjb25maWd1cmF0aW9uIGZsYXNoIGZyb20gQGZ3IGFuZCBhY3RpdmF0ZSBpdC4gIFNlbGVjdGVkXG4rICogYnkgdGhlIFwiZncuY3BsZFwiIGZsYXNoIGNvbXBvbmVudDsgdGhlIFNQSSBmbGFzaCBrZWVwcyB0aGUgZGVmYXVsdCBwYXRoLlxuKyAqIFJ1bnMgdW5kZXIgY3BsZF9sb2NrIHdpdGggdGhlIGkyYyBhZGFwdGVyIGxvY2sgaGVsZCwgc28gYW4gRUVQUk9NIHJlYWRcbisgKiBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfZmxhc2goc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzaXplX3Qgb2Zmc2V0O1xuK1x0aW50IGVycjtcbitcdHUzMiBzdDtcbitcbitcdGlmICghZnctXHUwMDNlc2l6ZSB8fCBmdy1cdTAwM2VzaXplICUgQ1BMRF9QQUdFX1NJWkUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiaW1hZ2UgbXVzdCBiZSBhIHdob2xlIG51bWJlciBvZiAxNi1ieXRlIHBhZ2VzXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGVyciA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0ZXJyID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gcmVsZWFzZTtcbitcbitcdC8qIFNldCBiZWZvcmUgRU5fQ0ZHX1RQLCBub3QgYWZ0ZXI6IHRoZSBDUExEIG1heSBoYXZlIGVudGVyZWQgY29uZmlnXG4rXHQgKiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIGVycm9ycyBvciB0aGUgd2FpdCB0aW1lcyBvdXQsIGFuZCBvbmx5IHRoaXNcbitcdCAqIG1ha2VzIHRoZSBleGl0IHBhdGggc2VuZCBESVNfQ0ZHLiAgQSBzdHJheSBESVNfQ0ZHIGlzIGhhcm1sZXNzO1xuK1x0ICogbGVhdmluZyBjb25maWcgbW9kZSBlbmFibGVkIGlzIG5vdC5cbitcdCAqL1xuK1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7XG4rXG4rXHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCk7XG4rXHRpZiAoIWVycilcbitcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2NvbmZpZztcbitcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCJFcmFzaW5nXCIsXG4rXHRcdFx0XHRcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xuK1x0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FUkFTRSk7XG4rXHRpZiAoIWVycilcbitcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIENQTERfRVJBU0VfTVMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2NvbmZpZztcbitcbitcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuK1xuK1x0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCArPSBDUExEX1BBR0VfU0laRSkge1xuK1x0XHR1OCBhcmdzWzMgKyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTtcbitcbitcdFx0bWVtY3B5KFx1MDAyNmFyZ3NbM10sIGZ3LVx1MDAzZWRhdGEgKyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTtcbitcdFx0ZXJyID0gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXG4rXHRcdFx0XHQgICAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBleGl0X2NvbmZpZztcbitcbitcdFx0aWYgKCEob2Zmc2V0ICUgKENQTERfUEFHRV9TSVpFICogNjQpKSlcbitcdFx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssXG4rXHRcdFx0XHRcdFx0XHQgICBcIlByb2dyYW1taW5nXCIsXG4rXHRcdFx0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuK1x0XHRcdFx0XHRcdFx0ICAgb2Zmc2V0LCBmdy1cdTAwM2VzaXplKTtcbitcdH1cbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCJQcm9ncmFtbWluZ1wiLFxuK1x0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuK1x0XHRcdFx0XHQgICBmdy1cdTAwM2VzaXplLCBmdy1cdTAwM2VzaXplKTtcbitcbitcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfU0VUX0RPTkUpO1xuK1x0aWYgKCFlcnIpXG4rXHRcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9jb25maWc7XG4rXG4rXHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9jb25maWc7XG4rXHRpZiAoIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkpIHtcbitcdFx0ZXJyID0gLUVJTztcbitcdFx0Z290byBleGl0X2NvbmZpZztcbitcdH1cbitcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCJBY3RpdmF0aW5nXCIsXG4rXHRcdFx0XHRcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xuK1x0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9jb25maWc7XG4rXG4rXHQvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gdGhlIGV4aXRcbitcdCAqIHBhdGggbXVzdCBub3Qgc2VuZCBESVNfQ0ZHIGFmdGVyd2FyZHMgZXZlbiBpZiBhIGNoZWNrIGJlbG93IGZhaWxzLlxuK1x0ICovXG4rXHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4rXG4rXHQvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZywgc28gYSBzZWdtZW50IHRoYXQgaXMgbm90IGJhY2tcbitcdCAqIHlldCBtdXN0IG5vdCBiZSByZXBvcnRlZCBhcyBhIGZhaWxlZCB1cGRhdGU6IHJldHJ5IHRoZSByZXNlbGVjdFxuK1x0ICogcmF0aGVyIHRoYW4gc2FtcGxpbmcgdGhlIG11eCBvbmNlIGF0IGEgZml4ZWQgZGVsYXkuXG4rXHQgKi9cbitcdG1zbGVlcCgxNTAwKTtcbitcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXG4rXHRcdFx0XHQzMDAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4rXHRcdFx0XHRicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRlc2VsZWN0O1xuK1xuK1x0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDMwMDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZXNlbGVjdDtcbitcbitcdC8qIFJlcXVpcmUgRE9ORSBzZXQsIG5vdCBidXN5IGFuZCBubyBlcnJvciBjb2RlLCBhcyBtYWNoeG8yLXNwaS5jIGRvZXNcbitcdCAqIGFmdGVyIGEgcmVmcmVzaDogd2l0aG91dCBpdCBhIENSQyBvciBwcmVhbWJsZSBlcnJvciByZWFkcyBiYWNrIGFzIGFcbitcdCAqIHN1Y2Nlc3NmdWwgdXBkYXRlLlxuK1x0ICovXG4rXHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZGVzZWxlY3Q7XG4rXHRpZiAoIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkgfHwgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSB8fFxuK1x0ICAgIChzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRVJSKSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiQ1BMRCByZWZyZXNoIGxlZnQgc3RhdHVzIDB4JTA4eFxcblwiLCBzdCk7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiQ1BMRCBkaWQgbm90IGNvbWUgYmFjayBjb25maWd1cmVkXCIpO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIGRlc2VsZWN0O1xuK1x0fVxuK1xuK1x0LyogVGhlIGltYWdlIG9uIHRoZSBwYXJ0IGNoYW5nZWQsIHNvIHRoZSBjYWNoZWQgVVNFUkNPREUgaGFzIHRvby4gKi9cbitcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCwgMCk7XG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaWRfdHJpZWQsIGZhbHNlKTtcbitcdGJwLVx1MDAzZWNwbGRfaWRfYXR0ZW1wdHMgPSAwO1xuK1xuK2V4aXRfY29uZmlnOlxuK1x0YWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKGJwKTtcbitkZXNlbGVjdDpcbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK3JlbGVhc2U6XG4rXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbit1bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiArNDk5MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0cixcbitcdFx1MDAyNmRldl9hdHRyX2NwbGRfc3RhdHVzLmF0dHIsXG4gXHROVUxMLFxuIH07XG4gXG5AQCAtNDkwNCw2ICs1NjIxLDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKVxuIFx0XHRjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLVx1MDAzZWkyY19jbGspO1xuIFx0aWYgKGJwLVx1MDAzZW5faXJxcylcbiBcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtXHUwMDNlcGRldik7XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4gXHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZicC1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC01MDUyLDYgKzU3NzAsMjAgQEAgcHRwX29jcF9zeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0YnAtXHUwMDNlc3luYyA9IHN5bmM7XG4gXG4rXHQvKiBUaGUgYWRhcHRlciBjYW4gYXBwZWFyIGFmdGVyIHByb2JlLCBzbyByZWFkIHRoZSBJRCBmcm9tIGhlcmUgb25jZVxuK1x0ICogaXQgaGFzLiAgQSBjbGFpbSBjYW4gZmFpbCB0cmFuc2llbnRseSAtIHRoZSBmaXJtd2FyZSBtYXkgbm90IGdyYW50XG4rXHQgKiB0aGUgc2VnbWVudCBzdHJhaWdodCBhZnRlciBwb3dlci11cCAtIHNvIHJldHJ5IGEgYm91bmRlZCBudW1iZXIgb2ZcbitcdCAqIHRpbWVzLiAgLUVCVVNZIG1lYW5zIGNwbGRfbG9jayBpcyBoZWxkIGFuZCBkb2VzIG5vdCBjb3VudC5cbitcdCAqL1xuK1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkIFx1MDAyNlx1MDAyNiAhUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaWRfdHJpZWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yKSBcdTAwM2U9IDApIHtcbitcdFx0aW50IGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX2lkKGJwKTtcbitcbitcdFx0aWYgKGVyciAhPSAtRUJVU1kgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWVyciB8fCArK2JwLVx1MDAzZWNwbGRfaWRfYXR0ZW1wdHMgXHUwMDNlPSBDUExEX0lEX01BWF9BVFRFTVBUUykpXG4rXHRcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2lkX3RyaWVkLCB0cnVlKTtcbitcdH1cbitcbiBcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZicC1cdTAwM2VzeW5jX3dvcmssIEhaKTtcbiB9XG4gXG5AQCAtNTA4MCw2ICs1ODEyLDE0IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4rXHQvKiBCZWZvcmUgdGhlIGZpcnN0IGVycm9yIHBhdGggdGhhdCBjYWxscyBwdHBfb2NwX2RldGFjaCgpLCBzb1xuK1x0ICogbXV0ZXhfZGVzdHJveSgpIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXgsIGFuZCBiZWZvcmVcbitcdCAqIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCksIHNvIHRoaXMgc2VudGluZWwgY2Fubm90IG92ZXJ3cml0ZSBhblxuK1x0ICogYWRhcHRlciBudW1iZXIgdGhlIGkyYyBub3RpZmllciBzdG9yZXMgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cbitcdCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0YnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciA9IC0xO1xuK1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MDk5LDYgKzU4MzksOCBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoYnApO1xuK1xuIFx0YnAtXHUwMDNlcHRwID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNmJwLVx1MDAzZXB0cF9pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAoSVNfRVJSKGJwLVx1MDAzZXB0cCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihicC1cdTAwM2VwdHApO1xuQEAgLTUxMTksMTIgKzU4NjEsMTIgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0aWYgKElTX0VSUihicC1cdTAwM2VkcGxsKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJwLVx1MDAzZWRwbGwpO1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRwbGxfZGV2aWNlX2FsbG9jIGZhaWxlZFxcblwiKTtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X2Rldmxpbms7XG4gXHR9XG4gXG4gXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcdTAwMjZkcGxsX29wcywgYnApO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X2RwbGxfcHV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgT0NQX1NNQV9OVU07IGkrKykge1xuIFx0XHRicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLFxuQEAgLTUxNTAsNyArNTg5MiwxNiBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRcdGRwbGxfcGluX3VucmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgYnAtXHUwMDNlc21hW2ldLmRwbGxfcGluLCBcdTAwMjZkcGxsX3BpbnNfb3BzLCBcdTAwMjZicC1cdTAwM2VzbWFbaV0pO1xuIFx0XHRkcGxsX3Bpbl9wdXQoYnAtXHUwMDNlc21hW2ldLmRwbGxfcGluLCBcdTAwMjZicC1cdTAwM2VzbWFbaV0udHJhY2tlcik7XG4gXHR9XG4rXHQvKiBkcGxsX2RldmljZV9yZWdpc3RlcigpIHRha2VzIGEgc2Vjb25kIHJlZmVyZW5jZSBhbmQgc3RvcmVzIGJwOyBvbmx5XG4rXHQgKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyKCkgZHJvcHMgaXQuICBXaXRob3V0IHRoaXMgdGhlIGRldmljZSBzdGF5c1xuK1x0ICogdmlzaWJsZSB3aXRoIGEgcHJpdiBwb2ludGVyIGludG8gc3RvcmFnZSBkZXZsaW5rX2ZyZWUoKSB3aWxsIHJlbGVhc2UuXG4rXHQgKi9cbitcdGRwbGxfZGV2aWNlX3VucmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbitvdXRfZHBsbF9wdXQ6XG4gXHRkcGxsX2RldmljZV9wdXQoYnAtXHUwMDNlZHBsbCwgXHUwMDI2YnAtXHUwMDNldHJhY2tlcik7XG4rb3V0X2Rldmxpbms6XG4rXHQvKiBkZXRhY2goKSBkZXN0cm95cyBjcGxkX2xvY2s7IG5vIGRldmxpbmsgb3AgbWF5IHN0aWxsIHJlYWNoIGl0ICovXG4rXHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4gb3V0OlxuIFx0cHRwX29jcF9kZXRhY2goYnApO1xuIG91dF9kaXNhYmxlOlxuQEAgLTUxOTYsNiArNTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiwgKmNoaWxkID0gZGF0YTtcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiBcdHN0cnVjdCBwdHBfb2NwICpicDtcbiBcdGJvb2wgYWRkO1xuIFxuQEAgLTUyMTksMTEgKzU5NzEsMjEgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIGZvdW5kOlxuIFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbi1cdGlmIChhZGQpXG4rXHRhZGFwID0gaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKTtcbitcdGlmIChhZGQpIHtcbiBcdFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXCJpMmNcIik7XG4tXHRlbHNlXG4rXHRcdC8qIE9ubHkgdGhlIGNhcmQncyBvd24gY29udHJvbGxlcjogYSBtdXggY2hpbGQgYWRkZWQgb24gaXRcbitcdFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXG4rXHRcdCAqIHJlY3ljbGVkLCBzbyB0aGUgY2xhaW0gcmUtY2hlY2tzIHRoZSBwYXJlbnQgaXRzZWxmLlxuK1x0XHQgKi9cbitcdFx0aWYgKGJwLVx1MDAzZWkyY19jdHJsIFx1MDAyNlx1MDAyNiBhZGFwLVx1MDAzZWRldi5wYXJlbnQgPT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KVxuK1x0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgYWRhcC1cdTAwM2Vucik7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXG4rXHRcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikgPT0gYWRhcC1cdTAwM2VucilcbitcdFx0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIC0xKTtcbiBcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwiaTJjXCIpO1xuLVxuK1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjc6MjIuMTkzNjIxMjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTI2MDY1OTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRvaW5nLiBJIHNlZSBpdCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkYCwgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdGAsIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdGAsIGBNQUlOVEFJTkVSU2AsIGFuZCBjcnVjaWFsbHksIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgLiBTZWVtcyBsaWtlIGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUsIGEgbGlrZWx5IEFCSSBjaGFuZ2UsIHNvbWUgbmV0d29ya2luZyByZWxhdGVkIGNoYW5nZXMgYW5kIGEgZHJpdmVyIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgZWFjaCwgYnV0IGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGlzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSB3b3JrIGlzIHByb2JhYmx5LlxuXG5SaWdodCwgc28gd2hhdCdzIGBwdHBfb2NwLmNgPyBBIHF1aWNrIHNjYW4gdGVsbHMgbWUgaXQncyBhbiBPcGVuQ29tcHV0ZSBQVFAgY2xvY2sgZHJpdmVyLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJIHNob3VsZCBjaGVjayB3aGF0IGRldmljZXMgdGhpcyBkcml2ZXIgYWN0dWFsbHkgc3VwcG9ydHM7IGJpbmRpbmcgdG8gUENJIGRldmljZXMgc2VlbXMgdGhlIG1vc3QgbGlrZWx5LCBsZXQncyBxdWlja2x5IGdyZXAgaW4gdGhlIGBwdHBfb2NwLmNgIGZvciBhbnkgYHBjaV9kZXZpY2VfaWRgIGVudHJpZXMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZHJpdmVyIGlzIHVzZWQsIGFuZCB3aGF0IGRldmljZXMgaXQgaW50ZXJmYWNlcyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjI3OjMxLjQ1NDI4MzU1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNDUyOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTU9EVUxFX0RFVklDRV9UQUJMRVxcXFwocGNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcHRwL3B0cF9vY3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTMxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzI0LX07XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMjU6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHB0cF9vY3BfcGNpZGV2X2lkKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjc6MzEuNTcyMzMzNDk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4OTk1ODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUE9DUCBEZXZpY2UgSUQgVGFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQVFBPQ1AgZHJpdmVyIChgZHJpdmVycy9wdHAvcHRwX29jcC5jYCkgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBzcGVjaWZpYyBoYXJkd2FyZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIGNyaXRpY2FsIHN0ZXAgaW4gZGVidWdnaW5nL3VuZGVyc3RhbmRpbmcsIGlzIHRvIGV4YW1pbmUgdGhlIGBwY2lfZGV2aWNlX2lkYCB0YWJsZS4gVGhhdCB0YWJsZSBpcyB0aGUgaG9seSBncmFpbCBmb3IgYSBQQ0kgZGV2aWNlIGRyaXZlci4gSXQgY29udGFpbnMgdGhlIGFsbC1pbXBvcnRhbnQgdmVuZG9yIElEcywgZGV2aWNlIElEcywgYW5kIHNvbWV0aW1lcyBzdWJzeXN0ZW0gSURzLCB0aGF0IHRoZSBkcml2ZXIgdXNlcyB0byBjbGFpbSBkZXZpY2VzIGR1cmluZyBwcm9iZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRldmljZSBJRHMgbWF0Y2ggdGhlIGRldmljZXMgSSdtIGV4YW1pbmluZywgb3IgdW5kZXJzdGFuZCB3aHkgdGhleSBkb24ndC4gSXQgd2lsbCBnaXZlIG1lIGEgZmlyc3QgY2x1ZSBvbiB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjI3OjM0LjI2MjI5NDAyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxMDpcXHRcXHRcXHRcXHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXFxuMTMxMTpcXHRcXHRcXHRcXHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcXG4xMzEyOlxcdFxcdFxcdH0sXFxuMTMxMzpcXHRcXHR9LFxcbjEzMTQ6XFx0XFx0eyB9XFxuMTMxNTpcXHR9O1xcbjEzMTY6XFx0XFxuMTMxNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcXG4xMzE4OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxcbjEzMTk6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQ0VMRVNUSUNBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9mYl9yZXNvdXJjZSkgfSxcXG4xMzIwOlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE9ST0xJQSwgQVJUQ0FSRCwgXFx1MDAyNm9jcF9hcnRfcmVzb3VyY2UpIH0sXFxuMTMyMTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxcbjEzMjI6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFxcdTAwMjZvY3BfYWR2YV94MV9yZXNvdXJjZSkgfSxcXG4xMzIzOlxcdFxcdHsgfVxcbjEzMjQ6XFx0fTtcXG4xMzI1OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XFxuMTMyNjpcXHRcXG4xMzI3OlxcdHN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcXG4xMzI4OlxcdHN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcXG4xMzI5OlxcdFxcbjEzMzA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9jbG9ja1tdID0ge1xcbjEzMzE6XFx0XFx0eyAubmFtZSA9IFxcXCJOT05FXFxcIixcXHQudmFsdWUgPSAwIH0sXFxuMTMzMjpcXHRcXHR7IC5uYW1lID0gXFxcIlRPRFxcXCIsXFx0LnZhbHVlID0gMSB9LFxcbjEzMzM6XFx0XFx0eyAubmFtZSA9IFxcXCJJUklHXFxcIixcXHQudmFsdWUgPSAyIH0sXFxuMTMzNDpcXHRcXHR7IC5uYW1lID0gXFxcIlBQU1xcXCIsXFx0LnZhbHVlID0gMyB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzozNC4yNjI1ODQ3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDgxNTE3NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgQ3JpdGVyaWEqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBiYXNlZCBvbiBzb21lIG5lZ2F0aXZlIGNyaXRlcmlhLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJldHVybiBgZmFsc2VgIE9OTFkgaWYgYWxsIHRoZSBjaGFuZ2VkIGNvZGUgZmFsbHMgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBuZWdhdGl2ZSBjb25kaXRpb25zOiBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIGFuZCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG5cbkhtbSwgdGhpcyBgcHRwX29jcGAgZHJpdmVyLi4uIGRvZXMgaXQgZmFsbCB1bmRlciB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeT8gVGhhdCBzZWN0aW9uIHNwZWNpZmljYWxseSBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhlIGtpbmQgdGhhdCBuZWVkIGFjdHVhbCBoYXJkd2FyZSwgbm90IFFFTVUgZW11bGF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBhcHBseSB0byBgcHRwX29jcGA/XG5cbkkgbmVlZCBtb3JlIGluZm9ybWF0aW9uLiBMZXQgbWUgc2VlLi4uIEkgaGF2ZSBzb21lIFBDSSBJRHMgaGVyZTogYFBDSV9WRU5ET1JfSURfTUVUQWAsIGBQQ0lfREVWSUNFX0lEX01FVEFfVElNRUNBUkRgLCBhbmQgb3RoZXJzIGxpa2UgQ2VsZXN0aWNhLCBPcm9saWEsIGFuZCBBRFZBLiBUaGVzZSAqbG9vayogbGlrZSB0aW1lIGNhcmRzLiBUaGV5J3JlIGFsbCBmb3Igc3BlY2lhbGl6ZWQgUFRQIHRpbWUgY2FyZCBQQ0llIGNhcmRzLCByZWxhdGVkIHRvIHRoZSBPcGVuQ29tcHV0ZSBUaW1lIEFwcGxpYW5jZSBQcm9qZWN0LCB0aGUgXCJUaW1lIENhcmRcIi5cblxuUmlnaHQsIHRoaXMgaGFyZHdhcmUgaXNuJ3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVhc2lseSBlbXVsYXRlZCBpbiBRRU1VLiBUaGV5IHJlcXVpcmUgZGVkaWNhdGVkIGhhcmR3YXJlLiBNeSBuZXh0IGNoZWNrIHdvdWxkIGJlIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYW55IHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiByZWxhdGVkIHRvIGBwdHBfb2NwYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmaWxlIGFuZCBvdGhlciByZWxldmFudCBrZXJuZWwgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBzb21lIG1vY2ssIHZpcnR1YWwsIG9yIG90aGVyIHNvZnR3YXJlLWJhc2VkIG1ldGhvZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzo1OS4wNzc3NjI2NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzc0MzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdHBfb2NwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjEwMSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX1ZNVylcXHQrPSBwdHBfdm13Lm9cXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfT0NQKVxcdCs9IHB0cF9vY3Aub1xcbmRyaXZlcnMvcHRwL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QVFBfREZMX1RPRClcXHRcXHQrPSBwdHBfZGZsX3RvZC5vXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDg9c3RydWN0IG9jcF9yZWcge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTcyLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo3MzpzdHJ1Y3QgcHRwX29jcF9zZXJ2b19jb25mIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzQtXFx0dTMyXFx0c2Vydm9fb2Zmc2V0X3A7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODEtICogQ29tYmluZWQgc2Vydm8gKyBib2FyZC12YXJpYW50IHBhcmFtZXRlcnMgZm9yIEFEVkEgYm9hcmRzLlxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4MjogKiBFbWJlZGRlZCBpbiB0aGUgcmVzb3VyY2UgdGFibGUgLmV4dHJhIHNvIGEgc2luZ2xlIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KClcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODMtICogY2FuIGhhbmRsZSBib3RoIEFEVkEgYW5kIEFEVkEtWDEgd2l0aG91dCBwZXItdmFyaWFudCBpbml0IGZ1bmN0aW9ucy5cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODQtICovXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1OnN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg2OlxcdHN0cnVjdCBwdHBfb2NwX3NlcnZvX2NvbmZcXHRzZXJ2bztcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODctXFx0dTMyXFx0XFx0XFx0XFx0Zmxhc2hfc3RhcnQ7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjQzPXN0cnVjdCBib2FyZF9jb25maWdfcmVnIHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yNTEtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI1MjpzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjUzLVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjU4LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNTk6c3RydWN0IHB0cF9vY3BfZmlybXdhcmVfaGVhZGVyIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjYwLVxcdGNoYXIgbWFnaWNbNF07XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjY5LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNzA6c3RydWN0IHB0cF9vY3BfaTJjX2luZm8ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yNzEtXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yNzYtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI3NzpzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbyB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3OC1cXHRpbnQgaW5kZXg7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjgyLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyODM6c3RydWN0IHB0cF9vY3BfZXh0X3NyYyB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI4NC1cXHR2b2lkIF9faW9tZW1cXHRcXHQqbWVtO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyODU6XFx0c3RydWN0IHB0cF9vY3BcXHRcXHQqYnA7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI4NjpcXHRzdHJ1Y3QgcHRwX29jcF9leHRfaW5mb1xcdCppbmZvO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yODctXFx0aW50XFx0XFx0XFx0aXJxX3ZlYztcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yODktXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5MDplbnVtIHB0cF9vY3Bfc21hX21vZGUge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTEtXFx0U01BX01PREVfSU4sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjk0LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyOTU6c3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgcHRwX29jcF9zbWFfZnJlcVtdID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTYtXFx0RFBMTF9QSU5fRlJFUVVFTkNZXzFQUFMsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzAxLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMDI6c3RydWN0IHB0cF9vY3Bfc21hX2Nvbm5lY3RvciB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMwMzpcXHRlbnVtXFx0cHRwX29jcF9zbWFfbW9kZSBtb2RlO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMDQtXFx0Ym9vbFxcdGZpeGVkX2ZjbjtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0zMjQ9c3RydWN0IG9jcF9zbWFfb3Age1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMjUtXFx0Y29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciAqdGJsWzJdO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMjY6XFx0dm9pZCAoKmluaXQpKHN0cnVjdCBwdHBfb2NwICpicCk7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMyNzpcXHR1MzIgKCpnZXQpKHN0cnVjdCBwdHBfb2NwICpicCwgaW50IHNtYV9ucik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMyODpcXHRpbnQgKCpzZXRfaW5wdXRzKShzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBzbWFfbnIsIHUzMiB2YWwpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMjk6XFx0aW50ICgqc2V0X291dHB1dCkoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgc21hX25yLCB1MzIgdmFsKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzMwLX07XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzM1LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMzY6c3RydWN0IHB0cF9vY3Bfc2lnbmFsIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzM3LVxcdGt0aW1lX3RcXHRcXHRwZXJpb2Q7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzQ1LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozNDY6c3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNDctXFx0aW50IGxpbmU7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzU3PWVudW0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTM2NS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzY2OnN0cnVjdCBwdHBfb2NwIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzY3LVxcdHN0cnVjdCBwY2lfZGV2XFx0XFx0KnBkZXY7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzgzLVxcdHN0cnVjdCBmcmVxdWVuY3lfcmVnXFx0X19pb21lbSAqZnJlcV9pbltPQ1BfRlJFUV9OVU1dO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODQ6XFx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1xcdCpzaWduYWxfb3V0W09DUF9TSUdOQUxfTlVNXTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg1OlxcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcXHQqcHBzO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODY6XFx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1xcdCp0czA7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM4NzpcXHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXFx0KnRzMTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg4OlxcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcXHQqdHMyO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODk6XFx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1xcdCp0czM7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM5MDpcXHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXFx0KnRzNDtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzkxLVxcdHN0cnVjdCBvY3BfYXJ0X2dwaW9fcmVnIF9faW9tZW0gKmFydF9zbWE7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzk5LVxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKiphdHRyX2dyb3VwO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MDA6XFx0Y29uc3Qgc3RydWN0IHB0cF9vY3BfZWVwcm9tX21hcCAqZWVwcm9tX21hcDtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDAxLVxcdHN0cnVjdCBkZW50cnlcXHRcXHQqZGVidWdfcm9vdDtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDYtXFx0aW50XFx0XFx0XFx0bl9pcnFzO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MDc6XFx0c3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnRcXHRwb3J0W19fUE9SVF9DT1VOVF07XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQwOC1cXHRib29sXFx0XFx0XFx0ZndfbG9hZGVyO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQxOC1cXHR1NjRcXHRcXHRcXHRmd19jYXA7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQxOTpcXHRzdHJ1Y3QgcHRwX29jcF9zaWduYWxcXHRzaWduYWxbT0NQX1NJR05BTF9OVU1dO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MjA6XFx0c3RydWN0IHB0cF9vY3Bfc21hX2Nvbm5lY3RvciBzbWFbT0NQX1NNQV9OVU1dO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjEtXFx0Y29uc3Qgc3RydWN0IG9jcF9zbWFfb3AgKnNtYV9vcDtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00NTI9c3RydWN0IG9jcF9yZXNvdXJjZSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDU1LVxcdGludCBpcnFfdmVjO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NTY6XFx0aW50ICgqc2V0dXApKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ1Ny1cXHR2b2lkICpleHRyYTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NjEtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2MjpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfbWVtKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2MzpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfaTJjKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NDpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfc3BpKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NTpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfc2VyaWFsKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NjpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfZXh0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NzpzdGF0aWMgaW50IHB0cF9vY3BfZmJfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0Njg6c3RhdGljIGlycXJldHVybl90IHB0cF9vY3BfdHNfaXJxKGludCBpcnEsIHZvaWQgKnByaXYpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0Njk6c3RhdGljIGlycXJldHVybl90IHB0cF9vY3Bfc2lnbmFsX2lycShpbnQgaXJxLCB2b2lkICpwcml2KTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDcwOnN0YXRpYyBpbnQgcHRwX29jcF90c19lbmFibGUodm9pZCAqcHJpdiwgdTMyIHJlcSwgYm9vbCBlbmFibGUpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzE6c3RhdGljIGludCBwdHBfb2NwX3NpZ25hbF9mcm9tX3Blcm91dChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBnZW4sXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3Mi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXEpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzM6c3RhdGljIGludCBwdHBfb2NwX3NpZ25hbF9lbmFibGUodm9pZCAqcHJpdiwgdTMyIHJlcSwgYm9vbCBlbmFibGUpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzQ6c3RhdGljIGludCBwdHBfb2NwX3NtYV9zdG9yZShzdHJ1Y3QgcHRwX29jcCAqYnAsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IHNtYV9ucik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3NS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDc2OnN0YXRpYyBpbnQgcHRwX29jcF9hcnRfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NzctXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3ODpzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3OS1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00ODE9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcDtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00ODUtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ4NjpzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9mbGFzaChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00ODctXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3Vwc1tdO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00OTctXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ5ODpzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDk5LVxcdHUxNlxcdG9mZjtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MDYtXFx0Lm9mZiA9IGFkZHIsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MDc6XFx0LmxlbiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgcHRwX29jcCwgbWVtYmVyKSxcXHRcXHRcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUwODpcXHQuYnBfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB0cF9vY3AsIG1lbWJlcilcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTA5LVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMy1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTE0OnN0YXRpYyBzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIGZiX2VlcHJvbV9tYXBbXSA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTE1LVxcdHsgRUVQUk9NX0VOVFJZKDB4NDMsIGJvYXJkX2lkKSB9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxOS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTIwOnN0YXRpYyBzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIGFydF9lZXByb21fbWFwW10gPSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUyMS1cXHR7IEVFUFJPTV9FTlRSWSgweDIwMCArIDB4NDMsIGJvYXJkX2lkKSB9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzMS0jZGVmaW5lIE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSBcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzMjpcXHQubmFtZSA9ICNtZW1iZXIsIC5icF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcHRwX29jcCwgbWVtYmVyKVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MzMtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzNC0jZGVmaW5lIE9DUF9NRU1fUkVTT1VSQ0UobWVtYmVyKSBcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzNTpcXHRPQ1BfUkVTX0xPQ0FUSU9OKG1lbWJlciksIC5zZXR1cCA9IHB0cF9vY3BfcmVnaXN0ZXJfbWVtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzNi1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTM3LSNkZWZpbmUgT0NQX1NFUklBTF9SRVNPVVJDRShtZW1iZXIpIFxcXFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTM4OlxcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9zZXJpYWxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTM5LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDAtI2RlZmluZSBPQ1BfSTJDX1JFU09VUkNFKG1lbWJlcikgXFxcXFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1NDE6XFx0T0NQX1JFU19MT0NBVElPTihtZW1iZXIpLCAuc2V0dXAgPSBwdHBfb2NwX3JlZ2lzdGVyX2kyY1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDItXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0My0jZGVmaW5lIE9DUF9TUElfUkVTT1VSQ0UobWVtYmVyKSBcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU0NDpcXHRPQ1BfUkVTX0xPQ0FUSU9OKG1lbWJlciksIC5zZXR1cCA9IHB0cF9vY3BfcmVnaXN0ZXJfc3BpXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0NS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQ2LSNkZWZpbmUgT0NQX0VYVF9SRVNPVVJDRShtZW1iZXIpIFxcXFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTQ3OlxcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9leHRcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQ4LVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTU3Nj1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfZmJfcmVzb3VyY2VbXSA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01ODMtXFx0XFx0Lm9mZnNldCA9IDB4MDEwMTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1ODQ6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01ODUtXFx0XFx0XFx0LmluZGV4ID0gMCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTg2OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU4NzpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU4OC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU5Mi1cXHRcXHQub2Zmc2V0ID0gMHgwMTAyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU5MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU5NC1cXHRcXHRcXHQuaW5kZXggPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1OTU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTk2OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTk3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxLVxcdFxcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjAyOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAzLVxcdFxcdFxcdC5pbmRleCA9IDIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYwNDpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MDU6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MDYtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTAtXFx0XFx0Lm9mZnNldCA9IDB4MDExMTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjExOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjEyLVxcdFxcdFxcdC5pbmRleCA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYxMzpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MTQ6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTUtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTktXFx0XFx0Lm9mZnNldCA9IDB4MDExMjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjIwOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjIxLVxcdFxcdFxcdC5pbmRleCA9IDQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYyMjpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MjM6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MjQtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MjktXFx0XFx0Lm9mZnNldCA9IDB4MDEwQzAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MzA6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MzEtXFx0XFx0XFx0LmluZGV4ID0gNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjMyOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYzMzpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYzNC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYzOC1cXHRcXHQub2Zmc2V0ID0gMHgwMTBEMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDExLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Mzk6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NDAtXFx0XFx0XFx0LmluZGV4ID0gMSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjQxOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NDI6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjQzLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjQ3LVxcdFxcdC5vZmZzZXQgPSAweDAxMEUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY0ODpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0OS1cXHRcXHRcXHQuaW5kZXggPSAyLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NTA6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1MTpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF9zaWduYWxfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NTItXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NTYtXFx0XFx0Lm9mZnNldCA9IDB4MDEwRjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjU3OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjU4LVxcdFxcdFxcdC5pbmRleCA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1OTpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjYwOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2MS1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2NS1cXHRcXHQub2Zmc2V0ID0gMHgwMTEwMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NjY6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NjctXFx0XFx0XFx0LmluZGV4ID0gNCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjY4OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Njk6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjcwLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzIyLVxcdFxcdC5vZmZzZXQgPSAweDAwMTUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzIzOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfaTJjX2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzI0LVxcdFxcdFxcdC5uYW1lID0gXFxcInhpaWMtaTJjXFxcIixcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03MzktXFx0XFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzQwOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzQxLVxcdFxcdFxcdC5iYXVkID0gMTE1MjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc0Ni1cXHRcXHQub2Zmc2V0ID0gMHgwMDE3MDAwMCArIDB4MTAwMCwgLmlycV92ZWMgPSA0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo3NDc6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9zZXJpYWxfcG9ydCkge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NDgtXFx0XFx0XFx0LmJhdWQgPSAxMTUyMDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzUzLVxcdFxcdC5vZmZzZXQgPSAweDAwMTgwMDAwICsgMHgxMDAwLCAuaXJxX3ZlYyA9IDUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc1NDpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc1NS1cXHRcXHRcXHQuYmF1ZCA9IDU3NjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc2NC1cXHRcXHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc2NTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2ZsYXNoX2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzY2LVxcdFxcdFxcdC5uYW1lID0gXFxcInhpbGlueF9zcGlcXFwiLCAucGNpX29mZnNldCA9IDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzk1LVxcdHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Nzk2OlxcdFxcdC5zZXR1cCA9IHB0cF9vY3BfZmJfYm9hcmRfaW5pdCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Nzk3OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2Vydm9fY29uZikge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03OTgtXFx0XFx0XFx0LnNlcnZvX29mZnNldF9wID0gMHgyMDAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTgxNz1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYXJ0X3Jlc291cmNlW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODI0LVxcdFxcdC5vZmZzZXQgPSAweDAwMTYwMDAwICsgMHgxMDAwLCAuaXJxX3ZlYyA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgyNTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTgyNi1cXHRcXHRcXHQuYmF1ZCA9IDExNTIwMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04MzYtXFx0XFx0Lm9mZnNldCA9IDB4MzYwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgzNzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTgzOC1cXHRcXHRcXHQuaW5kZXggPSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4Mzk6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODQwOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODQxLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODQ1LVxcdFxcdC5vZmZzZXQgPSAweDM4MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDgsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg0NjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0Ny1cXHRcXHRcXHQuaW5kZXggPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NDg6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODQ5OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODUwLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODU0LVxcdFxcdC5vZmZzZXQgPSAweDM5MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDEwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NTU6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NTYtXFx0XFx0XFx0LmluZGV4ID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODU3OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1ODpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg1OS1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg2My1cXHRcXHQub2Zmc2V0ID0gMHgzQTAwMDAsIC5zaXplID0gMHgyMCwgLmlycV92ZWMgPSAxNCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODY0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODY1LVxcdFxcdFxcdC5pbmRleCA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg2NjpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4Njc6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NjgtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NzItXFx0XFx0Lm9mZnNldCA9IDB4M0IwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg3MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg3NC1cXHRcXHRcXHQuaW5kZXggPSA0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NzU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODc2OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODc3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODgyLVxcdFxcdC5vZmZzZXQgPSAweDAwMzMwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg4MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg4NC1cXHRcXHRcXHQuaW5kZXggPSA1LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4ODU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODg2OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODg3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODkxLVxcdFxcdC5vZmZzZXQgPSAweDAwMzEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gOSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODkyOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04OTMtXFx0XFx0XFx0Lm5hbWUgPSBcXFwic3BpX2FsdGVyYVxcXCIsIC5wY2lfb2Zmc2V0ID0gMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MDYtXFx0XFx0Lm9mZnNldCA9IDB4MzUwMDAwLCAuc2l6ZSA9IDB4MTAwLCAuaXJxX3ZlYyA9IDQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjkwNzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkwOC1cXHRcXHRcXHQubmFtZSA9IFxcXCJvY29yZXMtaTJjXFxcIixcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MjMtXFx0XFx0Lm9mZnNldCA9IDB4MDAxOTAwMDAsIC5pcnFfdmVjID0gNyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTI0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTI1LVxcdFxcdFxcdC5iYXVkID0gOTYwMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MzItXFx0e1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MzM6XFx0XFx0LnNldHVwID0gcHRwX29jcF9hcnRfYm9hcmRfaW5pdCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTM0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2Vydm9fY29uZikge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MzUtXFx0XFx0XFx0LnNlcnZvX29mZnNldF9wID0gMHgyMDAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTk0ND1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV9yZXNvdXJjZVtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk1MS1cXHRcXHQub2Zmc2V0ID0gMHgwMTAxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk1MjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk1My1cXHRcXHRcXHQuaW5kZXggPSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NTQ6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTU1OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTU2LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTYwLVxcdFxcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTYxOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTYyLVxcdFxcdFxcdC5pbmRleCA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk2MzpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NjQ6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjUtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjktXFx0XFx0Lm9mZnNldCA9IDB4MDEwNjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA2LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NzA6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NzEtXFx0XFx0XFx0LmluZGV4ID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTcyOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk3MzpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk3NC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk3OS1cXHRcXHQub2Zmc2V0ID0gMHgwMTBDMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDAsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4MDpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk4MS1cXHRcXHRcXHQuaW5kZXggPSA1LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5ODI6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTgzOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTg0LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTg4LVxcdFxcdC5vZmZzZXQgPSAweDAxMEQwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4OTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk5MC1cXHRcXHRcXHQuaW5kZXggPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5OTE6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk5MjpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF9zaWduYWxfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTMtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTctXFx0XFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTk4OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTk5LVxcdFxcdFxcdC5pbmRleCA9IDIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwMDA6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwMDE6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTAwMi1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwMzQtXFx0XFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTAzNTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwMzYtXFx0XFx0XFx0LmJhdWQgPSA5NjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNDEtXFx0XFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA0MjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNDMtXFx0XFx0XFx0LmJhdWQgPSAxMTUyMDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA1Ni1cXHRcXHQub2Zmc2V0ID0gMHgwMDMxMDQwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwNTc6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNTgtXFx0XFx0XFx0Lm5hbWUgPSBcXFwic3BpX2FsdGVyYVxcXCIsIC5wY2lfb2Zmc2V0ID0gMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDcxLVxcdFxcdC5vZmZzZXQgPSAweDE1MDAwMCwgLnNpemUgPSAweDEwMCwgLmlycV92ZWMgPSA3LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMDcyOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfaTJjX2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA3My1cXHRcXHRcXHQubmFtZSA9IFxcXCJvY29yZXMtaTJjXFxcIixcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDkwLVxcdHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MTpcXHRcXHQuc2V0dXAgPSBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDkzLVxcdFxcdFxcdC5zZXJ2byA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTExNi1cXHRcXHQub2Zmc2V0ID0gMHgwMTAxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMTc6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTE4LVxcdFxcdFxcdC5pbmRleCA9IDAsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMTk6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyMDpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjEtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTI1LVxcdFxcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyNjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjctXFx0XFx0XFx0LmluZGV4ID0gMSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyODpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTI5OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTEzMC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzQtXFx0XFx0Lm9mZnNldCA9IDB4MDEwNjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA2LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTM1OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTEzNi1cXHRcXHRcXHQuaW5kZXggPSAyLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTM3OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMzg6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTM5LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE0My1cXHRcXHQub2Zmc2V0ID0gMHgwMTExMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE1LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTQ0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE0NS1cXHRcXHRcXHQuaW5kZXggPSAzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTQ2OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNDc6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTQ4LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE1Mi1cXHRcXHQub2Zmc2V0ID0gMHgwMTEyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE2LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTUzOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE1NC1cXHRcXHRcXHQuaW5kZXggPSA0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTU1OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNTY6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTU3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE2Mi1cXHRcXHQub2Zmc2V0ID0gMHgwMTBDMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDAsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNjM6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTY0LVxcdFxcdFxcdC5pbmRleCA9IDUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNjU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE2NjpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNjctXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTcxLVxcdFxcdC5vZmZzZXQgPSAweDAxMEQwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNzI6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTczLVxcdFxcdFxcdC5pbmRleCA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNzQ6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNzU6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE3Ni1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExODAtXFx0XFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4MTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExODItXFx0XFx0XFx0LmluZGV4ID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4MzpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4NDpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF9zaWduYWxfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTg1LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4OS1cXHRcXHQub2Zmc2V0ID0gMHgwMTBGMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDEzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkwOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE5MS1cXHRcXHRcXHQuaW5kZXggPSAzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkyOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkzOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExOTQtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTk4LVxcdFxcdC5vZmZzZXQgPSAweDAxMTAwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExOTk6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjAwLVxcdFxcdFxcdC5pbmRleCA9IDQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyMDE6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyMDI6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIwMy1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyMzUtXFx0XFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTIzNjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyMzctXFx0XFx0XFx0LmJhdWQgPSA5NjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDItXFx0XFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI0MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDQtXFx0XFx0XFx0LmJhdWQgPSAxMTUyMDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI2NS1cXHRcXHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyNjY6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNjctXFx0XFx0XFx0Lm5hbWUgPSBcXFwieGlsaW54X3NwaVxcXCIsIC5wY2lfb2Zmc2V0ID0gMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjgyLVxcdFxcdC5vZmZzZXQgPSAweDAwMTUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI4MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyODQtXFx0XFx0XFx0Lm5hbWUgPSBcXFwieGlpYy1pMmNcXFwiLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTctXFx0e1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjk4OlxcdFxcdC5zZXR1cCA9IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjk5OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfYWR2YV9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDAtXFx0XFx0XFx0LnNlcnZvID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMTYtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMTc6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMTgtXFx0eyBQQ0lfREVWSUNFX0RBVEEoTUVUQSwgVElNRUNBUkQsIFxcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNC19O1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMjYtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMjc6c3RhdGljIERFRklORV9NVVRFWChwdHBfb2NwX2xvY2spO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI4OnN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyOS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MDAuMjA1NTEzMjcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODA1ODQ0NzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgV29ydGhGdXp6aW5nIENyaXRlcmlhKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQncyBlc3NlbnRpYWxseSBvdXRsaW5pbmcgdGhlICpuZWdhdGl2ZSogY3JpdGVyaWEg4oCTIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSBuby1nbyB6b25lcy4gSXQncyB0ZWxsaW5nIG1lLCBkb24ndCB3YXN0ZSB0aW1lIGZ1enppbmcgdGhpcyBjb2RlLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2F0ZWdvcmllcyBoZXJlOlxuXG4qICAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgZG9jcywgY29tbWVudHMsIHVzZXItc3BhY2UgdG9vbHMsIGxvZ2dpbmcgdGhhdCdzIHB1cmVseSBkZWNvcmF0aXZlLCBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gVGhpcyBpcyBiYXNpY2FsbHkgc3R1ZmYgdGhhdCB3b24ndCBjaGFuZ2UgdGhlIGNvbXBpbGVkIGtlcm5lbC4gTWFrZXMgc2Vuc2UuXG4qICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVmVuZG9yLXNwZWNpZmljIHN0dWZmIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpbmdzIGxpa2Ugc3BlY2lmaWMgUENJZSBjYXJkcywgU21hcnROSUNzLCBHUFUgZHJpdmVycy4gVGhpcyBpcyB3aGF0IEkgaGF2ZSB0byBmb2N1cyBvbi5cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIG9ubHkgdXNlZCBkdXJpbmcgaG90LXVucGx1Zywgb3IgY29kZSBleGNsdXNpdmUgdG8gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIHNvIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc2V0dXAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgbGV0J3MgZm9jdXMgb24gYHB0cF9vY3BgLiBUaGlzIGlzIGFuIE9wZW4gQ29tcHV0ZSBQcm9qZWN0IChPQ1ApIFRpbWUgQ2FyZCBkcml2ZXIuIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIOKAkyBpcyB0aGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzPyBPa2F5LCB5ZXMsIGl0J3MgdGhlIGRyaXZlciBmb3IgdGhlIE9DUCBUaW1lQ2FyZCwgd2hpY2ggaXMgYSBwaHlzaWNhbCBQQ0llIGNhcmQgdGhhdCBwcm92aWRlcyBhdG9taWMgY2xvY2ssIEdOU1MsIGFuZCBQVFAgdGltaW5nIHJlZmVyZW5jZSBmb3Igc2VydmVycyBpbiBkYXRhY2VudGVycy4gTWV0YSBpbml0aWF0ZWQgdGhpcywgSSByZWNhbGwuIEkga25vdyB0aGUgVGltZUNhcmQgZGV2aWNlcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgUENJIGRldmljZXM6IE1ldGEgVGltZUNhcmQsIENlbGVzdGljYSBUaW1lQ2FyZCwgT3JvbGlhIEFydENhcmQsIEFEVkEgVGltZUNhcmQgYW5kIEFEVkEgVGltZUNhcmQgWDEuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgTWV0YSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkPyBObyEgUUVNVSAqZG9lc24ndCogZW11bGF0ZSB0aGlzIGhhcmR3YXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludCEgU28sIHNpbmNlIHRoZSBUaW1lQ2FyZCByZWxpZXMgb24gcGh5c2ljYWwgaGFyZHdhcmUsIGl0IGZhbGxzIHVuZGVyIHRoYXQgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogY2F0ZWdvcnkuXG5cbk5vdywgYmVmb3JlIEkgbWFrZSBhIGZpbmFsIGRldGVybWluYXRpb24sIEkgbmVlZCB0byB2ZXJpZnk6IGNhbiBgcHRwX29jcGAgYmUgcHJvYmVkIG9yIGluc3RhbnRpYXRlZCAqd2l0aG91dCogdGhlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmU/IExldCBtZSBjaGVjayBob3cgdGhlIGRyaXZlciBpcyByZWdpc3RlcmVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGhhdmUgYW4gYWx0ZXJuYXRpdmUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NDksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MDguMjYzOTYyMzczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ2OTg4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvcHRwX29jcC5jPTU5OTc9cHRwX29jcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxNC1cXHR3aGF0ID0gXFxcInB0cF9vY3AgZHJpdmVyXFxcIjtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjAxNTpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZwdHBfb2NwX2RyaXZlcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYwMTYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MDguMzY4NjY4MjU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1ODQ3MTI5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFBUUCBJbml0aWFsaXphdGlvbiBhbmQgRHJpdmVyIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgUFRQIGNvbXBvbmVudHMgYXJlIGludGVyYWN0aW5nLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBwdHBfb2NwX2luaXRgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIHNldHRpbmcgdXAgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBjbG9ja3MsIGFuZCBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgc3luY2hyb25pemF0aW9uIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgcGVyaGFwcyBkdXJpbmcgZWFybHkgYm9vdD8gQXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgc2V0IHVwIGNvcnJlY3RseT8gQW55IGlzc3VlcyBhcm91bmQgY2xvY2sgc291cmNlIHNlbGVjdGlvbj8gQW5kIHRoZW4gSSdsbCBtb3ZlIHRvIHRoZSBgcHRwX29jcF9kcml2ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaXQncyBoYW5kbGluZyB0aGUgUFRQIHRpbWVzdGFtcHMsIGFuZCBob3cgaXQncyBleHBvc2VkIHRvIHRoZSB1c2VyIHNwYWNlLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcz8gQW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIG9yIGRhdGEgdHJhbnNmZXI/IEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYm90aCBvZiB0aGVzZSBtb2R1bGVzLCBlc3BlY2lhbGx5IHRoZSBjYXNlcyB3aGVyZSB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbHMuIEkgYW0gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGlzc3VlcyBhcm91bmQgZGF0YSByYWNlcyBvciBob3cgdGhleSBhcmUgaGFuZGxlZCwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIGluIGVkZ2UgY2FzZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZW5kLXRvLWVuZCBQVFAgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjU0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MTMuOTUzMzgzOTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk5MDpcXHR9XFxuNTk5MTpcXHRcXG41OTkyOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHRwX29jcF9pMmNfbm90aWZpZXIgPSB7XFxuNTk5MzpcXHRcXHQubm90aWZpZXJfY2FsbCA9IHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwsXFxuNTk5NDpcXHR9O1xcbjU5OTU6XFx0XFxuNTk5NjpcXHRzdGF0aWMgaW50IF9faW5pdFxcbjU5OTc6XFx0cHRwX29jcF9pbml0KHZvaWQpXFxuNTk5ODpcXHR7XFxuNTk5OTpcXHRcXHRjb25zdCBjaGFyICp3aGF0O1xcbjYwMDA6XFx0XFx0aW50IGVycjtcXG42MDAxOlxcdFxcbjYwMDI6XFx0XFx0cHRwX29jcF9kZWJ1Z2ZzX2luaXQoKTtcXG42MDAzOlxcdFxcbjYwMDQ6XFx0XFx0d2hhdCA9IFxcXCJ0aW1lY2FyZCBjbGFzc1xcXCI7XFxuNjAwNTpcXHRcXHRlcnIgPSBjbGFzc19yZWdpc3RlcihcXHUwMDI2dGltZWNhcmRfY2xhc3MpO1xcbjYwMDY6XFx0XFx0aWYgKGVycilcXG42MDA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjYwMDg6XFx0XFxuNjAwOTpcXHRcXHR3aGF0ID0gXFxcImkyYyBub3RpZmllclxcXCI7XFxuNjAxMDpcXHRcXHRlcnIgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmkyY19idXNfdHlwZSwgXFx1MDAyNnB0cF9vY3BfaTJjX25vdGlmaWVyKTtcXG42MDExOlxcdFxcdGlmIChlcnIpXFxuNjAxMjpcXHRcXHRcXHRnb3RvIG91dF9ub3RpZmllcjtcXG42MDEzOlxcdFxcbjYwMTQ6XFx0XFx0d2hhdCA9IFxcXCJwdHBfb2NwIGRyaXZlclxcXCI7XFxuNjAxNTpcXHRcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZwdHBfb2NwX2RyaXZlcik7XFxuNjAxNjpcXHRcXHRpZiAoZXJyKVxcbjYwMTc6XFx0XFx0XFx0Z290byBvdXRfcmVnaXN0ZXI7XFxuNjAxODpcXHRcXG42MDE5OlxcdFxcdHJldHVybiAwO1xcbjYwMjA6XFx0XFxuNjAyMTpcXHRvdXRfcmVnaXN0ZXI6XFxuNjAyMjpcXHRcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2aTJjX2J1c190eXBlLCBcXHUwMDI2cHRwX29jcF9pMmNfbm90aWZpZXIpO1xcbjYwMjM6XFx0b3V0X25vdGlmaWVyOlxcbjYwMjQ6XFx0XFx0Y2xhc3NfdW5yZWdpc3RlcihcXHUwMDI2dGltZWNhcmRfY2xhc3MpO1xcbjYwMjU6XFx0b3V0OlxcbjYwMjY6XFx0XFx0cHRwX29jcF9kZWJ1Z2ZzX2ZpbmkoKTtcXG42MDI3OlxcdFxcdHByX2VycihLQlVJTERfTU9ETkFNRSBcXFwiOiBmYWlsZWQgdG8gcmVnaXN0ZXIgJXM6ICVkXFxcXG5cXFwiLCB3aGF0LCBlcnIpO1xcbjYwMjg6XFx0XFx0cmV0dXJuIGVycjtcXG42MDI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MTMuOTUzNTg5NjI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNzUwOTUwNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQURWQSB4MSBUQVAgQm9hcmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBwdHBfb2NwX2RyaXZlcmAuIEl0J3MgZGVmaW5lZCBhcyBhIHN0YW5kYXJkIGBzdHJ1Y3QgcGNpX2RyaXZlcmAsIG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuIFRoZSBpbnRlcmVzdGluZyBiaXQsIGFzIGFsd2F5cywgaXMgaG93IGl0IHByb2Jlcy4gSXQncyB0cmlnZ2VyZWQgYnkgc3BlY2lmaWMgUENJIGRldmljZSBJRHMsIHJpZ2h0PyBBbmQgSSBzZWUgdGhlIHRhYmxlOiBgcHRwX29jcF9wY2lkZXZfaWRgLlxuXG5SaWdodCwgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEFEVkEgeDEgVEFQIGJvYXJkcyAoYFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRF9YMSwgXHUwMDI2b2NwX2FkdmFfeDFfcmVzb3VyY2UpYCkuIFRoZXNlIGFyZSBhY3R1YWwgUENJZSBjYXJkcyB3aXRoIHRoZSBQQ0kgSUQgMHhhZDVhOjB4MDQxMC4gVGhlIHBhdGNoJ3MgY29yZSBmdW5jdGlvbnMgcmVsYXRlIHRvIENQTEQgZmxhc2ggdXBkYXRlcyBhbmQgcmVhZGluZyBpdHMgc3RhdHVzIG9uICp0aG9zZSogYm9hcmRzOiBgYWR2YV94MV9jcGxkX2ZsYXNoYCwgYGFkdmFfeDFfY3BsZF9yZWFkX2lkYCwgcGx1cyB0aGUgc3lzZnMgYXR0cmlidXRlIGBjcGxkX3N0YXR1c2AuIEl0J3MgYWRkaW5nIGRldmxpbmsgc3VwcG9ydCBmb3IgZmxhc2hpbmcgYW5kIGluZm9ybWF0aW9uIHJldHJpZXZhbCwgaW5jbHVkaW5nIGBwdHBfb2NwX2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgYHB0cF9vY3BfZGV2bGlua19pbmZvX2dldGAsIGFuZCBgcHRwX29jcF9zeW5jX3dvcmtgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGVycm9yIGZpeGVzIGluIGBwdHBfb2NwX3Byb2JlYCAvIGBwdHBfb2NwX2RldGFjaGAsIGFzIHdlbGwgYXMgbXV0ZXggaW5pdGlhbGl6YXRpb24uXG5cbk5vdywgaG9sZCBvbi4uLiB0aGF0IGBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsYCBmdW5jdGlvbi4gSXQgKnJlZ2lzdGVycyogYW4gSTJDIGFkYXB0ZXIuIEkgd29uZGVyLCBkb2VzIGl0IG1hdGNoIGFuIEkyQyBhZGFwdGVyIGp1c3QgZm9yIHRoZXNlIFRBUCBib2FyZHMsIG9yIGNvdWxkIGl0IHBvdGVudGlhbGx5IGJlIGludm9rZWQgb24gb3RoZXIgSTJDIGJ1cyBldmVudHM/IEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0LiBCZXR0ZXIgbG9vayBhdCB0aGUgbGluZXMgNTk0Ni01OTg5IG9mIGBwdHBfb2NwLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBicm9hZCBidXMgbWF0Y2hpbmcgZ29pbmcgb24uIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoaXMgSTJDIG5vdGlmaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU0NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjI4OjM1LjcwNDU0MzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk0NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk0NTpcXHRzdGF0aWMgaW50XFxuNTk0NjpcXHRwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuNTk0NzpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxcbjU5NDg6XFx0e1xcbjU5NDk6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2LCAqY2hpbGQgPSBkYXRhO1xcbjU5NTA6XFx0XFx0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xcbjU5NTE6XFx0XFx0c3RydWN0IHB0cF9vY3AgKmJwO1xcbjU5NTI6XFx0XFx0Ym9vbCBhZGQ7XFxuNTk1MzpcXHRcXG41OTU0OlxcdFxcdHN3aXRjaCAoYWN0aW9uKSB7XFxuNTk1NTpcXHRcXHRjYXNlIEJVU19OT1RJRllfQUREX0RFVklDRTpcXG41OTU2OlxcdFxcdGNhc2UgQlVTX05PVElGWV9ERUxfREVWSUNFOlxcbjU5NTc6XFx0XFx0XFx0YWRkID0gYWN0aW9uID09IEJVU19OT1RJRllfQUREX0RFVklDRTtcXG41OTU4OlxcdFxcdFxcdGJyZWFrO1xcbjU5NTk6XFx0XFx0ZGVmYXVsdDpcXG41OTYwOlxcdFxcdFxcdHJldHVybiAwO1xcbjU5NjE6XFx0XFx0fVxcbjU5NjI6XFx0XFxuNTk2MzpcXHRcXHRpZiAoIWkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCkpXFxuNTk2NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG41OTY1OlxcdFxcbjU5NjY6XFx0XFx0ZGV2ID0gY2hpbGQ7XFxuNTk2NzpcXHRcXHR3aGlsZSAoKGRldiA9IGRldi1cXHUwMDNlcGFyZW50KSlcXG41OTY4OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZWRyaXZlciBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGRldi1cXHUwMDNlZHJpdmVyLVxcdTAwM2VuYW1lLCBLQlVJTERfTU9ETkFNRSkpXFxuNTk2OTpcXHRcXHRcXHRcXHRnb3RvIGZvdW5kO1xcbjU5NzA6XFx0XFx0cmV0dXJuIDA7XFxuNTk3MTpcXHRcXG41OTcyOlxcdGZvdW5kOlxcbjU5NzM6XFx0XFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG41OTc0OlxcdFxcdGFkYXAgPSBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpO1xcbjU5NzU6XFx0XFx0aWYgKGFkZCkge1xcbjU5NzY6XFx0XFx0XFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXFxcImkyY1xcXCIpO1xcbjU5Nzc6XFx0XFx0XFx0LyogT25seSB0aGUgY2FyZCdzIG93biBjb250cm9sbGVyOiBhIG11eCBjaGlsZCBhZGRlZCBvbiBpdFxcbjU5Nzg6XFx0XFx0XFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXFxuNTk3OTpcXHRcXHRcXHQgKiByZWN5Y2xlZCwgc28gdGhlIGNsYWltIHJlLWNoZWNrcyB0aGUgcGFyZW50IGl0c2VsZi5cXG41OTgwOlxcdFxcdFxcdCAqL1xcbjU5ODE6XFx0XFx0XFx0aWYgKGJwLVxcdTAwM2VpMmNfY3RybCBcXHUwMDI2XFx1MDAyNiBhZGFwLVxcdTAwM2VkZXYucGFyZW50ID09IFxcdTAwMjZicC1cXHUwMDNlaTJjX2N0cmwtXFx1MDAzZWRldilcXG41OTgyOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGFkYXAtXFx1MDAzZW5yKTtcXG41OTgzOlxcdFxcdH0gZWxzZSB7XFxuNTk4NDpcXHRcXHRcXHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXFxuNTk4NTpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2kyY19hZGFwX25yKSA9PSBhZGFwLVxcdTAwM2VucilcXG41OTg2OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIC0xKTtcXG41OTg3OlxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZicC1cXHUwMDNlZGV2LmtvYmosIFxcXCJpMmNcXFwiKTtcXG41OTg4OlxcdFxcdH1cXG41OTg5OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyODozNS43MDQ4NzE3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTc0NzUxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbGAgZnVuY3Rpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBUaGUgY29tbWVudCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aGVuIGFuIEkyQyBkZXZpY2UgaXMgYWRkZWQgb3IgcmVtb3ZlZC4gSW50ZXJlc3RpbmcuIFNvLCBpdCdzIGEgaG90cGx1ZyBub3RpZmljYXRpb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29kZSBibG9jay4gSXQgc3RhcnRzIGJ5IHRyYXZlcnNpbmcgdGhlIGRldmljZSBoaWVyYXJjaHkgdXB3YXJkcyBmcm9tIHRoZSBjaGlsZCBkZXZpY2UgKGBkZXYgPSBjaGlsZGApIGFuZCBsb29rcyBmb3IgYSBwYXJlbnQgdGhhdCBoYXMgYSBkcml2ZXIgbmFtZWQgXCJwdHBfb2NwLlwiIFRoZSBsb29wIG1ha2VzIHBlcmZlY3Qgc2Vuc2Ug4oCTIHdlJ3JlIHRyYWNpbmcgYmFjayB0aGUgZGV2aWNlJ3MgYW5jZXN0cnkgdG8gc2VlIGlmIGl0J3MgY29ubmVjdGVkIHRvIHNvbWV0aGluZyByZWxldmFudC4gVGhlIGBzdHJjbXBgIGlzIGhvdyBpdCdzIGNoZWNraW5nIHRoZSBuYW1lLCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBzbyB0aGUgY29kZSBqdW1wcyB0byBgZm91bmRgIGlmIHRoYXQgZHJpdmVyIGV4aXN0cy4gQW5kIGlmIGl0IGRvZXNuJ3QgZmluZCBhIGBwdHBfb2NwYCBkcml2ZXIgYXR0YWNoZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDAuXG5cbldhaXQgYSBzZWNvbmTigKYgSWYgbm8gYHB0cF9vY3BgIHBhcmVudCBpcyBmb3VuZCwgaXQgcmV0dXJucyB3aXRob3V0IGRvaW5nIGFueXRoaW5nPyBUaGF0IHNlZW1z4oCmIHJlc3RyaWN0aXZlLiBJdCBzZWVtcyB0byBzdWdnZXN0IHRoaXMgd2hvbGUgZnVuY3Rpb24gaXMgb25seSByZWxldmFudCBpZiBhIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gYSBgcHRwX29jcGAgZGV2aWNlLiBBbmQgSSdtIHByZXR0eSBzdXJlIHRoYXQgYHB0cF9vY3BgIGlzIG9ubHkgaW5zdGFudGlhdGVkIGlmIGl0IHByb2JlcyB3aXRoIGEgUENJIElEIGluIHRoYXQgYHB0cF9vY3BfcGNpZGV2X2lkYCBhcnJheS5cblxuU28gaGVyZSdzIHRoZSBxdWVzdGlvbjogaW4gYSBRRU1VIGVudmlyb25tZW50LCBpcyB0aGVyZSAqYW55KiB2aXJ0dWFsIGJ1cyBvciBlbXVsYXRpb24gdGhhdCAqY2FuKiBhY3R1YWxseSBpbnN0YW50aWF0ZSB0aGUgYHB0cF9vY3BgIGRldmljZT8gSSdtIGRyYXdpbmcgYSBibGFuayByaWdodCBub3cuIEl0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgYmxpbmQgc3BvdCBpbiBteSBzZXR1cC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUncyBldmVuIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBub3RpZmljYXRpb24gaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHRoaW5rIEknbGwgbG9vayBhcm91bmQgaW4gdGhlIGtlcm5lbCB0cmVlIGZvciBvdGhlciBpbnN0YW5jZXMgd2hlcmUgYHB0cF9vY3BgIGRldmljZXMgYXJlIGNyZWF0ZWQuIEl0IG1pZ2h0IG9mZmVyIHNvbWUgaW5zaWdodCBpbnRvIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIG9yIGFsdGVybmF0ZSBpbnN0YW50aWF0aW9uIG1ldGhvZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MzkuNjc5NjI2MTk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAyMDM5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXCJwdHBfb2NwXFxcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjI2OT1fX3B0cF9vY3BfZ2V0X21lbShzdHJ1Y3QgcHRwX29jcCAqYnAsIHJlc291cmNlX3NpemVfdCBzdGFydCwgaW50IHNpemUpXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTIyNzAte1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyMjcxOlxcdHN0cnVjdCByZXNvdXJjZSByZXMgPSBERUZJTkVfUkVTX01FTV9OQU1FRChzdGFydCwgc2l6ZSwgXFxcInB0cF9vY3BcXFwiKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjI3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6NDEuOTgxNjcwNjE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MTgyNjQ3NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgXCJwdHBfb2NwXCIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGRpZG4ndCBpbW1lZGlhdGVseSByZXZlYWwgYW55IHJlZCBmbGFncy4gQnV0LCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gIFwicHRwX29jcFwiIGlzbid0IGJpbmRpbmcgYW55dGhpbmcgc3BlY2lmaWMgaW4gbXkgbWVudGFsIG1vZGVsLCBzbyBJIHdlbnQgZGVlcGVyLiAgSSBxdWlja2x5IHJlZmVyZW5jZWQgdGhlIFBDSSB2ZW5kb3IgSURzLCB0aGUgTUVUQSwgQURWQSwgQ0VMRVNUSUNBLCBhbmQgT1JPTElBIElEcywgYWxsIG9mIHdoaWNoIGFyZSBhIG5vbi1lbXVsYXRlZCBieSBRRU1VIGFuZCBHQ0UsIGEgY29tbW9uIGluZGljYXRvciBvZiBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXG5cblRoZSBkZWNpc2l2ZSBmYWN0b3IgaXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGlzIHNlY3Rpb24gZGVmaW5lcyB3aGVuIGEgcGF0Y2ggc2hvdWxkICpub3QqIGJlIGZ1enplZCAoV29ydGhGdXp6aW5nPWZhbHNlKS4gSSBtZXRpY3Vsb3VzbHkgcmVhZCB0aHJvdWdoIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIEl0IGNsZWFybHkgc3RhdGVzIHRoYXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGFyZSBleGNsdWRlZC4gIFRoaXMgZGlyZWN0bHkgaGl0cyBob21lOiBzcGVjaWZpY2FsbHkgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuIEkga25vdyB0aGlzIHZlcnkgd2VsbCFcblxuU2VjdGlvbiAxIHJlaW5mb3JjZXMgdGhpcy4gUmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudC4gSWYgY29kZSBjYW4ndCBleGVjdXRlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0J3MgYSBuby1nbyBmb3IgZnV6emluZy4gTm8gbWF0dGVyIGhvdyBjbGV2ZXIgb3IgY29tcGxleCwgaWYgaXQncyBub3QgKnJlYWNoYWJsZSosIGl0J3Mgbm90IGZ1enplZC5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBwYXRjaCBjb250ZW50LiBJIG5lZWQgdG8gYmUgZXhhY3QuIEknbSBzZWVpbmcgY2hhbmdlcyBpbjpcblxuMS4gIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkYFxuMi4gIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RgXG4zLiAgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0YFxuNC4gIGBNQUlOVEFJTkVSU2BcbjUuICBgZHJpdmVycy9wdHAvcHRwX29jcC5jYFxuXG5UaGUgZG9jdW1lbnRhdGlvbiBhbmQgYE1BSU5UQUlORVJTYCBjaGFuZ2VzIGFyZSBwdXJlIGRvY3VtZW50YXRpb24uIE5vdCBleGVjdXRhYmxlLiBUaGF0J3MgYSBnaXZlbi4gQnV0IGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGlzIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLiAgVGhpcyBpcyB0aGUgT3BlbkNvbXB1dGUgUFRQIGNsb2NrIFBDSWUgZHJpdmVyLiAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgZGVwZW5kcyBvbiBzcGVjaWZpYywgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgdGhlIEFEVkEgVGltZUNhcmQgWDEgUENJZSBjYXJkLiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUgb3IgR0NFLlxuXG5UaHVzLCB3aXRob3V0IHRoZSAqcGh5c2ljYWwqIFBDSWUgZGV2aWNlLCB0aGUgYHB0cF9vY3BfcHJvYmUoKWAgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkLiBObyBgcHRwX29jcGAgaW5zdGFuY2UgaXMgY3JlYXRlZCwgbm8gZGV2bGluayBvciBzeXNmcyBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gQWxsIHRoZSBtb2RpZmllZCBjb2RlIGluIHRoaXMgZHJpdmVyLCB0aGUgbmV3IGFuZCBvbGQsIGlzIHVucmVhY2hhYmxlIGJ5IHN5emthbGxlci5cblxuSSBjb25maXJtIHRoZXJlIHdlcmUgbm8gdG91Y2hlcyB0byBjb3JlIG9yIGdlbmVyaWMgc3Vic3lzdGVtIGNvZGUuIEp1c3QgdGhlIGRyaXZlciBhbmQgZG9jdW1lbnRhdGlvbi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBmdW5kYW1lbnRhbGx5ICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLlxuXG5IZW5jZSwgaXQncyBhIGNsZWFyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKipcbiogICAqKkZvY3VzU3ltYm9sczogXFxbIF0qKlxuXG5UaGUgcmVhc29uaW5nIGlzIHNpbXBsZSBhbmQgcHJlY2lzZTogdGhlIGNoYW5nZXMgaW52b2x2ZSBEb2N1bWVudGF0aW9uIGFuZCBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCwgYSBzcGVjaWFsaXplZCBQQ0llIHRpbWVjYXJkIGRyaXZlciAoTWV0YSAvIEFEVkEgVGltZUNhcmQgWDEpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoaXMgbWFrZXMgdGhlIGFmZmVjdGVkIGNvZGUgaW5hY2Nlc3NpYmxlIHRvIHN5emthbGxlciwgd2hpY2ggZGVwZW5kcyBvbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIzMCwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6NTkuMTY0MzIwNzE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6NTkuMTY0MzQ1MTA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowslw8d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 07:25:56 +0000 UTC FinishedAt: 2026-09-14 07:29:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDczYmVlODgxNjgxYmIzZTU1NDBhNzQ4YjVjZWNlNWJiNDA4YmM3OGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwNzoyNzoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNmRkY2E0NTJiYzYzMyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRcbkBAIC0xMSw2ICYjNDM7MTEsMzQgQEAgQ29udGFjdDpcdEpvbmF0aGFuIExlbW9uIFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVx1MDAzZVxuIERlc2NyaXB0aW9uOlx0VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIE50aCB0aW1lY2FyZFxuIFx0XHRyZWdpc3RlcmVkLlxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vY3BsZF9zdGF0dXNcbiYjNDM7RGF0ZTpcdFx0SnVseSAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTYWdpIE1haW1vbiBcdTAwM2NtYWltb24uc2FnaUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7RGVzY3JpcHRpb246XHQoUk8sIHJvb3Qgb25seSkgVGhlIGZsYWdzIHNldCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZVxuJiM0MztcdFx0VEFQIENQTEQsIHNwYWNlIHNlcGFyYXRlZCwgb3IgYW4gZW1wdHkgbGluZSB3aGVuIG5vbmUgaXNcbiYjNDM7XHRcdHNldC4gIE9ubHkgcHJlc2VudCBvbiBBRFZBIHgxIFRBUCBib2FyZHMgKFBDSSBJRFxuJiM0MztcdFx0MHhhZDVhOjB4MDQxMCkuXG4mIzQzO1xuJiM0MztcdFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1x0XHRkb25lICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBmbGFzaCB3YXMgcHJvZ3JhbW1lZFxuJiM0MztcdFx0XHQgICAgc3VjY2Vzc2Z1bGx5IGFuZCBpcyBhY3RpdmVcbiYjNDM7XHRcdGJ1c3kgICAgICAgIGFuIGludGVybmFsIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzc1xuJiM0MztcdFx0ZmFpbGVkICAgICAgdGhlIGxhc3QgSVNDIG9wZXJhdGlvbiBmYWlsZWRcbiYjNDM7XHRcdD09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7XHRcdEZvciBleGFtcGxlIFwmIzM0O2J1c3lcJiMzNDsgd2hpbGUgcHJvZ3JhbW1pbmcsIG9yIFwmIzM0O2J1c3kgZmFpbGVkXCYjMzQ7IGlmIGFcbiYjNDM7XHRcdGZhaWx1cmUgaXMgbGF0Y2hlZCB3aGlsZSBhbm90aGVyIG9wZXJhdGlvbiBydW5zLlxuJiM0MztcbiYjNDM7XHRcdEEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlXG4mIzQzO1x0XHRvbi1jYXJkIG11eCwgc28gaXQgaXMgcmVzdHJpY3RlZCB0byByb290LiAgVGhlIExhdHRpY2UgZGV2aWNlXG4mIzQzO1x0XHRJRCBvZiB0aGUgQ1BMRCBpcyByZWFkIG9uY2UgYnkgdGhlIGRyaXZlciwgc2hvcnRseSBhZnRlclxuJiM0MztcdFx0cHJvYmUsIGFuZCByZXBvcnRlZCBmcm9tIHRoYXQgY2FjaGVkIHZhbHVlIGFzIHRoZSBmaXhlZFxuJiM0MztcdFx0XCYjMzQ7Y3BsZC5pZFwmIzM0OyB2ZXJzaW9uIGJ5IGRldmxpbmsgZGV2IGluZm8uXG4mIzQzO1xuJiM0MztcdFx0TmV3IENQTEQgZmlybXdhcmUgaXMgcHJvZ3JhbW1lZCB3aXRoIGRldmxpbmsgZGV2IGZsYXNoLFxuJiM0MztcdFx0c2VsZWN0aW5nIHRoZSBcJiMzNDtmdy5jcGxkXCYjMzQ7IGNvbXBvbmVudDsgc2VlXG4mIzQzO1x0XHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdC5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXG4gRGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjFcbiBDb250YWN0Olx0Sm9uYXRoYW4gTGVtb24gXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXHUwMDNlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5pbmRleCBkNGE4M2ZkY2ZmN2ZlLi4xYWY3ODBjODExZWUyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbkBAIC05OSw2ICYjNDM7OTksNyBAQCBwYXJhbWV0ZXJzLCBpbmZvIHZlcnNpb25zLCBhbmQgb3RoZXIgZmVhdHVyZXMgaXQgc3VwcG9ydHMuXG4gICAgbmZwXG4gICAgb2N0ZW9udHgyXG4gICAgcHJlc3RlcmFcbiYjNDM7ICAgcHRwX29jcFxuICAgIHFlZFxuICAgIHNmY1xuICAgIHN0bW1hY1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3Rcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zN2U5ZjFlYmQxYTgxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxuQEAgLTAsMCAmIzQzOzEsNzAgQEBcbiYjNDM7Li4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztwdHBfb2NwIGRldmxpbmsgc3VwcG9ydFxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZSBgYHB0cF9vY3BgYFxuJiM0MztkZXZpY2UgZHJpdmVyOiB0aGUgaW5mbyB2ZXJzaW9ucyBpdCByZXBvcnRzIGFuZCBpdHMgZmxhc2ggdXBkYXRlIHN1cHBvcnQuXG4mIzQzO1xuJiM0MztJbmZvIHZlcnNpb25zXG4mIzQzOz09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1RoZSBgYHB0cF9vY3BgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkXG4mIzQzOyAgIDp3aWR0aHM6IDUgNSA5MFxuJiM0MztcbiYjNDM7ICAgKiAtIE5hbWVcbiYjNDM7ICAgICAtIFR5cGVcbiYjNDM7ICAgICAtIERlc2NyaXB0aW9uXG4mIzQzOyAgICogLSBgYGZ3YGBcbiYjNDM7ICAgICAtIHJ1bm5pbmdcbiYjNDM7ICAgICAtIFZlcnNpb24gb2YgdGhlIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIGNhcmQuICBSZXBvcnRlZCBhcyBgYGxvYWRlcmBgXG4mIzQzOyAgICAgICBpbnN0ZWFkIHdoZW4gdGhlIGNhcmQgaXMgcnVubmluZyB0aGUgZmlybXdhcmUgbG9hZGVyLlxuJiM0MzsgICAqIC0gYGBib2FyZC5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gQm9hcmQgaWRlbnRpZmllciwgcmVhZCBmcm9tIHRoZSBvbi1jYXJkIEVFUFJPTS5cbiYjNDM7ICAgKiAtIGBgY3BsZC5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gTGF0dGljZSBkZXZpY2UgSUQgKElEQ09ERSkgb2YgdGhlIFRBUCBDUExELCBmb3JtYXR0ZWQgYXMgYGAweCUwOHhgYC5cbiYjNDM7ICAgICAgIE9ubHkgcHJlc2VudCBvbiBBRFZBIFRpbWVDYXJkIFgxIGJvYXJkcywgd2hpY2ggYXJlIHRoZSBvbmx5IG9uZXNcbiYjNDM7ICAgICAgIGNhcnJ5aW5nIHRoYXQgQ1BMRC4gIFJlYWRpbmcgaXQgY2xhaW1zIHRoZSBzaGFyZWQgSTJDIGJ1cyBhbmRcbiYjNDM7ICAgICAgIHJlcHJvZ3JhbXMgdGhlIG9uLWNhcmQgbXV4LCBzbyB0aGUgZHJpdmVyIGRvZXMgdGhhdCBvbmNlIGZyb20gaXRzXG4mIzQzOyAgICAgICBvd24gd29ya2VyIGFuZCByZXBvcnRzIHRoZSBjYWNoZWQgdmFsdWUgaGVyZTsgdGhlIHZlcnNpb24gaXNcbiYjNDM7ICAgICAgIG9taXR0ZWQgdW50aWwgdGhhdCByZWFkIGhhcyBzdWNjZWVkZWQuXG4mIzQzOyAgICogLSBgYGZ3LmNwbGRgYFxuJiM0MzsgICAgIC0gcnVubmluZ1xuJiM0MzsgICAgIC0gVVNFUkNPREUgb2YgdGhlIGltYWdlIHByb2dyYW1tZWQgaW50byB0aGUgVEFQIENQTEQsIGZvcm1hdHRlZCBhc1xuJiM0MzsgICAgICAgYGAweCUwOHhgYC4gIFJlYWQgdG9nZXRoZXIgd2l0aCBgYGNwbGQuaWRgYCBhbmQgcmVwb3J0ZWQgdGhlIHNhbWVcbiYjNDM7ICAgICAgIHdheS4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCBuYW1lIHRvIHBhc3MgdG8gYGBkZXZsaW5rIGRldiBmbGFzaGBgXG4mIzQzOyAgICAgICB0byB1cGRhdGUgdGhlIENQTEQuXG4mIzQzO1xuJiM0MztGbGFzaCB1cGRhdGVcbiYjNDM7PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGUgZHJpdmVyIGltcGxlbWVudHMgYGBkZXZsaW5rIGRldiBmbGFzaGBgIGZvciB0d28gc2VwYXJhdGUgdGFyZ2V0cyxcbiYjNDM7c2VsZWN0ZWQgd2l0aCB0aGUgY29tcG9uZW50IG5hbWUuXG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogRmxhc2ggY29tcG9uZW50c1xuJiM0MzsgICA6d2lkdGhzOiAyMCA4MFxuJiM0MztcbiYjNDM7ICAgKiAtIENvbXBvbmVudFxuJiM0MzsgICAgIC0gRGVzY3JpcHRpb25cbiYjNDM7ICAgKiAtIChub25lKVxuJiM0MzsgICAgIC0gVGhlIGNhcmQmIzM5O3Mgb3duIGZsYXNoLCB3cml0dGVuIHRocm91Z2ggdGhlIFNQSSBjb250cm9sbGVyIHRoZSBkcml2ZXJcbiYjNDM7ICAgICAgIGV4cG9zZXMuICBUaGUgY2FyZCBydW5zIHRoZSBuZXcgaW1hZ2UgYWZ0ZXIgaXRzIG5leHQgcmVzZXQuXG4mIzQzOyAgICogLSBgYGZ3LmNwbGRgYFxuJiM0MzsgICAgIC0gVGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggb2YgdGhlIFRBUCBDUExEIG9uIEFEVkEgVGltZUNhcmQgWDEgYm9hcmRzLFxuJiM0MzsgICAgICAgcHJvZ3JhbW1lZCBvdmVyIEkyQyB3aXRoIHRoZSBNYWNoWE8zIGluLXN5c3RlbSBwcm9ncmFtbWluZyBjb21tYW5kc1xuJiM0MzsgICAgICAgYW5kIGFjdGl2YXRlZCB3aXRoIGEgUkVGUkVTSCwgc28gdGhlIG5ldyBpbWFnZSBydW5zIGltbWVkaWF0ZWx5LlxuJiM0MzsgICAgICAgVGhlIGltYWdlIGlzIHRoZSByYXcgY29uZmlndXJhdGlvbiBiaXRzdHJlYW0sIGEgd2hvbGUgbnVtYmVyIG9mXG4mIzQzOyAgICAgICAxNi1ieXRlIHBhZ2VzOyBjb250YWluZXIgZm9ybWF0cyBzdWNoIGFzIGBgLmplZGBgIGFyZSByZWplY3RlZC5cbiYjNDM7XG4mIzQzO1Byb2dyYW1taW5nIHRoZSBDUExEIGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgZm9yIHRoZSB3aG9sZSBjeWNsZSwgc29cbiYjNDM7cmVhZHMgb2YgdGhlIGNhcmQmIzM5O3MgRUVQUk9NIGJsb2NrIHVudGlsIGl0IGNvbXBsZXRlcy4gIFByb2dyZXNzIGlzIHJlcG9ydGVkXG4mIzQzO3dpdGggdGhlIHN0YW5kYXJkIGRldmxpbmsgc3RhdHVzIG5vdGlmaWNhdGlvbnMuXG4mIzQzO1xuJiM0MztFeGFtcGxlOjpcbiYjNDM7XG4mIzQzOyAgICAkIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOjAyOjAwLjAgZmlsZSBhZHZhLWNwbGQuYmluIGNvbXBvbmVudCBmdy5jcGxkXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMGUwNGQ5MmQxYjA5OC4uMTEzZjMxNDM0NjE3NyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTIwNDc5LDYgJiM0MzsyMDQ3OSw3IEBAIE9QRU5DT01QVVRFIFBUUCBDTE9DSyBEUklWRVJcbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxuIEY6XHRkcml2ZXJzL3B0cC9wdHBfb2NwLmNcbiBcbiBPUEVOQ09SRVMgSTJDIEJVUyBEUklWRVJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMgYi9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbmluZGV4IDNkMjZlYzFmN2I5ZWMuLjU4YjkwYjJiMjgyZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuQEAgLTIwLDEwICYjNDM7MjAsMTQgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvYWx0ZXJhLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICYjNDM7ODksOCBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8ge1xuIFx0dThcdFx0XHRcdHNpZ25hbHNfbnI7XG4gXHR1OFx0XHRcdFx0ZnJlcV9pbl9ucjtcbiBcdGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cFx0KmF0dHJfZ3JvdXBzO1xuJiM0MztcdC8qIHgxOiBUQVAgQ1BMRCBwcmVzZW50ICovXG4mIzQzO1x0Ym9vbFx0XHRcdFx0aGFzX2NwbGQ7XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVx0XHRCSVQoMClcbkBAIC0xNjMsNyAmIzQzOzE2OSw4IEBAIHN0cnVjdCBncGlvX3JlZyB7XG4gXHR1MzJcdGdwaW8xO1xuIFx0dTMyXHRfX3BhZDA7XG4gXHR1MzJcdGdwaW8yO1xuLVx0dTMyXHRfX3BhZDE7XG4mIzQzO1x0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXG4mIzQzO1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiAmIzQzOzQyMywyNyBAQCBzdHJ1Y3QgcHRwX29jcCB7XG4gXHRkcGxsX3RyYWNrZXIgdHJhY2tlcjtcbiBcdGludCBzaWduYWxzX25yO1xuIFx0aW50IGZyZXFfaW5fbnI7XG4mIzQzO1x0LyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovXG4mIzQzO1x0Lyogc2VyaWFsaXNlcyBDUExEIG9wZXJhdGlvbnMgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0Y3BsZF9sb2NrO1xuJiM0MztcdC8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi9cbiYjNDM7XHRpbnRcdFx0XHRjcGxkX2kyY19hZGFwX25yO1xuJiM0MztcdC8qIGNsYWltZWQgYWRhcHRlcjsgdmFsaWQgdW5kZXIgY3BsZF9sb2NrICovXG4mIzQzO1x0c3RydWN0IGkyY19hZGFwdGVyXHQqY3BsZF9hZGFwO1xuJiM0MztcdC8qIHNjcmF0Y2gsIHdyaXRlIGhhbGYgdGhlbiByZWFkIGhhbGY7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuJiM0MztcdHU4XHRcdFx0KmNwbGRfYnVmO1xuJiM0MztcdC8qIExhdHRpY2UgZGV2aWNlIElEOyAwIGlmIHVucmVhZCAqL1xuJiM0MztcdHUzMlx0XHRcdGNwbGRfaWQ7XG4mIzQzO1x0LyogVVNFUkNPREUgb2YgdGhlIHByb2dyYW1tZWQgaW1hZ2U7IHZhbGlkIG9uY2UgY3BsZF9pZCBpcyBzZXQgKi9cbiYjNDM7XHR1MzJcdFx0XHRjcGxkX3VzZXJjb2RlO1xuJiM0MztcdC8qIHRoZSBvbmUtc2hvdCBJRCByZWFkIGlzIGZpbmlzaGVkLCBzdWNjZXNzZnVsbHkgb3Igbm90ICovXG4mIzQzO1x0Ym9vbFx0XHRcdGNwbGRfaWRfdHJpZWQ7XG4mIzQzO1x0LyogZmFpbGVkIElEIHJlYWQgYXR0ZW1wdHMgc28gZmFyICovXG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGNwbGRfaWRfYXR0ZW1wdHM7XG4mIzQzO1x0LyogeDEgVEFQIENQTEQgcHJlc2VudCAqL1xuJiM0MztcdGJvb2xcdFx0XHRoYXNfY3BsZDtcbiYjNDM7XHQvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gmIzM5O2QgKi9cbiYjNDM7XHRib29sXHRcdFx0Y3BsZF9pbl9jb25maWdfbW9kZTtcbiB9O1xuIFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcdEJJVCgwKVxuQEAgLTQ1Miw2ICYjNDM7NDgwLDEzIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XG4gXG4mIzQzOy8qIEZsYXNoIGNvbXBvbmVudCBuYW1pbmcgdGhlIENQTEQgaW1hZ2UsIGFzIHJlcG9ydGVkIGJ5IC1cdTAwM2VpbmZvX2dldCgpLiAqL1xuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9DT01QT05FTlRcdFwmIzM0O2Z3LmNwbGRcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW107XG5AQCAtMTI3Myw2ICYjNDM7MTMwOCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XG4gXHRcdFx0LnNpZ25hbHNfbnIgICA9IDQsXG4gXHRcdFx0LmZyZXFfaW5fbnIgICA9IDQsXG4gXHRcdFx0LmF0dHJfZ3JvdXBzICA9IGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzLFxuJiM0MztcdFx0XHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcbiBcdFx0fSxcbiBcdH0sXG4gXHR7IH1cbkBAIC0yMTMzLDYgJiM0MzsyMTY5LDE3IEBAIHB0cF9vY3BfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRjb25zdCBjaGFyICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHRpZiAoIWJwLVx1MDAzZWhhc19jcGxkIHx8XG4mIzQzO1x0XHQgICAgc3RyY21wKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIEFEVkFfQ1BMRF9DT01QT05FTlQpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDt1bnN1cHBvcnRlZCBmbGFzaCBjb21wb25lbnRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGFkdmFfeDFfY3BsZF9mbGFzaChicCwgZGV2bGluaywgcGFyYW1zLVx1MDAzZWZ3LCBleHRhY2spO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXYgPSBwdHBfb2NwX2ZpbmRfZmxhc2goYnApO1xuIFx0aWYgKCFkZXYpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2FuJiMzOTt0IGZpbmQgRmxhc2ggU1BJIGFkYXB0ZXJcXG5cJiMzNDspO1xuQEAgLTIxNTUsMTAgJiM0MzsyMjAyLDEzIEBAIHN0YXRpYyBpbnRcbiBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4mIzQzO1x0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlID1cbiYjNDM7XHRcdFx0XHRcdERFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfQ09NUE9ORU5UO1xuIFx0c3RydWN0IHB0cF9vY3AgKmJwID0gZGV2bGlua19wcml2KGRldmxpbmspO1xuIFx0Y29uc3QgY2hhciAqZndfaW1hZ2U7XG4gXHRjaGFyIGJ1ZlszMl07XG4gXHRpbnQgZXJyO1xuJiM0MztcdHUzMiBpZDtcbiBcbiBcdGZ3X2ltYWdlID0gYnAtXHUwMDNlZndfbG9hZGVyID8gXCYjMzQ7bG9hZGVyXCYjMzQ7IDogXCYjMzQ7ZndcJiMzNDs7XG4gXHRzcHJpbnRmKGJ1ZiwgXCYjMzQ7JWQuJWRcJiMzNDssIGJwLVx1MDAzZWZ3X3RhZywgYnAtXHUwMDNlZndfdmVyc2lvbik7XG5AQCAtMjE2Niw2ICYjNDM7MjIxNiwyOCBAQCBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdC8qIFJlYWQgYnkgdGhlIHdvcmtlciwgbm90IGhlcmU6IHRoaXMgY29tbWFuZCBpcyB1bnByaXZpbGVnZWQgYW5kXG4mIzQzO1x0ICogcmVhZGluZyB0aGUgSUQgY2xhaW1zIHRoZSBJMkMgYnVzLiAgMCBtZWFucyB1bnJlYWQgLSBza2lwIGl0XG4mIzQzO1x0ICogcmF0aGVyIHRoYW4gZmFpbCwgZGV2bGluayBkaXNjYXJkcyB0aGUgd2hvbGUgcmVwbHkgb24gZXJyb3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWQgPSBSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCk7XG4mIzQzO1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkIFx1MDAyNlx1MDAyNiBpZCkge1xuJiM0MztcdFx0c3ByaW50ZihidWYsIFwmIzM0OzB4JTA4eFwmIzM0OywgaWQpO1xuJiM0MztcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgXCYjMzQ7Y3BsZC5pZFwmIzM0OywgYnVmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGZsYXNoYWJsZSBjb21wb25lbnQ6IG5hbWluZyBpdCBoZXJlIGlzIHdoYXQgbGV0c1xuJiM0MztcdFx0ICogXCYjMzQ7ZGV2bGluayBkZXYgZmxhc2ggLi4uIGNvbXBvbmVudCBmdy5jcGxkXCYjMzQ7IHRocm91Z2gsIGFzIHRoZVxuJiM0MztcdFx0ICogY29yZSBtYXRjaGVzIHRoZSBuYW1lIGFnYWluc3QgdGhlIHZlcnNpb25zIHJlcG9ydGVkIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwcmludGYoYnVmLCBcJiMzNDsweCUwOHhcJiMzNDssIFJFQURfT05DRShicC1cdTAwM2VjcGxkX3VzZXJjb2RlKSk7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBcJiMzNDtmdy5jcGxkXCYjMzQ7LCBidWYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgdmVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFicC1cdTAwM2VoYXNfZWVwcm9tX2RhdGEpIHtcbiBcdFx0cHRwX29jcF9yZWFkX2VlcHJvbShicCk7XG4gXHRcdGlmICghYnAtXHUwMDNlaGFzX2VlcHJvbV9kYXRhKVxuQEAgLTMxOTksNiAmIzQzOzMyNzEsOCBAQCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRwdHBfb2NwX3NtYV9pbml0KGJwKTtcbiBcbiYjNDM7XHRicC1cdTAwM2VoYXNfY3BsZCA9IGluZm8tXHUwMDNlaGFzX2NwbGQ7XG4mIzQzO1xuIFx0cmV0dXJuIHB0cF9vY3BfaW5pdF9jbG9jayhicCwgXHUwMDI2aW5mby1cdTAwM2VzZXJ2byk7XG4gfVxuIFxuQEAgLTQyMjYsNiAmIzQzOzQzMDAsNjQ4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0ge1xuIFx0eyB9LFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIGFkdmFfeDEgVEFQIENQTEQgKExhdHRpY2UgTENNWE8zTEYtMjEwMCkgaGVscGVycy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhcmQgaGFzIHR3byBJMkMgY29udHJvbGxlcnM7IExpbnV4IHJlZ2lzdGVycyBvbmx5IDB4MDAxNTAwMDAuXG4mIzQzOyAqIFRoZSBpMmNfYnVzX2N0cmwgaGFuZHNoYWtlIHJlLXJvdXRlcyB3aGF0IGVhY2ggaXMgd2lyZWQgdG86XG4mIzQzOyAqXG4mIzQzOyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC1cdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVx1MDAzZSBUTUMgb3IgTS4yLCBNQiYjMzk7cyBjaG9pY2VcbiYjNDM7ICogICBncmFudCAxOiAgMHgxNTAwMDAgLVx1MDAzZSBUTUMgYnVzICAgICAweDEyMDAwMCAtXHUwMDNlIE0uMlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgUENBOTU0OCBhdCAweDc0IGFuZCB0aGUgQ1BMRCBhdCAweDQwIGJlaGluZCBpdHMgY2hhbm5lbCAwIGFyZSBvbiB0aGVcbiYjNDM7ICogVE1DIGJ1cywgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBUaGUgRUVQUk9NcyBhcmUgbm90XG4mIzQzOyAqIGJlaGluZCB0aGUgYWRhcHRlciBmb3IgdGhhdCB3aW5kb3csIHNvIGEgQ1BMRCBvcGVyYXRpb24gaG9sZHMgY3BsZF9sb2NrXG4mIzQzOyAqIGFuZCB0aGUgYWRhcHRlciBsb2NrIHRvIGtlZXAgdGhlIEVFUFJPTSBhbmQgbnZtZW0gcGF0aHMgb2ZmIGl0LlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgQURWQV9NVVhfQUREUiAgICAgMHg3NFxuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcbiYjNDM7I2RlZmluZSBBRFZBX01VWF9DSEFOTkVMICAwXG4mIzQzO1xuJiM0MzsvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xuJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9YRkVSX01BWCAzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxuJiM0MzsjZGVmaW5lIE1CTEFaRV9HUkFOVEVEICAgIDB4NTU1NWFhYWFVXG4mIzQzOyNkZWZpbmUgTUJMQVpFX1JFTEVBU0UgICAgMHg1NTU1MDAwMFVcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcbiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUllfVVMgICAxMDAwMFxuJiM0MztcbiYjNDM7LyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfSUQgICAgICAweEUwMDAwMDAwVUxcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUFEX1VTRVJDT0RFIDB4QzAwMDAwMDBVTFxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUxcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9FTl9DRkdfVFAgICAgMHg3NCAgIC8qIGVuYWJsZSBjb25maWcsIHRyYW5zcGFyZW50IG1vZGUgKi9cbiYjNDM7I2RlZmluZSBDUExEX0NNRF9ESVNfQ0ZHICAgICAgMHgyNlxuJiM0MzsjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVTRVRfQUREUiAgIDB4NDZcbiYjNDM7I2RlZmluZSBDUExEX0NNRF9XUklURV9QQUdFICAgMHg3MFxuJiM0MzsjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFXG4mIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVGUkVTSCAgICAgIDB4NzlcbiYjNDM7I2RlZmluZSBDUExEX1BBR0VfU0laRSAgICAgICAgMTZcbiYjNDM7I2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi9cbiYjNDM7I2RlZmluZSBDUExEX0VSQVNFX01TICAgICAgICAgMTUwMDAgIC8qIGNvbmZpZyBzZWN0b3IgZXJhc2UsIGRhdGFzaGVldCBtYXggKi9cbiYjNDM7I2RlZmluZSBDUExEX0lEX01BWF9BVFRFTVBUUyAgMTAgICAgIC8qIG9uZSBwZXIgc3luY193b3JrIHRpY2sgKi9cbiYjNDM7XG4mIzQzOy8qIFN0YXR1cyByZWdpc3RlciBiaXQgcG9zaXRpb25zIChMYXR0aWNlIExDTVhPM0xGIGRhdGFzaGVldCkgKi9cbiYjNDM7I2RlZmluZSBDUExEX1NUQVRVU19ET05FICAgQklUKDgpXG4mIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMilcbiYjNDM7I2RlZmluZSBDUExEX1NUQVRVU19GQUlMRUQgQklUKDEzKVxuJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0VSUiAgICBHRU5NQVNLKDI1LCAyMylcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIElzc3VlIG9uZSBJMkMgdHJhbnNhY3Rpb24gb24gdGhlIFRNQyBidXM6IEBjbWQgaWYgbm90IG5lZ2F0aXZlLCB0aGVuXG4mIzQzOyAqIEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSAoTlVMTCBzZW5kcyB6ZXJvcyksIHRoZW4gQHJsZW4gYnl0ZXMgcmVhZCBiYWNrLlxuJiM0MzsgKiBUaGUgbWVzc2FnZSBpcyBidWlsdCBpbiB0aGUgc2NyYXRjaCBidWZmZXIgZnJvbSBhZHZhX3gxX2J1c19jbGFpbSgpLCBzb1xuJiM0MzsgKiBhbiB1cGxvYWQgY29zdHMgb25lIGFsbG9jYXRpb24gcmF0aGVyIHRoYW4gb25lIHBlciBwYWdlLiAgSTJDX01fRE1BX1NBRkVcbiYjNDM7ICogaXMgbm90IHNldDogdGhlIHR3byBoYWx2ZXMgYXJlIG5vdCBzZXBhcmF0ZWx5IGFsaWduZWQsIHNvIGxldCB0aGUgY29yZVxuJiM0MzsgKiBib3VuY2UuICBDYWxsZXIgaG9sZHMgdGhlIGNsYWltLCBoZW5jZSBfX2kyY190cmFuc2ZlcigpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHZvaWQgKndkYXRhLCB1OCB3bGVuLFxuJiM0MztcdFx0XHQgICAgdm9pZCAqcmRhdGEsIHU4IHJsZW4pXG4mIzQzO3tcbiYjNDM7XHR1OCAqd2J1ZiwgKnJidWY7XG4mIzQzO1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuJiM0MztcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4mIzQzO1x0aW50IG5tc2dzID0gMCwgcmV0O1xuJiM0MztcdHUxNiBoZHIgPSBjbWQgXHUwMDNlPSAwO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4mIzQzO1x0aWYgKCFhZGFwIHx8ICFicC1cdTAwM2VjcGxkX2J1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRpZiAoaGRyICYjNDM7IHdsZW4gXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWCB8fCBybGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0d2J1ZiA9IGJwLVx1MDAzZWNwbGRfYnVmO1xuJiM0MztcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiAmIzQzOyBBRFZBX0NQTERfWEZFUl9NQVg7XG4mIzQzO1xuJiM0MztcdGlmIChoZHIgJiM0Mzsgd2xlbikge1xuJiM0MztcdFx0aWYgKGhkcilcbiYjNDM7XHRcdFx0d2J1ZlswXSA9IGNtZDtcbiYjNDM7XHRcdGlmICh3ZGF0YSlcbiYjNDM7XHRcdFx0bWVtY3B5KHdidWYgJiM0MzsgaGRyLCB3ZGF0YSwgd2xlbik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1lbXNldCh3YnVmICYjNDM7IGhkciwgMCwgd2xlbik7XG4mIzQzO1x0XHRtc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpe1xuJiM0MztcdFx0XHQuYWRkciAgPSBhZGRyLFxuJiM0MztcdFx0XHQuZmxhZ3MgPSAwLFxuJiM0MztcdFx0XHQubGVuICAgPSBoZHIgJiM0Mzsgd2xlbixcbiYjNDM7XHRcdFx0LmJ1ZiAgID0gd2J1ZixcbiYjNDM7XHRcdH07XG4mIzQzO1x0fVxuJiM0MztcdGlmIChybGVuKSB7XG4mIzQzO1x0XHRtc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpe1xuJiM0MztcdFx0XHQuYWRkciAgPSBhZGRyLFxuJiM0MztcdFx0XHQuZmxhZ3MgPSBJMkNfTV9SRCxcbiYjNDM7XHRcdFx0LmxlbiAgID0gcmxlbixcbiYjNDM7XHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbiYjNDM7XHRcdH07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7XG4mIzQzO1x0aWYgKHJldCAhPSBubXNncylcbiYjNDM7XHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4mIzQzO1xuJiM0MztcdGlmIChyZGF0YSBcdTAwMjZcdTAwMjYgcmxlbilcbiYjNDM7XHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBIYW5kIHRoZSBzZWdtZW50IGJhY2ssIGFuZCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gZHJvcCB0aGUgZ3JhbnQgYmVmb3JlXG4mIzQzOyAqIHRoZSBjYWxsZXIgdW5sb2NrcyB0aGUgYWRhcHRlcjogYSB0cmFuc2ZlciBxdWV1ZWQgYmVoaW5kIHVzIHdvdWxkXG4mIzQzOyAqIG90aGVyd2lzZSBiZSBjbG9ja2VkIG91dCB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBzdGlsbCBvbiB0aGUgVE1DIGJ1cyxcbiYjNDM7ICogd2hpY2ggaXMgd2hhdCBob2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgYWNyb3NzIHRoZSBncmFudCBleGlzdHMgdG8gc3RvcC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFkdmFfeDFfbWJsYXplX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghYnAtXHUwMDNlcHBzX3NlbGVjdClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKE1CTEFaRV9SRUxFQVNFLCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0LyogRmx1c2ggdGhlIHBvc3RlZCB3cml0ZSwgYXMgdGhlIGFjcXVpcmUgcGF0aCBkb2VzLiAqL1xuJiM0MztcdGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpICE9IE1CTEFaRV9HUkFOVEVEKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgJiM0MzsgMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VE1DIGJ1cyBzdGlsbCBncmFudGVkIGFmdGVyIHJlbGVhc2VcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBY3F1aXJlIHRoZSBzaGFyZWQgSTJDIGJ1cyBmcm9tIHRoZSBNaWNyb0JsYXplIGZpcm13YXJlLiAgUmV0dXJucyB3aXRoIG5vXG4mIzQzOyAqIHJlcXVlc3Qgb3V0c3RhbmRpbmcgb24gZmFpbHVyZSwgc28gdGhlIGZpcm13YXJlIGlzIG5ldmVyIGxlZnQgZ3JhbnRpbmcgYVxuJiM0MzsgKiBzZWdtZW50IHRvIGEgaG9zdCB0aGF0IGhhcyBnaXZlbiB1cCB3YWl0aW5nIGZvciBpdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9tYmxhemVfYWNxdWlyZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZXBwc19zZWxlY3QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0LyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2tcbiYjNDM7XHQgKiBrZWVwcyBsaXZlIG9uZXMgb3V0LiAgVGhlIHJlYWQgYmFjayBvbmx5IGZsdXNoZXMgdGhlIHBvc3RlZCB3cml0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpb3dyaXRlMzIoMCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuJiM0MztcdGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKE1CTEFaRV9SRVFVRVNULCBcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgJiM0MzsgMTAwMCk7XG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQzMihcdTAwMjZicC1cdTAwM2VwcHNfc2VsZWN0LVx1MDAzZWkyY19idXNfY3RybCk7XG4mIzQzO1x0XHRpZiAodmFsID09IE1CTEFaRV9HUkFOVEVEKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApO1xuJiM0MztcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuXG4mIzQzOyAqIFNhZmUgYWZ0ZXIgYSBmYWlsZWQgY2xhaW06IGl0IGFsc28gY2xlYXJzIGEgcmVxdWVzdCB0aGF0IHdhcyBuZXZlciBncmFudGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4mIzQzO1xuJiM0MztcdGlmICghYWRhcClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9hZGFwID0gTlVMTDtcbiYjNDM7XHRrZnJlZShicC1cdTAwM2VjcGxkX2J1Zik7XG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9idWYgPSBOVUxMO1xuJiM0MztcdGkyY191bmxvY2tfYnVzKGFkYXAsIEkyQ19MT0NLX1JPT1RfQURBUFRFUik7XG4mIzQzO1x0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhaTJjX3ZlcmlmeV9hZGFwdGVyKGRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhY2hlIHRoZSBhZGFwdGVyIHRoZSBDUExEIGhhbmdzIG9mZi4gIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoKSBtaXNzZXNcbiYjNDM7ICogaXQgd2hlbiB0aGUgaTJjIGNvbnRyb2xsZXIgZHJpdmVyIGlzIGFscmVhZHkgbG9hZGVkOiB0aGUgYWRhcHRlciBpcyB0aGVuXG4mIzQzOyAqIGFkZGVkIGZyb20gaW5zaWRlIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigpLCBiZWZvcmUgYnAtXHUwMDNlaTJjX2N0cmwgaXMgc2V0LlxuJiM0MzsgKiBPbmx5IGRpcmVjdCBjaGlsZHJlbiBhcmUgc2VhcmNoZWQsIHNvIGEgbXV4IGFkYXB0ZXIgY2Fubm90IG1hdGNoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9jYWNoZV9pMmNfYWRhcChzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpjaGlsZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VoYXNfY3BsZCB8fCAhYnAtXHUwMDNlaTJjX2N0cmwgfHxcbiYjNDM7XHQgICAgUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpIFx1MDAzZT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZChcdTAwMjZicC1cdTAwM2VpMmNfY3RybC1cdTAwM2VkZXYsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICBhZHZhX3gxX2kyY19hZGFwX21hdGNoKTtcbiYjNDM7XHRpZiAoIWNoaWxkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXHUwMDNlbnIpO1xuJiM0MztcdHB1dF9kZXZpY2UoY2hpbGQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDbGFpbSB0aGUgVE1DIGJ1cy4gIFRoZSBhZGFwdGVyIGxvY2sgaXMgaGVsZCBhY3Jvc3MgdGhlIGhhbmRzaGFrZSB0byBrZWVwXG4mIzQzOyAqIHRoZSBFRVBST00sIG52bWVtIGFuZCBhdDI0IHBhdGhzIG9mZiB0aGUgY29udHJvbGxlciB3aGlsZSBpdCBpcyByb3V0ZWRcbiYjNDM7ICogYXdheSBmcm9tIHRoZSBFRVBST01zOyBhbiBFRVBST00gcmVhZCBibG9ja3MgdW50aWwgdGhlIGNsYWltIGlzIGRyb3BwZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfYnVzX2NsYWltKHN0cnVjdCBwdHBfb2NwICpicClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1xuJiM0MztcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcbiYjNDM7XHRpZiAoIWFkYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIG51bWJlciBpcyBmcmVlZCBiZWZvcmUgdGhlIG5vdGlmaWVyIGNsZWFycyBpdCwgc28gaXQgY2FuXG4mIzQzO1x0ICogYWxyZWFkeSBiZSBhbm90aGVyIGFkYXB0ZXImIzM5O3MuICBDaGVjayB0aGlzIGlzIHN0aWxsIG91cnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFicC1cdTAwM2VpMmNfY3RybCB8fCBhZGFwLVx1MDAzZWRldi5wYXJlbnQgIT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KSB7XG4mIzQzO1x0XHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIE9uZSBzY3JhdGNoIGJ1ZmZlciBwZXIgY2xhaW0gcmF0aGVyIHRoYW4gcGVyIHRyYW5zZmVyOiBhbiB1cGxvYWRcbiYjNDM7XHQgKiBob2xkcyB0aGUgY2xhaW0gZm9yIHRoZSB3aG9sZSBpbWFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRicC1cdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFicC1cdTAwM2VjcGxkX2J1Zikge1xuJiM0MztcdFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2FkYXAgPSBhZGFwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKGJwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCBcdTAwM2MgMCAtIHRoZSBwb3dlci1vbiBzdGF0ZS5cbiYjNDM7ICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZVxuJiM0MzsgKiBFRVBST00gcGF0aHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaClcbiYjNDM7e1xuJiM0MztcdHU4IHZhbCA9IChjaCBcdTAwM2U9IDApID8gQklUKGNoKSA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX01VWF9BRERSLCB2YWwsIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBcmd1bWVudCBieXRlcyB0aGF0IGZvbGxvdyBhbiBJU0Mgb3Bjb2RlLiAgUmV0dXJucyBOVUxMIHdpdGggQG5hcmdzIHNldFxuJiM0MzsgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdTggKmFkdmFfeDFfY3BsZF9hcmdzKHU4IGNtZCwgdTggKm5hcmdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07XG4mIzQzO1x0LyogY2ZnIHNlY3RvciBvbmx5ICovXG4mIzQzO1x0c3RhdGljIGNvbnN0IHU4IGVyYXNlX2NmZ1tdID0geyAweDA0LCAweDAwLCAweDAwIH07XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY21kKSB7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XG4mIzQzO1x0XHQqbmFyZ3MgPSBzaXplb2YoZW5fY2ZnX3RwKTtcbiYjNDM7XHRcdHJldHVybiBlbl9jZmdfdHA7XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9FUkFTRTpcbiYjNDM7XHRcdCpuYXJncyA9IHNpemVvZihlcmFzZV9jZmcpO1xuJiM0MztcdFx0cmV0dXJuIGVyYXNlX2NmZztcbiYjNDM7XHRjYXNlIENQTERfQ01EX1JFU0VUX0FERFI6XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9TRVRfRE9ORTpcbiYjNDM7XHRcdCpuYXJncyA9IDM7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRjYXNlIENQTERfQ01EX0RJU19DRkc6XG4mIzQzO1x0Y2FzZSBDUExEX0NNRF9SRUZSRVNIOlxuJiM0MztcdFx0Km5hcmdzID0gMjtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQqbmFyZ3MgPSAwO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZW5kIGFuIElTQyBjb21tYW5kIHdpdGggdGhlIGZpeGVkIGFyZ3VtZW50cyB0aGF0IGJlbG9uZyB0byBpdC4gKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqYXJncztcbiYjNDM7XHR1OCBuYXJncztcbiYjNDM7XG4mIzQzO1x0YXJncyA9IGFkdmFfeDFfY3BsZF9hcmdzKGNtZCwgXHUwMDI2bmFyZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIGNtZCwgYXJncywgbmFyZ3MsIE5VTEwsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTZW5kIGEgNC1ieXRlIGNvbW1hbmQgYW5kIHJlYWQgYmFjayB3aXRob3V0IGFuIGludGVybWVkaWF0ZSBTVE9QOiB0d29cbiYjNDM7ICogbWVzc2FnZXMgaW4gb25lIHRyYW5zZmVyIGlzIHRoZSBMYXR0aWNlIHdyaXRlIC1cdTAwM2UgcmVwZWF0ZWQgU1RBUlQgLVx1MDAzZSByZWFkLFxuJiM0MzsgKiBzbyBubyBwcm90b2NvbC1tYW5nbGluZyBmbGFnIGlzIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCxcbiYjNDM7XHRcdFx0XHQgdTMyIGNtZF9iZSwgdTggKm91dCwgdTggb3V0X2xlbilcbiYjNDM7e1xuJiM0MztcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIC0xLCBcdTAwMjZjbWQsIDQsIG91dCwgb3V0X2xlbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpXG4mIzQzO3tcbiYjNDM7XHR1OCBidWZbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX1NUQVRVUywgYnVmLCA0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFBvbGwgdGhlIHN0YXR1cyByZWdpc3RlciB1bnRpbCB0aGUgQ1BMRCBnb2VzIGlkbGUsIG9yIEBtYXhfbXMgZWxhcHNlcy5cbiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCxcbiYjNDM7ICogYW5kIHRoZSBzdGF0dXMgaXMgcmVhZCBvbmNlIG1vcmUgYWZ0ZXIgaXQgZXhwaXJlcyBiZWZvcmUgZ2l2aW5nIHVwLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMCwgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVycixcbiYjNDM7XHRcdFx0XHRlcnIgfHwgKHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxuJiM0MztcdFx0XHRcdCEoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSxcbiYjNDM7XHRcdFx0XHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxuJiM0MztcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIEtlZXAgdGhlIHRyYW5zcG9ydCBlcnJubyBzbyBpdCByZWFjaGVzIHVzZXJzcGFjZSBhcy1pczsgLUVJTyBpc1xuJiM0MztcdCAqIHJlc2VydmVkIGZvciB0aGUgQ1BMRCBpdHNlbGYgcmVwb3J0aW5nIEZBSUxFRC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdhaXQgZm9yIEJVU1kgdG8gY2xlYXIsIGlnbm9yaW5nIGEgcGVuZGluZyBjYW5jZWwuICBBbiBJU0MgY29tbWFuZCBpc3N1ZWRcbiYjNDM7ICogd2hpbGUgdGhlIHBhcnQgaXMgc3RpbGwgZXJhc2luZyBvciBwcm9ncmFtbWluZyBtYXkgbm90IGxhdGNoLCBzbyBhbiBhYm9ydFxuJiM0MzsgKiBoYXMgdG8gd2FpdCB0aGUgb3BlcmF0aW9uIG91dCBiZWZvcmUgaXQgY2FuIGxlYXZlIGNvbmZpZ3VyYXRpb24gbW9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfaWRsZShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4mIzQzO3tcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHRpbnQgZXJyID0gMCwgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMsIGVycixcbiYjNDM7XHRcdFx0XHRlcnIgfHwgIShzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxuJiM0MztcdFx0XHRcdENQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4mIzQzO1x0XHRcdFx0YnAsIFx1MDAyNnN0YXR1cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIExlYXZlIHRyYW5zcGFyZW50IGNvbmZpZ3VyYXRpb24gbW9kZS4gIGNwbGRfaW5fY29uZmlnX21vZGUgc3RheXMgc2V0IHdoZW5cbiYjNDM7ICogRElTX0NGRyBkb2VzIG5vdCBnZXQgdGhyb3VnaCwgc28gYSBsYXRlciBjbGVhbnVwKCkgdHJpZXMgYWdhaW4gcmF0aGVyIHRoYW5cbiYjNDM7ICogcmVjb3JkaW5nIGFuIGV4aXQgdGhhdCBuZXZlciBoYXBwZW5lZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFkdmFfeDFfY3BsZF9leGl0X2NvbmZpZyhzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGFkdmFfeDFfY3BsZF93YWl0X2lkbGUoYnAsIENQTERfRVJBU0VfTVMpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0RJU19DRkcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O0NQTEQgbGVmdCBpbiBjb25maWd1cmF0aW9uIG1vZGU6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgYW5kIHRoZSBpbWFnZSBVU0VSQ09ERSB1bmRlciBvbmUgYnVzIGNsYWltLlxuJiM0MzsgKiBEb25lIG9uY2UsIG9mZiB0aGUgdW5wcml2aWxlZ2VkIGRldmxpbmsgcGF0aCwgd2hpY2ggcmVwb3J0cyB0aGUgY2FjaGVkXG4mIzQzOyAqIHZhbHVlcy4gIC1FQlVTWSBtZWFucyBjcGxkX2xvY2sgaXMgaGVsZCwgc28gdGhlIGNhbGxlciBjYW4gcmV0cnkgcmF0aGVyXG4mIzQzOyAqIHRoYW4gd2FpdCBiZWhpbmQgYSBsb25nIENQTEQgb3BlcmF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9pZChzdHJ1Y3QgcHRwX29jcCAqYnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgaWQsIHVzZXJjb2RlO1xuJiM0MztcdHU4IGRhdGFbNF07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtdXRleF90cnlsb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jaykpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdHJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gcmVsZWFzZTtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlc2VsZWN0O1xuJiM0MztcdGlkID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfVVNFUkNPREUsIGRhdGEsIDQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlc2VsZWN0O1xuJiM0MztcdHVzZXJjb2RlID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xuJiM0MztcbiYjNDM7XHQvKiBjcGxkX2lkIGlzIHRoZSB2YWxpZGl0eSBmbGFnIGZvciBib3RoLCBzbyBwdWJsaXNoIGl0IGxhc3QuICovXG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX3VzZXJjb2RlLCB1c2VyY29kZSk7XG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2lkLCBpZCk7XG4mIzQzO2Rlc2VsZWN0OlxuJiM0MztcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuJiM0MztyZWxlYXNlOlxuJiM0MztcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuJiM0MztvdXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9kYmcoXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0NQTEQgZGV2aWNlIElEIHVuYXZhaWxhYmxlOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi9cbiYjNDM7c3RhdGljIHNzaXplX3RcbiYjNDM7Y3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0IGNoYXIgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCBjb3VudCA9IDA7XG4mIzQzO1x0dTMyIHN0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBIENQTEQgb3BlcmF0aW9uIGNhbiBob2xkIGNwbGRfbG9jayBhIGxvbmcgdGltZTsgc3RheSBraWxsYWJsZS4gKi9cbiYjNDM7XHRyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0cmV0ID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4mIzQzO1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4mIzQzO3JlbGVhc2U6XG4mIzQzO1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4mIzQzO291dDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogRmxhZ3M6IHRoZSBuYW1lcyBvZiB0aGUgYml0cyB0aGF0IGFyZSBzZXQsIG5vdGhpbmcgd2hlbiBub25lIGlzLFxuJiM0MztcdCAqIHJhdGhlciB0aGFuIGEgdmFsdWUgcGVyIGJpdCBpbiBvbmUgZmlsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpXG4mIzQzO1x0XHRjb3VudCAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcJiMzNDtkb25lXCYjMzQ7KTtcbiYjNDM7XHRpZiAoc3QgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpXG4mIzQzO1x0XHRjb3VudCAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcJiMzNDslc2J1c3lcJiMzNDssIGNvdW50ID8gXCYjMzQ7IFwmIzM0OyA6IFwmIzM0O1wmIzM0Oyk7XG4mIzQzO1x0aWYgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19GQUlMRUQpXG4mIzQzO1x0XHRjb3VudCAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcJiMzNDslc2ZhaWxlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgY291bnQgPyBcJiMzNDsgXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvdW50ICYjNDM7IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztzdGF0aWMgREVWSUNFX0FUVFJfQURNSU5fUk8oY3BsZF9zdGF0dXMpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJvZ3JhbSB0aGUgQ1BMRCBjb25maWd1cmF0aW9uIGZsYXNoIGZyb20gQGZ3IGFuZCBhY3RpdmF0ZSBpdC4gIFNlbGVjdGVkXG4mIzQzOyAqIGJ5IHRoZSBcJiMzNDtmdy5jcGxkXCYjMzQ7IGZsYXNoIGNvbXBvbmVudDsgdGhlIFNQSSBmbGFzaCBrZWVwcyB0aGUgZGVmYXVsdCBwYXRoLlxuJiM0MzsgKiBSdW5zIHVuZGVyIGNwbGRfbG9jayB3aXRoIHRoZSBpMmMgYWRhcHRlciBsb2NrIGhlbGQsIHNvIGFuIEVFUFJPTSByZWFkXG4mIzQzOyAqIGJsb2NrcyBmb3IgYXMgbG9uZyBhcyBwcm9ncmFtbWluZyB0YWtlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBvZmZzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHR1MzIgc3Q7XG4mIzQzO1xuJiM0MztcdGlmICghZnctXHUwMDNlc2l6ZSB8fCBmdy1cdTAwM2VzaXplICUgQ1BMRF9QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7aW1hZ2UgbXVzdCBiZSBhIHdob2xlIG51bWJlciBvZiAxNi1ieXRlIHBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdGVyciA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gcmVsZWFzZTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBFTl9DRkdfVFAsIG5vdCBhZnRlcjogdGhlIENQTEQgbWF5IGhhdmUgZW50ZXJlZCBjb25maWdcbiYjNDM7XHQgKiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIGVycm9ycyBvciB0aGUgd2FpdCB0aW1lcyBvdXQsIGFuZCBvbmx5IHRoaXNcbiYjNDM7XHQgKiBtYWtlcyB0aGUgZXhpdCBwYXRoIHNlbmQgRElTX0NGRy4gIEEgc3RyYXkgRElTX0NGRyBpcyBoYXJtbGVzcztcbiYjNDM7XHQgKiBsZWF2aW5nIGNvbmZpZyBtb2RlIGVuYWJsZWQgaXMgbm90LlxuJiM0MztcdCAqL1xuJiM0MztcdGJwLVx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCk7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRlcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgNTAwMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXhpdF9jb25maWc7XG4mIzQzO1xuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCYjMzQ7RXJhc2luZ1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xuJiM0MztcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRVJBU0UpO1xuJiM0MztcdGlmICghZXJyKVxuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIENQTERfRVJBU0VfTVMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1JFU0VUX0FERFIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgZnctXHUwMDNlc2l6ZTsgb2Zmc2V0ICYjNDM7PSBDUExEX1BBR0VfU0laRSkge1xuJiM0MztcdFx0dTggYXJnc1szICYjNDM7IENQTERfUEFHRV9TSVpFXSA9IHsgMHgwMCwgMHgwMCwgMHgwMSB9O1xuJiM0MztcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZhcmdzWzNdLCBmdy1cdTAwM2VkYXRhICYjNDM7IG9mZnNldCwgQ1BMRF9QQUdFX1NJWkUpO1xuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGFyZ3MsIHNpemVvZihhcmdzKSwgTlVMTCwgMCk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKG9mZnNldCAlIChDUExEX1BBR0VfU0laRSAqIDY0KSkpXG4mIzQzO1x0XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluayxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBcJiMzNDtQcm9ncmFtbWluZ1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIG9mZnNldCwgZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCYjMzQ7UHJvZ3JhbW1pbmdcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuJiM0MztcdFx0XHRcdFx0ICAgZnctXHUwMDNlc2l6ZSwgZnctXHUwMDNlc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfU0VUX0RPTkUpO1xuJiM0MztcdGlmICghZXJyKVxuJiM0MztcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBleGl0X2NvbmZpZztcbiYjNDM7XHRpZiAoIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkpIHtcbiYjNDM7XHRcdGVyciA9IC1FSU87XG4mIzQzO1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLCBcJiMzNDtBY3RpdmF0aW5nXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7XG4mIzQzO1x0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBleGl0X2NvbmZpZztcbiYjNDM7XG4mIzQzO1x0LyogUkVGUkVTSCByZWJvb3RzIHRoZSBDUExEIG91dCBvZiBjb25maWd1cmF0aW9uIG1vZGUsIHNvIHRoZSBleGl0XG4mIzQzO1x0ICogcGF0aCBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIGEgY2hlY2sgYmVsb3cgZmFpbHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZywgc28gYSBzZWdtZW50IHRoYXQgaXMgbm90IGJhY2tcbiYjNDM7XHQgKiB5ZXQgbXVzdCBub3QgYmUgcmVwb3J0ZWQgYXMgYSBmYWlsZWQgdXBkYXRlOiByZXRyeSB0aGUgcmVzZWxlY3RcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtc2xlZXAoMTUwMCk7XG4mIzQzO1x0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9tdXhfc2VsZWN0LCBlcnIsICFlcnIsIENQTERfUE9MTF9VUyxcbiYjNDM7XHRcdFx0XHQzMDAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4mIzQzO1x0XHRcdFx0YnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRlc2VsZWN0O1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMzAwMCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZGVzZWxlY3Q7XG4mIzQzO1xuJiM0MztcdC8qIFJlcXVpcmUgRE9ORSBzZXQsIG5vdCBidXN5IGFuZCBubyBlcnJvciBjb2RlLCBhcyBtYWNoeG8yLXNwaS5jIGRvZXNcbiYjNDM7XHQgKiBhZnRlciBhIHJlZnJlc2g6IHdpdGhvdXQgaXQgYSBDUkMgb3IgcHJlYW1ibGUgZXJyb3IgcmVhZHMgYmFjayBhcyBhXG4mIzQzO1x0ICogc3VjY2Vzc2Z1bCB1cGRhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZGVzZWxlY3Q7XG4mIzQzO1x0aWYgKCEoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpIHx8IChzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSkgfHxcbiYjNDM7XHQgICAgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19FUlIpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtDUExEIHJlZnJlc2ggbGVmdCBzdGF0dXMgMHglMDh4XFxuXCYjMzQ7LCBzdCk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDUExEIGRpZCBub3QgY29tZSBiYWNrIGNvbmZpZ3VyZWRcJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTztcbiYjNDM7XHRcdGdvdG8gZGVzZWxlY3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgaW1hZ2Ugb24gdGhlIHBhcnQgY2hhbmdlZCwgc28gdGhlIGNhY2hlZCBVU0VSQ09ERSBoYXMgdG9vLiAqL1xuJiM0MztcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCwgMCk7XG4mIzQzO1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2lkX3RyaWVkLCBmYWxzZSk7XG4mIzQzO1x0YnAtXHUwMDNlY3BsZF9pZF9hdHRlbXB0cyA9IDA7XG4mIzQzO1xuJiM0MztleGl0X2NvbmZpZzpcbiYjNDM7XHRhZHZhX3gxX2NwbGRfZXhpdF9jb25maWcoYnApO1xuJiM0MztkZXNlbGVjdDpcbiYjNDM7XHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcbiYjNDM7cmVsZWFzZTpcbiYjNDM7XHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiAmIzQzOzQ5OTAsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0ge1xuIFx0XHUwMDI2ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsXG4mIzQzO1x0XHUwMDI2ZGV2X2F0dHJfY3BsZF9zdGF0dXMuYXR0cixcbiBcdE5VTEwsXG4gfTtcbiBcbkBAIC00OTA0LDYgJiM0Mzs1NjIxLDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKVxuIFx0XHRjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLVx1MDAzZWkyY19jbGspO1xuIFx0aWYgKGJwLVx1MDAzZW5faXJxcylcbiBcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtXHUwMDNlcGRldik7XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuIFx0ZGV2aWNlX3VucmVnaXN0ZXIoXHUwMDI2YnAtXHUwMDNlZGV2KTtcbiB9XG4gXG5AQCAtNTA1Miw2ICYjNDM7NTc3MCwyMCBAQCBwdHBfb2NwX3N5bmNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRicC1cdTAwM2VzeW5jID0gc3luYztcbiBcbiYjNDM7XHQvKiBUaGUgYWRhcHRlciBjYW4gYXBwZWFyIGFmdGVyIHByb2JlLCBzbyByZWFkIHRoZSBJRCBmcm9tIGhlcmUgb25jZVxuJiM0MztcdCAqIGl0IGhhcy4gIEEgY2xhaW0gY2FuIGZhaWwgdHJhbnNpZW50bHkgLSB0aGUgZmlybXdhcmUgbWF5IG5vdCBncmFudFxuJiM0MztcdCAqIHRoZSBzZWdtZW50IHN0cmFpZ2h0IGFmdGVyIHBvd2VyLXVwIC0gc28gcmV0cnkgYSBib3VuZGVkIG51bWJlciBvZlxuJiM0MztcdCAqIHRpbWVzLiAgLUVCVVNZIG1lYW5zIGNwbGRfbG9jayBpcyBoZWxkIGFuZCBkb2VzIG5vdCBjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYnAtXHUwMDNlaGFzX2NwbGQgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pZF90cmllZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIFJFQURfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yKSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGludCBlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9pZChicCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUJVU1kgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKCFlcnIgfHwgJiM0MzsmIzQzO2JwLVx1MDAzZWNwbGRfaWRfYXR0ZW1wdHMgXHUwMDNlPSBDUExEX0lEX01BWF9BVFRFTVBUUykpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZF90cmllZCwgdHJ1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZicC1cdTAwM2VzeW5jX3dvcmssIEhaKTtcbiB9XG4gXG5AQCAtNTA4MCw2ICYjNDM7NTgxMiwxNCBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dF9kaXNhYmxlO1xuIFxuJiM0MztcdC8qIEJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksIHNvXG4mIzQzO1x0ICogbXV0ZXhfZGVzdHJveSgpIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXgsIGFuZCBiZWZvcmVcbiYjNDM7XHQgKiBwdHBfb2NwX3JlZ2lzdGVyX3Jlc291cmNlcygpLCBzbyB0aGlzIHNlbnRpbmVsIGNhbm5vdCBvdmVyd3JpdGUgYW5cbiYjNDM7XHQgKiBhZGFwdGVyIG51bWJlciB0aGUgaTJjIG5vdGlmaWVyIHN0b3JlcyBkdXJpbmcgcmVnaXN0cmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbiYjNDM7XHRicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yID0gLTE7XG4mIzQzO1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MDk5LDYgJiM0Mzs1ODM5LDggQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0YWR2YV94MV9jYWNoZV9pMmNfYWRhcChicCk7XG4mIzQzO1xuIFx0YnAtXHUwMDNlcHRwID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNmJwLVx1MDAzZXB0cF9pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAoSVNfRVJSKGJwLVx1MDAzZXB0cCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihicC1cdTAwM2VwdHApO1xuQEAgLTUxMTksMTIgJiM0Mzs1ODYxLDEyIEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChJU19FUlIoYnAtXHUwMDNlZHBsbCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihicC1cdTAwM2VkcGxsKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZHBsbF9kZXZpY2VfYWxsb2MgZmFpbGVkXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRnb3RvIG91dF9kZXZsaW5rO1xuIFx0fVxuIFxuIFx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0Z290byBvdXRfZHBsbF9wdXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBPQ1BfU01BX05VTTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0YnAtXHUwMDNlc21hW2ldLmRwbGxfcGluID0gZHBsbF9waW5fZ2V0KGNsa2lkLCBpLCBUSElTX01PRFVMRSxcbkBAIC01MTUwLDcgJiM0Mzs1ODkyLDE2IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdFx0ZHBsbF9waW5fdW5yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4sIFx1MDAyNmRwbGxfcGluc19vcHMsIFx1MDAyNmJwLVx1MDAzZXNtYVtpXSk7XG4gXHRcdGRwbGxfcGluX3B1dChicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4sIFx1MDAyNmJwLVx1MDAzZXNtYVtpXS50cmFja2VyKTtcbiBcdH1cbiYjNDM7XHQvKiBkcGxsX2RldmljZV9yZWdpc3RlcigpIHRha2VzIGEgc2Vjb25kIHJlZmVyZW5jZSBhbmQgc3RvcmVzIGJwOyBvbmx5XG4mIzQzO1x0ICogZHBsbF9kZXZpY2VfdW5yZWdpc3RlcigpIGRyb3BzIGl0LiAgV2l0aG91dCB0aGlzIHRoZSBkZXZpY2Ugc3RheXNcbiYjNDM7XHQgKiB2aXNpYmxlIHdpdGggYSBwcml2IHBvaW50ZXIgaW50byBzdG9yYWdlIGRldmxpbmtfZnJlZSgpIHdpbGwgcmVsZWFzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRkcGxsX2RldmljZV91bnJlZ2lzdGVyKGJwLVx1MDAzZWRwbGwsIFx1MDAyNmRwbGxfb3BzLCBicCk7XG4mIzQzO291dF9kcGxsX3B1dDpcbiBcdGRwbGxfZGV2aWNlX3B1dChicC1cdTAwM2VkcGxsLCBcdTAwMjZicC1cdTAwM2V0cmFja2VyKTtcbiYjNDM7b3V0X2Rldmxpbms6XG4mIzQzO1x0LyogZGV0YWNoKCkgZGVzdHJveXMgY3BsZF9sb2NrOyBubyBkZXZsaW5rIG9wIG1heSBzdGlsbCByZWFjaCBpdCAqL1xuJiM0MztcdGRldmxpbmtfdW5yZWdpc3RlcihkZXZsaW5rKTtcbiBvdXQ6XG4gXHRwdHBfb2NwX2RldGFjaChicCk7XG4gb3V0X2Rpc2FibGU6XG5AQCAtNTE5Niw2ICYjNDM7NTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiwgKmNoaWxkID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7XG4gXHRzdHJ1Y3QgcHRwX29jcCAqYnA7XG4gXHRib29sIGFkZDtcbiBcbkBAIC01MjE5LDExICYjNDM7NTk3MSwyMSBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXG4gZm91bmQ6XG4gXHRicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0aWYgKGFkZClcbiYjNDM7XHRhZGFwID0gaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKTtcbiYjNDM7XHRpZiAoYWRkKSB7XG4gXHRcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFwmIzM0O2kyY1wmIzM0Oyk7XG4tXHRlbHNlXG4mIzQzO1x0XHQvKiBPbmx5IHRoZSBjYXJkJiMzOTtzIG93biBjb250cm9sbGVyOiBhIG11eCBjaGlsZCBhZGRlZCBvbiBpdFxuJiM0MztcdFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXG4mIzQzO1x0XHQgKiByZWN5Y2xlZCwgc28gdGhlIGNsYWltIHJlLWNoZWNrcyB0aGUgcGFyZW50IGl0c2VsZi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGJwLVx1MDAzZWkyY19jdHJsIFx1MDAyNlx1MDAyNiBhZGFwLVx1MDAzZWRldi5wYXJlbnQgPT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KVxuJiM0MztcdFx0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGFkYXAtXHUwMDNlbnIpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXG4mIzQzO1x0XHRpZiAoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpID09IGFkYXAtXHUwMDNlbnIpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgLTEpO1xuIFx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZicC1cdTAwM2VkZXYua29iaiwgXCYjMzQ7aTJjXCYjMzQ7KTtcbi1cbiYjNDM7XHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDczYmVlODgxNjgxYmIzZTU1NDBhNzQ4YjVjZWNlNWJiNDA4YmM3OGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAwNzoyNzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkCmluZGV4IDNhZTQxYjc2MzRhYzkuLjZkZGNhNDUyYmM2MzMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZApAQCAtMTEsNiAmIzQzOzExLDM0IEBAIENvbnRhY3Q6CUpvbmF0aGFuIExlbW9uICZsdDtqb25hdGhhbi5sZW1vbkBnbWFpbC5jb20mZ3Q7CiBEZXNjcmlwdGlvbjoJVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIE50aCB0aW1lY2FyZAogCQlyZWdpc3RlcmVkLgogCiYjNDM7V2hhdDoJCS9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9jcGxkX3N0YXR1cwomIzQzO0RhdGU6CQlKdWx5IDIwMjYKJiM0MztDb250YWN0OglTYWdpIE1haW1vbiAmbHQ7bWFpbW9uLnNhZ2lAZ21haWwuY29tJmd0OwomIzQzO0Rlc2NyaXB0aW9uOgkoUk8sIHJvb3Qgb25seSkgVGhlIGZsYWdzIHNldCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZQomIzQzOwkJVEFQIENQTEQsIHNwYWNlIHNlcGFyYXRlZCwgb3IgYW4gZW1wdHkgbGluZSB3aGVuIG5vbmUgaXMKJiM0MzsJCXNldC4gIE9ubHkgcHJlc2VudCBvbiBBRFZBIHgxIFRBUCBib2FyZHMgKFBDSSBJRAomIzQzOwkJMHhhZDVhOjB4MDQxMCkuCiYjNDM7CiYjNDM7CQk9PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsJCWRvbmUgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBwcm9ncmFtbWVkCiYjNDM7CQkJICAgIHN1Y2Nlc3NmdWxseSBhbmQgaXMgYWN0aXZlCiYjNDM7CQlidXN5ICAgICAgICBhbiBpbnRlcm5hbCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MKJiM0MzsJCWZhaWxlZCAgICAgIHRoZSBsYXN0IElTQyBvcGVyYXRpb24gZmFpbGVkCiYjNDM7CQk9PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MzsJCUZvciBleGFtcGxlICYjMzQ7YnVzeSYjMzQ7IHdoaWxlIHByb2dyYW1taW5nLCBvciAmIzM0O2J1c3kgZmFpbGVkJiMzNDsgaWYgYQomIzQzOwkJZmFpbHVyZSBpcyBsYXRjaGVkIHdoaWxlIGFub3RoZXIgb3BlcmF0aW9uIHJ1bnMuCiYjNDM7CiYjNDM7CQlBIHJlYWQgYXJiaXRyYXRlcyBmb3IgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZCByZXByb2dyYW1zIHRoZQomIzQzOwkJb24tY2FyZCBtdXgsIHNvIGl0IGlzIHJlc3RyaWN0ZWQgdG8gcm9vdC4gIFRoZSBMYXR0aWNlIGRldmljZQomIzQzOwkJSUQgb2YgdGhlIENQTEQgaXMgcmVhZCBvbmNlIGJ5IHRoZSBkcml2ZXIsIHNob3J0bHkgYWZ0ZXIKJiM0MzsJCXByb2JlLCBhbmQgcmVwb3J0ZWQgZnJvbSB0aGF0IGNhY2hlZCB2YWx1ZSBhcyB0aGUgZml4ZWQKJiM0MzsJCSYjMzQ7Y3BsZC5pZCYjMzQ7IHZlcnNpb24gYnkgZGV2bGluayBkZXYgaW5mby4KJiM0MzsKJiM0MzsJCU5ldyBDUExEIGZpcm13YXJlIGlzIHByb2dyYW1tZWQgd2l0aCBkZXZsaW5rIGRldiBmbGFzaCwKJiM0MzsJCXNlbGVjdGluZyB0aGUgJiMzNDtmdy5jcGxkJiMzNDsgY29tcG9uZW50OyBzZWUKJiM0MzsJCURvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0LgomIzQzOwogV2hhdDoJCS9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlcwogRGF0ZToJCVNlcHRlbWJlciAyMDIxCiBDb250YWN0OglKb25hdGhhbiBMZW1vbiAmbHQ7am9uYXRoYW4ubGVtb25AZ21haWwuY29tJmd0OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0CmluZGV4IGQ0YTgzZmRjZmY3ZmUuLjFhZjc4MGM4MTFlZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKQEAgLTk5LDYgJiM0Mzs5OSw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy4KICAgIG5mcAogICAgb2N0ZW9udHgyCiAgICBwcmVzdGVyYQomIzQzOyAgIHB0cF9vY3AKICAgIHFlZAogICAgc2ZjCiAgICBzdG1tYWMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzdlOWYxZWJkMWE4MQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0CkBAIC0wLDAgJiM0MzsxLDcwIEBACiYjNDM7Li4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MztwdHBfb2NwIGRldmxpbmsgc3VwcG9ydAomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZSBgYHB0cF9vY3BgYAomIzQzO2RldmljZSBkcml2ZXI6IHRoZSBpbmZvIHZlcnNpb25zIGl0IHJlcG9ydHMgYW5kIGl0cyBmbGFzaCB1cGRhdGUgc3VwcG9ydC4KJiM0MzsKJiM0MztJbmZvIHZlcnNpb25zCiYjNDM7PT09PT09PT09PT09PQomIzQzOwomIzQzO1RoZSBgYHB0cF9vY3BgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zCiYjNDM7CiYjNDM7Li4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZAomIzQzOyAgIDp3aWR0aHM6IDUgNSA5MAomIzQzOwomIzQzOyAgICogLSBOYW1lCiYjNDM7ICAgICAtIFR5cGUKJiM0MzsgICAgIC0gRGVzY3JpcHRpb24KJiM0MzsgICAqIC0gYGBmd2BgCiYjNDM7ICAgICAtIHJ1bm5pbmcKJiM0MzsgICAgIC0gVmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgcnVubmluZyBvbiB0aGUgY2FyZC4gIFJlcG9ydGVkIGFzIGBgbG9hZGVyYGAKJiM0MzsgICAgICAgaW5zdGVhZCB3aGVuIHRoZSBjYXJkIGlzIHJ1bm5pbmcgdGhlIGZpcm13YXJlIGxvYWRlci4KJiM0MzsgICAqIC0gYGBib2FyZC5pZGBgCiYjNDM7ICAgICAtIGZpeGVkCiYjNDM7ICAgICAtIEJvYXJkIGlkZW50aWZpZXIsIHJlYWQgZnJvbSB0aGUgb24tY2FyZCBFRVBST00uCiYjNDM7ICAgKiAtIGBgY3BsZC5pZGBgCiYjNDM7ICAgICAtIGZpeGVkCiYjNDM7ICAgICAtIExhdHRpY2UgZGV2aWNlIElEIChJRENPREUpIG9mIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzIGBgMHglMDh4YGAuCiYjNDM7ICAgICAgIE9ubHkgcHJlc2VudCBvbiBBRFZBIFRpbWVDYXJkIFgxIGJvYXJkcywgd2hpY2ggYXJlIHRoZSBvbmx5IG9uZXMKJiM0MzsgICAgICAgY2FycnlpbmcgdGhhdCBDUExELiAgUmVhZGluZyBpdCBjbGFpbXMgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZAomIzQzOyAgICAgICByZXByb2dyYW1zIHRoZSBvbi1jYXJkIG11eCwgc28gdGhlIGRyaXZlciBkb2VzIHRoYXQgb25jZSBmcm9tIGl0cwomIzQzOyAgICAgICBvd24gd29ya2VyIGFuZCByZXBvcnRzIHRoZSBjYWNoZWQgdmFsdWUgaGVyZTsgdGhlIHZlcnNpb24gaXMKJiM0MzsgICAgICAgb21pdHRlZCB1bnRpbCB0aGF0IHJlYWQgaGFzIHN1Y2NlZWRlZC4KJiM0MzsgICAqIC0gYGBmdy5jcGxkYGAKJiM0MzsgICAgIC0gcnVubmluZwomIzQzOyAgICAgLSBVU0VSQ09ERSBvZiB0aGUgaW1hZ2UgcHJvZ3JhbW1lZCBpbnRvIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzCiYjNDM7ICAgICAgIGBgMHglMDh4YGAuICBSZWFkIHRvZ2V0aGVyIHdpdGggYGBjcGxkLmlkYGAgYW5kIHJlcG9ydGVkIHRoZSBzYW1lCiYjNDM7ICAgICAgIHdheS4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCBuYW1lIHRvIHBhc3MgdG8gYGBkZXZsaW5rIGRldiBmbGFzaGBgCiYjNDM7ICAgICAgIHRvIHVwZGF0ZSB0aGUgQ1BMRC4KJiM0MzsKJiM0MztGbGFzaCB1cGRhdGUKJiM0Mzs9PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGUgZHJpdmVyIGltcGxlbWVudHMgYGBkZXZsaW5rIGRldiBmbGFzaGBgIGZvciB0d28gc2VwYXJhdGUgdGFyZ2V0cywKJiM0MztzZWxlY3RlZCB3aXRoIHRoZSBjb21wb25lbnQgbmFtZS4KJiM0MzsKJiM0MzsuLiBsaXN0LXRhYmxlOjogRmxhc2ggY29tcG9uZW50cwomIzQzOyAgIDp3aWR0aHM6IDIwIDgwCiYjNDM7CiYjNDM7ICAgKiAtIENvbXBvbmVudAomIzQzOyAgICAgLSBEZXNjcmlwdGlvbgomIzQzOyAgICogLSAobm9uZSkKJiM0MzsgICAgIC0gVGhlIGNhcmQmIzM5O3Mgb3duIGZsYXNoLCB3cml0dGVuIHRocm91Z2ggdGhlIFNQSSBjb250cm9sbGVyIHRoZSBkcml2ZXIKJiM0MzsgICAgICAgZXhwb3Nlcy4gIFRoZSBjYXJkIHJ1bnMgdGhlIG5ldyBpbWFnZSBhZnRlciBpdHMgbmV4dCByZXNldC4KJiM0MzsgICAqIC0gYGBmdy5jcGxkYGAKJiM0MzsgICAgIC0gVGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggb2YgdGhlIFRBUCBDUExEIG9uIEFEVkEgVGltZUNhcmQgWDEgYm9hcmRzLAomIzQzOyAgICAgICBwcm9ncmFtbWVkIG92ZXIgSTJDIHdpdGggdGhlIE1hY2hYTzMgaW4tc3lzdGVtIHByb2dyYW1taW5nIGNvbW1hbmRzCiYjNDM7ICAgICAgIGFuZCBhY3RpdmF0ZWQgd2l0aCBhIFJFRlJFU0gsIHNvIHRoZSBuZXcgaW1hZ2UgcnVucyBpbW1lZGlhdGVseS4KJiM0MzsgICAgICAgVGhlIGltYWdlIGlzIHRoZSByYXcgY29uZmlndXJhdGlvbiBiaXRzdHJlYW0sIGEgd2hvbGUgbnVtYmVyIG9mCiYjNDM7ICAgICAgIDE2LWJ5dGUgcGFnZXM7IGNvbnRhaW5lciBmb3JtYXRzIHN1Y2ggYXMgYGAuamVkYGAgYXJlIHJlamVjdGVkLgomIzQzOwomIzQzO1Byb2dyYW1taW5nIHRoZSBDUExEIGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgZm9yIHRoZSB3aG9sZSBjeWNsZSwgc28KJiM0MztyZWFkcyBvZiB0aGUgY2FyZCYjMzk7cyBFRVBST00gYmxvY2sgdW50aWwgaXQgY29tcGxldGVzLiAgUHJvZ3Jlc3MgaXMgcmVwb3J0ZWQKJiM0Mzt3aXRoIHRoZSBzdGFuZGFyZCBkZXZsaW5rIHN0YXR1cyBub3RpZmljYXRpb25zLgomIzQzOwomIzQzO0V4YW1wbGU6OgomIzQzOwomIzQzOyAgICAkIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOjAyOjAwLjAgZmlsZSBhZHZhLWNwbGQuYmluIGNvbXBvbmVudCBmdy5jcGxkCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDBlMDRkOTJkMWIwOTguLjExM2YzMTQzNDYxNzcgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yMDQ3OSw2ICYjNDM7MjA0NzksNyBAQCBPUEVOQ09NUFVURSBQVFAgQ0xPQ0sgRFJJVkVSCiBNOglWYWRpbSBGZWRvcmVua28gJmx0O3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXYmZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3QKIEY6CWRyaXZlcnMvcHRwL3B0cF9vY3AuYwogCiBPUEVOQ09SRVMgSTJDIEJVUyBEUklWRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuYwppbmRleCAzZDI2ZWMxZjdiOWVjLi41OGI5MGIyYjI4MmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfb2NwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wdHAvcHRwX29jcC5jCkBAIC0yMCwxMCAmIzQzOzIwLDE0IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpL2FsdGVyYS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kZXZsaW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaTJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L210ZC9tdGQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9udm1lbS1jb25zdW1lci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYzE2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZHBsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZmlybXdhcmUuaCZndDsKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FVEFfVElNRUNBUkQJCTB4MDQwMAogCkBAIC04NSw2ICYjNDM7ODksOCBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8gewogCXU4CQkJCXNpZ25hbHNfbnI7CiAJdTgJCQkJZnJlcV9pbl9ucjsKIAljb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAJKmF0dHJfZ3JvdXBzOwomIzQzOwkvKiB4MTogVEFQIENQTEQgcHJlc2VudCAqLwomIzQzOwlib29sCQkJCWhhc19jcGxkOwogfTsKIAogI2RlZmluZSBPQ1BfQ1RSTF9FTkFCTEUJCUJJVCgwKQpAQCAtMTYzLDcgJiM0MzsxNjksOCBAQCBzdHJ1Y3QgZ3Bpb19yZWcgewogCXUzMglncGlvMTsKIAl1MzIJX19wYWQwOwogCXUzMglncGlvMjsKLQl1MzIJX19wYWQxOwomIzQzOwkvKiBhZHZhX3gxOiBJMkMgYnVzIG93bmVyc2hpcCByZWdpc3RlcjsgcmVzZXJ2ZWQgb24gb3RoZXIgdmFyaWFudHMgKi8KJiM0MzsJdTMyCWkyY19idXNfY3RybDsKIH07CiAKIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcgewpAQCAtNDE2LDYgJiM0Mzs0MjMsMjcgQEAgc3RydWN0IHB0cF9vY3AgewogCWRwbGxfdHJhY2tlciB0cmFja2VyOwogCWludCBzaWduYWxzX25yOwogCWludCBmcmVxX2luX25yOwomIzQzOwkvKiBhZHZhX3gxIENQTEQgSTJDIChpbnRlcm5hbCB1c2Ugb25seSkgKi8KJiM0MzsJLyogc2VyaWFsaXNlcyBDUExEIG9wZXJhdGlvbnMgKi8KJiM0MzsJc3RydWN0IG11dGV4CQljcGxkX2xvY2s7CiYjNDM7CS8qIEkyQyBhZGFwdGVyIG5yOyAtMSBpZiBhYnNlbnQgKi8KJiM0MzsJaW50CQkJY3BsZF9pMmNfYWRhcF9ucjsKJiM0MzsJLyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi8KJiM0MzsJc3RydWN0IGkyY19hZGFwdGVyCSpjcGxkX2FkYXA7CiYjNDM7CS8qIHNjcmF0Y2gsIHdyaXRlIGhhbGYgdGhlbiByZWFkIGhhbGY7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqLwomIzQzOwl1OAkJCSpjcGxkX2J1ZjsKJiM0MzsJLyogTGF0dGljZSBkZXZpY2UgSUQ7IDAgaWYgdW5yZWFkICovCiYjNDM7CXUzMgkJCWNwbGRfaWQ7CiYjNDM7CS8qIFVTRVJDT0RFIG9mIHRoZSBwcm9ncmFtbWVkIGltYWdlOyB2YWxpZCBvbmNlIGNwbGRfaWQgaXMgc2V0ICovCiYjNDM7CXUzMgkJCWNwbGRfdXNlcmNvZGU7CiYjNDM7CS8qIHRoZSBvbmUtc2hvdCBJRCByZWFkIGlzIGZpbmlzaGVkLCBzdWNjZXNzZnVsbHkgb3Igbm90ICovCiYjNDM7CWJvb2wJCQljcGxkX2lkX3RyaWVkOwomIzQzOwkvKiBmYWlsZWQgSUQgcmVhZCBhdHRlbXB0cyBzbyBmYXIgKi8KJiM0MzsJdW5zaWduZWQgaW50CQljcGxkX2lkX2F0dGVtcHRzOwomIzQzOwkvKiB4MSBUQVAgQ1BMRCBwcmVzZW50ICovCiYjNDM7CWJvb2wJCQloYXNfY3BsZDsKJiM0MzsJLyogRU5fQ0ZHX1RQIGlzc3VlZCBidXQgbm90IHlldCBSRUZSRVNIJiMzOTtkICovCiYjNDM7CWJvb2wJCQljcGxkX2luX2NvbmZpZ19tb2RlOwogfTsKIAogI2RlZmluZSBPQ1BfUkVRX1RJTUVTVEFNUAlCSVQoMCkKQEAgLTQ1Miw2ICYjNDM7NDgwLDEzIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV9zbWFfb3A7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfeDFfc21hX29wOwogCiYjNDM7LyogRmxhc2ggY29tcG9uZW50IG5hbWluZyB0aGUgQ1BMRCBpbWFnZSwgYXMgcmVwb3J0ZWQgYnkgLSZndDtpbmZvX2dldCgpLiAqLwomIzQzOyNkZWZpbmUgQURWQV9DUExEX0NPTVBPTkVOVAkmIzM0O2Z3LmNwbGQmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBmYl90aW1lY2FyZF9ncm91cHNbXTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW107CkBAIC0xMjczLDYgJiM0MzsxMzA4LDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHsKIAkJCS5zaWduYWxzX25yICAgPSA0LAogCQkJLmZyZXFfaW5fbnIgICA9IDQsCiAJCQkuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsCiYjNDM7CQkJLmhhc19jcGxkICAgICA9IHRydWUsCiAJCX0sCiAJfSwKIAl7IH0KQEAgLTIxMzMsNiAmIzQzOzIxNjksMTcgQEAgcHRwX29jcF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKIAljb25zdCBjaGFyICptc2c7CiAJaW50IGVycjsKIAomIzQzOwlpZiAocGFyYW1zLSZndDtjb21wb25lbnQpIHsKJiM0MzsJCWlmICghYnAtJmd0O2hhc19jcGxkIHx8CiYjNDM7CQkgICAgc3RyY21wKHBhcmFtcy0mZ3Q7Y29tcG9uZW50LCBBRFZBX0NQTERfQ09NUE9ORU5UKSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O3Vuc3VwcG9ydGVkIGZsYXNoIGNvbXBvbmVudCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXR1cm4gYWR2YV94MV9jcGxkX2ZsYXNoKGJwLCBkZXZsaW5rLCBwYXJhbXMtJmd0O2Z3LCBleHRhY2spOwomIzQzOwl9CiYjNDM7CiAJZGV2ID0gcHRwX29jcF9maW5kX2ZsYXNoKGJwKTsKIAlpZiAoIWRldikgewogCQlkZXZfZXJyKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtDYW4mIzM5O3QgZmluZCBGbGFzaCBTUEkgYWRhcHRlclxuJiMzNDspOwpAQCAtMjE1NSwxMCAmIzQzOzIyMDIsMTMgQEAgc3RhdGljIGludAogcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKJiM0MzsJZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlID0KJiM0MzsJCQkJCURFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfQ09NUE9ORU5UOwogCXN0cnVjdCBwdHBfb2NwICpicCA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTsKIAljb25zdCBjaGFyICpmd19pbWFnZTsKIAljaGFyIGJ1ZlszMl07CiAJaW50IGVycjsKJiM0MzsJdTMyIGlkOwogCiAJZndfaW1hZ2UgPSBicC0mZ3Q7ZndfbG9hZGVyID8gJiMzNDtsb2FkZXImIzM0OyA6ICYjMzQ7ZncmIzM0OzsKIAlzcHJpbnRmKGJ1ZiwgJiMzNDslZC4lZCYjMzQ7LCBicC0mZ3Q7ZndfdGFnLCBicC0mZ3Q7ZndfdmVyc2lvbik7CkBAIC0yMTY2LDYgJiM0MzsyMjE2LDI4IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CS8qIFJlYWQgYnkgdGhlIHdvcmtlciwgbm90IGhlcmU6IHRoaXMgY29tbWFuZCBpcyB1bnByaXZpbGVnZWQgYW5kCiYjNDM7CSAqIHJlYWRpbmcgdGhlIElEIGNsYWltcyB0aGUgSTJDIGJ1cy4gIDAgbWVhbnMgdW5yZWFkIC0gc2tpcCBpdAomIzQzOwkgKiByYXRoZXIgdGhhbiBmYWlsLCBkZXZsaW5rIGRpc2NhcmRzIHRoZSB3aG9sZSByZXBseSBvbiBlcnJvci4KJiM0MzsJICovCiYjNDM7CWlkID0gUkVBRF9PTkNFKGJwLSZndDtjcGxkX2lkKTsKJiM0MzsJaWYgKGJwLSZndDtoYXNfY3BsZCAmYW1wOyZhbXA7IGlkKSB7CiYjNDM7CQlzcHJpbnRmKGJ1ZiwgJiMzNDsweCUwOHgmIzM0OywgaWQpOwomIzQzOwkJZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgJiMzNDtjcGxkLmlkJiMzNDssIGJ1Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZmxhc2hhYmxlIGNvbXBvbmVudDogbmFtaW5nIGl0IGhlcmUgaXMgd2hhdCBsZXRzCiYjNDM7CQkgKiAmIzM0O2RldmxpbmsgZGV2IGZsYXNoIC4uLiBjb21wb25lbnQgZncuY3BsZCYjMzQ7IHRocm91Z2gsIGFzIHRoZQomIzQzOwkJICogY29yZSBtYXRjaGVzIHRoZSBuYW1lIGFnYWluc3QgdGhlIHZlcnNpb25zIHJlcG9ydGVkIGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXNwcmludGYoYnVmLCAmIzM0OzB4JTA4eCYjMzQ7LCBSRUFEX09OQ0UoYnAtJmd0O2NwbGRfdXNlcmNvZGUpKTsKJiM0MzsJCWVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0X2V4dChyZXEsICYjMzQ7ZncuY3BsZCYjMzQ7LCBidWYsCiYjNDM7CQkJCQkJCSAgIHZlcl90eXBlKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwogCWlmICghYnAtJmd0O2hhc19lZXByb21fZGF0YSkgewogCQlwdHBfb2NwX3JlYWRfZWVwcm9tKGJwKTsKIAkJaWYgKCFicC0mZ3Q7aGFzX2VlcHJvbV9kYXRhKQpAQCAtMzE5OSw2ICYjNDM7MzI3MSw4IEBAIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcikKIAkJcmV0dXJuIGVycjsKIAlwdHBfb2NwX3NtYV9pbml0KGJwKTsKIAomIzQzOwlicC0mZ3Q7aGFzX2NwbGQgPSBpbmZvLSZndDtoYXNfY3BsZDsKJiM0MzsKIAlyZXR1cm4gcHRwX29jcF9pbml0X2Nsb2NrKGJwLCAmYW1wO2luZm8tJmd0O3NlcnZvKTsKIH0KIApAQCAtNDIyNiw2ICYjNDM7NDMwMCw2NDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW10gPSB7CiAJeyB9LAogfTsKIAomIzQzOy8qCiYjNDM7ICogYWR2YV94MSBUQVAgQ1BMRCAoTGF0dGljZSBMQ01YTzNMRi0yMTAwKSBoZWxwZXJzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhcmQgaGFzIHR3byBJMkMgY29udHJvbGxlcnM7IExpbnV4IHJlZ2lzdGVycyBvbmx5IDB4MDAxNTAwMDAuCiYjNDM7ICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBpcyB3aXJlZCB0bzoKJiM0MzsgKgomIzQzOyAqICAgZ3JhbnQgMDogIDB4MTUwMDAwIC0mZ3Q7IEVFUFJPTXMgICAgIDB4MTIwMDAwIC0mZ3Q7IFRNQyBvciBNLjIsIE1CJiMzOTtzIGNob2ljZQomIzQzOyAqICAgZ3JhbnQgMTogIDB4MTUwMDAwIC0mZ3Q7IFRNQyBidXMgICAgIDB4MTIwMDAwIC0mZ3Q7IE0uMgomIzQzOyAqCiYjNDM7ICogVGhlIFBDQTk1NDggYXQgMHg3NCBhbmQgdGhlIENQTEQgYXQgMHg0MCBiZWhpbmQgaXRzIGNoYW5uZWwgMCBhcmUgb24gdGhlCiYjNDM7ICogVE1DIGJ1cywgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBUaGUgRUVQUk9NcyBhcmUgbm90CiYjNDM7ICogYmVoaW5kIHRoZSBhZGFwdGVyIGZvciB0aGF0IHdpbmRvdywgc28gYSBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2sKJiM0MzsgKiBhbmQgdGhlIGFkYXB0ZXIgbG9jayB0byBrZWVwIHRoZSBFRVBST00gYW5kIG52bWVtIHBhdGhzIG9mZiBpdC4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIEFEVkFfTVVYX0FERFIgICAgIDB4NzQKJiM0MzsjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDAKJiM0MzsjZGVmaW5lIEFEVkFfTVVYX0NIQU5ORUwgIDAKJiM0MzsKJiM0MzsvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqLwomIzQzOyNkZWZpbmUgQURWQV9DUExEX1hGRVJfTUFYIDMyCiYjNDM7CiYjNDM7I2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVQomIzQzOyNkZWZpbmUgTUJMQVpFX0dSQU5URUQgICAgMHg1NTU1YWFhYVUKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRUxFQVNFICAgIDB4NTU1NTAwMDBVCiYjNDM7I2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDAKJiM0MzsjZGVmaW5lIE1CTEFaRV9SRVRSWV9VUyAgIDEwMDAwCiYjNDM7CiYjNDM7LyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqLwomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9JRCAgICAgIDB4RTAwMDAwMDBVTAomIzQzOyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSAweEMwMDAwMDAwVUwKJiM0MzsjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUwKJiM0MzsjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqLwomIzQzOyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjYKJiM0MzsjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NgomIzQzOyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzAKJiM0MzsjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFCiYjNDM7I2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OQomIzQzOyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2CiYjNDM7I2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi8KJiM0MzsjZGVmaW5lIENQTERfRVJBU0VfTVMgICAgICAgICAxNTAwMCAgLyogY29uZmlnIHNlY3RvciBlcmFzZSwgZGF0YXNoZWV0IG1heCAqLwomIzQzOyNkZWZpbmUgQ1BMRF9JRF9NQVhfQVRURU1QVFMgIDEwICAgICAvKiBvbmUgcGVyIHN5bmNfd29yayB0aWNrICovCiYjNDM7CiYjNDM7LyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqLwomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KQomIzQzOyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMikKJiM0MzsjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpCiYjNDM7I2RlZmluZSBDUExEX1NUQVRVU19FUlIgICAgR0VOTUFTSygyNSwgMjMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJc3N1ZSBvbmUgSTJDIHRyYW5zYWN0aW9uIG9uIHRoZSBUTUMgYnVzOiBAY21kIGlmIG5vdCBuZWdhdGl2ZSwgdGhlbgomIzQzOyAqIEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSAoTlVMTCBzZW5kcyB6ZXJvcyksIHRoZW4gQHJsZW4gYnl0ZXMgcmVhZCBiYWNrLgomIzQzOyAqIFRoZSBtZXNzYWdlIGlzIGJ1aWx0IGluIHRoZSBzY3JhdGNoIGJ1ZmZlciBmcm9tIGFkdmFfeDFfYnVzX2NsYWltKCksIHNvCiYjNDM7ICogYW4gdXBsb2FkIGNvc3RzIG9uZSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIG9uZSBwZXIgcGFnZS4gIEkyQ19NX0RNQV9TQUZFCiYjNDM7ICogaXMgbm90IHNldDogdGhlIHR3byBoYWx2ZXMgYXJlIG5vdCBzZXBhcmF0ZWx5IGFsaWduZWQsIHNvIGxldCB0aGUgY29yZQomIzQzOyAqIGJvdW5jZS4gIENhbGxlciBob2xkcyB0aGUgY2xhaW0sIGhlbmNlIF9faTJjX3RyYW5zZmVyKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCwKJiM0MzsJCQkgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sCiYjNDM7CQkJICAgIHZvaWQgKnJkYXRhLCB1OCBybGVuKQomIzQzO3sKJiM0MzsJdTggKndidWYsICpyYnVmOwomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CiYjNDM7CXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CiYjNDM7CWludCBubXNncyA9IDAsIHJldDsKJiM0MzsJdTE2IGhkciA9IGNtZCAmZ3Q7PSAwOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWFkYXAgPSBicC0mZ3Q7Y3BsZF9hZGFwOwomIzQzOwlpZiAoIWFkYXAgfHwgIWJwLSZndDtjcGxkX2J1ZikKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlpZiAoaGRyICYjNDM7IHdsZW4gJmd0OyBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiAmZ3Q7IEFEVkFfQ1BMRF9YRkVSX01BWCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwl3YnVmID0gYnAtJmd0O2NwbGRfYnVmOwomIzQzOwlyYnVmID0gYnAtJmd0O2NwbGRfYnVmICYjNDM7IEFEVkFfQ1BMRF9YRkVSX01BWDsKJiM0MzsKJiM0MzsJaWYgKGhkciAmIzQzOyB3bGVuKSB7CiYjNDM7CQlpZiAoaGRyKQomIzQzOwkJCXdidWZbMF0gPSBjbWQ7CiYjNDM7CQlpZiAod2RhdGEpCiYjNDM7CQkJbWVtY3B5KHdidWYgJiM0MzsgaGRyLCB3ZGF0YSwgd2xlbik7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtc2V0KHdidWYgJiM0MzsgaGRyLCAwLCB3bGVuKTsKJiM0MzsJCW1zZ3Nbbm1zZ3MmIzQzOyYjNDM7XSA9IChzdHJ1Y3QgaTJjX21zZyl7CiYjNDM7CQkJLmFkZHIgID0gYWRkciwKJiM0MzsJCQkuZmxhZ3MgPSAwLAomIzQzOwkJCS5sZW4gICA9IGhkciAmIzQzOyB3bGVuLAomIzQzOwkJCS5idWYgICA9IHdidWYsCiYjNDM7CQl9OwomIzQzOwl9CiYjNDM7CWlmIChybGVuKSB7CiYjNDM7CQltc2dzW25tc2dzJiM0MzsmIzQzO10gPSAoc3RydWN0IGkyY19tc2cpewomIzQzOwkJCS5hZGRyICA9IGFkZHIsCiYjNDM7CQkJLmZsYWdzID0gSTJDX01fUkQsCiYjNDM7CQkJLmxlbiAgID0gcmxlbiwKJiM0MzsJCQkuYnVmICAgPSByYnVmLAomIzQzOwkJfTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2dzLCBubXNncyk7CiYjNDM7CWlmIChyZXQgIT0gbm1zZ3MpCiYjNDM7CQlyZXR1cm4gKHJldCAmbHQ7IDApID8gcmV0IDogLUVJTzsKJiM0MzsKJiM0MzsJaWYgKHJkYXRhICZhbXA7JmFtcDsgcmxlbikKJiM0MzsJCW1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBIYW5kIHRoZSBzZWdtZW50IGJhY2ssIGFuZCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gZHJvcCB0aGUgZ3JhbnQgYmVmb3JlCiYjNDM7ICogdGhlIGNhbGxlciB1bmxvY2tzIHRoZSBhZGFwdGVyOiBhIHRyYW5zZmVyIHF1ZXVlZCBiZWhpbmQgdXMgd291bGQKJiM0MzsgKiBvdGhlcndpc2UgYmUgY2xvY2tlZCBvdXQgd2hpbGUgdGhlIGNvbnRyb2xsZXIgaXMgc3RpbGwgb24gdGhlIFRNQyBidXMsCiYjNDM7ICogd2hpY2ggaXMgd2hhdCBob2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgYWNyb3NzIHRoZSBncmFudCBleGlzdHMgdG8gc3RvcC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhZHZhX3gxX21ibGF6ZV9yZWxlYXNlKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWJwLSZndDtwcHNfc2VsZWN0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpb3dyaXRlMzIoTUJMQVpFX1JFTEVBU0UsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CS8qIEZsdXNoIHRoZSBwb3N0ZWQgd3JpdGUsIGFzIHRoZSBhY3F1aXJlIHBhdGggZG9lcy4gKi8KJiM0MzsJaW9yZWFkMzIoJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1CTEFaRV9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKGlvcmVhZDMyKCZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCkgIT0gTUJMQVpFX0dSQU5URUQpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJdXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICYjNDM7IDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldl93YXJuKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtUTUMgYnVzIHN0aWxsIGdyYW50ZWQgYWZ0ZXIgcmVsZWFzZVxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBY3F1aXJlIHRoZSBzaGFyZWQgSTJDIGJ1cyBmcm9tIHRoZSBNaWNyb0JsYXplIGZpcm13YXJlLiAgUmV0dXJucyB3aXRoIG5vCiYjNDM7ICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhCiYjNDM7ICogc2VnbWVudCB0byBhIGhvc3QgdGhhdCBoYXMgZ2l2ZW4gdXAgd2FpdGluZyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWJwLSZndDtwcHNfc2VsZWN0KQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CS8qIERyb3AgYSByZXF1ZXN0IGxlZnQgYnkgYSBjYWxsZXIgdGhhdCBkaWVkIG1pZC1zZXF1ZW5jZTsgY3BsZF9sb2NrCiYjNDM7CSAqIGtlZXBzIGxpdmUgb25lcyBvdXQuICBUaGUgcmVhZCBiYWNrIG9ubHkgZmx1c2hlcyB0aGUgcG9zdGVkIHdyaXRlLgomIzQzOwkgKi8KJiM0MzsJaW93cml0ZTMyKDAsICZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CWlvcmVhZDMyKCZhbXA7YnAtJmd0O3Bwc19zZWxlY3QtJmd0O2kyY19idXNfY3RybCk7CiYjNDM7CiYjNDM7CWlvd3JpdGUzMihNQkxBWkVfUkVRVUVTVCwgJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1CTEFaRV9SRVRSSUVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICYjNDM7IDEwMDApOwomIzQzOwkJdmFsID0gaW9yZWFkMzIoJmFtcDticC0mZ3Q7cHBzX3NlbGVjdC0mZ3Q7aTJjX2J1c19jdHJsKTsKJiM0MzsJCWlmICh2YWwgPT0gTUJMQVpFX0dSQU5URUQpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSb3V0ZSB0aGUgaG9zdCBjb250cm9sbGVyIGJhY2sgdG8gdGhlIEVFUFJPTXMgYW5kIHJlbGVhc2UgdGhlIGFkYXB0ZXIuCiYjNDM7ICogU2FmZSBhZnRlciBhIGZhaWxlZCBjbGFpbTogaXQgYWxzbyBjbGVhcnMgYSByZXF1ZXN0IHRoYXQgd2FzIG5ldmVyIGdyYW50ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9idXNfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBicC0mZ3Q7Y3BsZF9hZGFwOwomIzQzOwomIzQzOwlpZiAoIWFkYXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApOwomIzQzOwlicC0mZ3Q7Y3BsZF9hZGFwID0gTlVMTDsKJiM0MzsJa2ZyZWUoYnAtJmd0O2NwbGRfYnVmKTsKJiM0MzsJYnAtJmd0O2NwbGRfYnVmID0gTlVMTDsKJiM0MzsJaTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTsKJiM0MzsJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJcmV0dXJuICEhaTJjX3ZlcmlmeV9hZGFwdGVyKGRldik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ2FjaGUgdGhlIGFkYXB0ZXIgdGhlIENQTEQgaGFuZ3Mgb2ZmLiAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbCgpIG1pc3NlcwomIzQzOyAqIGl0IHdoZW4gdGhlIGkyYyBjb250cm9sbGVyIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZDogdGhlIGFkYXB0ZXIgaXMgdGhlbgomIzQzOyAqIGFkZGVkIGZyb20gaW5zaWRlIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigpLCBiZWZvcmUgYnAtJmd0O2kyY19jdHJsIGlzIHNldC4KJiM0MzsgKiBPbmx5IGRpcmVjdCBjaGlsZHJlbiBhcmUgc2VhcmNoZWQsIHNvIGEgbXV4IGFkYXB0ZXIgY2Fubm90IG1hdGNoLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoc3RydWN0IHB0cF9vY3AgKmJwKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqY2hpbGQ7CiYjNDM7CiYjNDM7CWlmICghYnAtJmd0O2hhc19jcGxkIHx8ICFicC0mZ3Q7aTJjX2N0cmwgfHwKJiM0MzsJICAgIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9ucikgJmd0Oz0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZCgmYW1wO2JwLSZndDtpMmNfY3RybC0mZ3Q7ZGV2LCBOVUxMLAomIzQzOwkJCQkgIGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2gpOwomIzQzOwlpZiAoIWNoaWxkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlXUklURV9PTkNFKGJwLSZndDtjcGxkX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLSZndDtucik7CiYjNDM7CXB1dF9kZXZpY2UoY2hpbGQpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENsYWltIHRoZSBUTUMgYnVzLiAgVGhlIGFkYXB0ZXIgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgaGFuZHNoYWtlIHRvIGtlZXAKJiM0MzsgKiB0aGUgRUVQUk9NLCBudm1lbSBhbmQgYXQyNCBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkCiYjNDM7ICogYXdheSBmcm9tIHRoZSBFRVBST01zOyBhbiBFRVBST00gcmVhZCBibG9ja3MgdW50aWwgdGhlIGNsYWltIGlzIGRyb3BwZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2J1c19jbGFpbShzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsKJiM0MzsJYWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtJmd0O2NwbGRfaTJjX2FkYXBfbnIpKTsKJiM0MzsJaWYgKCFhZGFwKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CS8qIFRoZSBudW1iZXIgaXMgZnJlZWQgYmVmb3JlIHRoZSBub3RpZmllciBjbGVhcnMgaXQsIHNvIGl0IGNhbgomIzQzOwkgKiBhbHJlYWR5IGJlIGFub3RoZXIgYWRhcHRlciYjMzk7cy4gIENoZWNrIHRoaXMgaXMgc3RpbGwgb3Vycy4KJiM0MzsJICovCiYjNDM7CWlmICghYnAtJmd0O2kyY19jdHJsIHx8IGFkYXAtJmd0O2Rldi5wYXJlbnQgIT0gJmFtcDticC0mZ3Q7aTJjX2N0cmwtJmd0O2RldikgewomIzQzOwkJaTJjX3B1dF9hZGFwdGVyKGFkYXApOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGFuIHVwbG9hZAomIzQzOwkgKiBob2xkcyB0aGUgY2xhaW0gZm9yIHRoZSB3aG9sZSBpbWFnZS4KJiM0MzsJICovCiYjNDM7CWJwLSZndDtjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnAtJmd0O2NwbGRfYnVmKSB7CiYjNDM7CQlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlpMmNfbG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTsKJiM0MzsJYnAtJmd0O2NwbGRfYWRhcCA9IGFkYXA7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoYnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJYWR2YV94MV9idXNfcmVsZWFzZShicCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCAmbHQ7IDAgLSB0aGUgcG93ZXItb24gc3RhdGUuCiYjNDM7ICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZQomIzQzOyAqIEVFUFJPTSBwYXRocy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaCkKJiM0Mzt7CiYjNDM7CXU4IHZhbCA9IChjaCAmZ3Q7PSAwKSA/IEJJVChjaCkgOiAwOwomIzQzOwomIzQzOwlyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9NVVhfQUREUiwgdmFsLCBOVUxMLCAwLCBOVUxMLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBcmd1bWVudCBieXRlcyB0aGF0IGZvbGxvdyBhbiBJU0Mgb3Bjb2RlLiAgUmV0dXJucyBOVUxMIHdpdGggQG5hcmdzIHNldAomIzQzOyAqIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHplcm86IGFkdmFfeDFfaTJjX3hmZXIoKSB6ZXJvZXMgdGhlIGJ1ZmZlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdTggKmFkdmFfeDFfY3BsZF9hcmdzKHU4IGNtZCwgdTggKm5hcmdzKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHU4IGVuX2NmZ190cFtdID0geyAweDA4LCAweDAwIH07CiYjNDM7CS8qIGNmZyBzZWN0b3Igb25seSAqLwomIzQzOwlzdGF0aWMgY29uc3QgdTggZXJhc2VfY2ZnW10gPSB7IDB4MDQsIDB4MDAsIDB4MDAgfTsKJiM0MzsKJiM0MzsJc3dpdGNoIChjbWQpIHsKJiM0MzsJY2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6CiYjNDM7CQkqbmFyZ3MgPSBzaXplb2YoZW5fY2ZnX3RwKTsKJiM0MzsJCXJldHVybiBlbl9jZmdfdHA7CiYjNDM7CWNhc2UgQ1BMRF9DTURfRVJBU0U6CiYjNDM7CQkqbmFyZ3MgPSBzaXplb2YoZXJhc2VfY2ZnKTsKJiM0MzsJCXJldHVybiBlcmFzZV9jZmc7CiYjNDM7CWNhc2UgQ1BMRF9DTURfUkVTRVRfQUREUjoKJiM0MzsJY2FzZSBDUExEX0NNRF9TRVRfRE9ORToKJiM0MzsJCSpuYXJncyA9IDM7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJY2FzZSBDUExEX0NNRF9ESVNfQ0ZHOgomIzQzOwljYXNlIENQTERfQ01EX1JFRlJFU0g6CiYjNDM7CQkqbmFyZ3MgPSAyOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkqbmFyZ3MgPSAwOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpCiYjNDM7ewomIzQzOwljb25zdCB1OCAqYXJnczsKJiM0MzsJdTggbmFyZ3M7CiYjNDM7CiYjNDM7CWFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsICZhbXA7bmFyZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIGNtZCwgYXJncywgbmFyZ3MsIE5VTEwsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNlbmQgYSA0LWJ5dGUgY29tbWFuZCBhbmQgcmVhZCBiYWNrIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIFNUT1A6IHR3bwomIzQzOyAqIG1lc3NhZ2VzIGluIG9uZSB0cmFuc2ZlciBpcyB0aGUgTGF0dGljZSB3cml0ZSAtJmd0OyByZXBlYXRlZCBTVEFSVCAtJmd0OyByZWFkLAomIzQzOyAqIHNvIG5vIHByb3RvY29sLW1hbmdsaW5nIGZsYWcgaXMgbmVlZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCwKJiM0MzsJCQkJIHUzMiBjbWRfYmUsIHU4ICpvdXQsIHU4IG91dF9sZW4pCiYjNDM7ewomIzQzOwlfX2JlMzIgY21kID0gY3B1X3RvX2JlMzIoY21kX2JlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgJmFtcDtjbWQsIDQsIG91dCwgb3V0X2xlbik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKHN0cnVjdCBwdHBfb2NwICpicCwgdTMyICpzdGF0dXMpCiYjNDM7ewomIzQzOwl1OCBidWZbNF07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9TVEFUVVMsIGJ1ZiwgNCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuCiYjNDM7ICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCwKJiM0MzsgKiBhbmQgdGhlIHN0YXR1cyBpcyByZWFkIG9uY2UgbW9yZSBhZnRlciBpdCBleHBpcmVzIGJlZm9yZSBnaXZpbmcgdXAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpCiYjNDM7ewomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJaW50IGVyciA9IDAsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsCiYjNDM7CQkJCWVyciB8fCAoc3RhdHVzICZhbXA7IENQTERfU1RBVFVTX0ZBSUxFRCkgfHwKJiM0MzsJCQkJIShzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfQlVTWSksCiYjNDM7CQkJCUNQTERfUE9MTF9VUywgbWF4X21zICogVVNFQ19QRVJfTVNFQywgZmFsc2UsCiYjNDM7CQkJCWJwLCAmYW1wO3N0YXR1cyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBLZWVwIHRoZSB0cmFuc3BvcnQgZXJybm8gc28gaXQgcmVhY2hlcyB1c2Vyc3BhY2UgYXMtaXM7IC1FSU8gaXMKJiM0MzsJICogcmVzZXJ2ZWQgZm9yIHRoZSBDUExEIGl0c2VsZiByZXBvcnRpbmcgRkFJTEVELgomIzQzOwkgKi8KJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgQ1BMRF9TVEFUVVNfRkFJTEVEKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBXYWl0IGZvciBCVVNZIHRvIGNsZWFyLCBpZ25vcmluZyBhIHBlbmRpbmcgY2FuY2VsLiAgQW4gSVNDIGNvbW1hbmQgaXNzdWVkCiYjNDM7ICogd2hpbGUgdGhlIHBhcnQgaXMgc3RpbGwgZXJhc2luZyBvciBwcm9ncmFtbWluZyBtYXkgbm90IGxhdGNoLCBzbyBhbiBhYm9ydAomIzQzOyAqIGhhcyB0byB3YWl0IHRoZSBvcGVyYXRpb24gb3V0IGJlZm9yZSBpdCBjYW4gbGVhdmUgY29uZmlndXJhdGlvbiBtb2RlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfaWRsZShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpCiYjNDM7ewomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJaW50IGVyciA9IDAsIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsCiYjNDM7CQkJCWVyciB8fCAhKHN0YXR1cyAmYW1wOyBDUExEX1NUQVRVU19CVVNZKSwKJiM0MzsJCQkJQ1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwKJiM0MzsJCQkJYnAsICZhbXA7c3RhdHVzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzOy8qIExlYXZlIHRyYW5zcGFyZW50IGNvbmZpZ3VyYXRpb24gbW9kZS4gIGNwbGRfaW5fY29uZmlnX21vZGUgc3RheXMgc2V0IHdoZW4KJiM0MzsgKiBESVNfQ0ZHIGRvZXMgbm90IGdldCB0aHJvdWdoLCBzbyBhIGxhdGVyIGNsZWFudXAoKSB0cmllcyBhZ2FpbiByYXRoZXIgdGhhbgomIzQzOyAqIHJlY29yZGluZyBhbiBleGl0IHRoYXQgbmV2ZXIgaGFwcGVuZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKHN0cnVjdCBwdHBfb2NwICpicCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFkdmFfeDFfY3BsZF93YWl0X2lkbGUoYnAsIENQTERfRVJBU0VfTVMpOwomIzQzOwomIzQzOwllcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0RJU19DRkcpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2X3dhcm4oJmFtcDticC0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O0NQTEQgbGVmdCBpbiBjb25maWd1cmF0aW9uIG1vZGU6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJZWxzZQomIzQzOwkJYnAtJmd0O2NwbGRfaW5fY29uZmlnX21vZGUgPSBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWFkIHRoZSBMYXR0aWNlIGRldmljZSBJRCBhbmQgdGhlIGltYWdlIFVTRVJDT0RFIHVuZGVyIG9uZSBidXMgY2xhaW0uCiYjNDM7ICogRG9uZSBvbmNlLCBvZmYgdGhlIHVucHJpdmlsZWdlZCBkZXZsaW5rIHBhdGgsIHdoaWNoIHJlcG9ydHMgdGhlIGNhY2hlZAomIzQzOyAqIHZhbHVlcy4gIC1FQlVTWSBtZWFucyBjcGxkX2xvY2sgaXMgaGVsZCwgc28gdGhlIGNhbGxlciBjYW4gcmV0cnkgcmF0aGVyCiYjNDM7ICogdGhhbiB3YWl0IGJlaGluZCBhIGxvbmcgQ1BMRCBvcGVyYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9pZChzdHJ1Y3QgcHRwX29jcCAqYnApCiYjNDM7ewomIzQzOwl1MzIgaWQsIHVzZXJjb2RlOwomIzQzOwl1OCBkYXRhWzRdOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byByZWxlYXNlOwomIzQzOwlyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBkZXNlbGVjdDsKJiM0MzsJaWQgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSk7CiYjNDM7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSwgZGF0YSwgNCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGRlc2VsZWN0OwomIzQzOwl1c2VyY29kZSA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTsKJiM0MzsKJiM0MzsJLyogY3BsZF9pZCBpcyB0aGUgdmFsaWRpdHkgZmxhZyBmb3IgYm90aCwgc28gcHVibGlzaCBpdCBsYXN0LiAqLwomIzQzOwlXUklURV9PTkNFKGJwLSZndDtjcGxkX3VzZXJjb2RlLCB1c2VyY29kZSk7CiYjNDM7CVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaWQsIGlkKTsKJiM0MztkZXNlbGVjdDoKJiM0MzsJYWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7CiYjNDM7cmVsZWFzZToKJiM0MzsJYWR2YV94MV9idXNfcmVsZWFzZShicCk7CiYjNDM7b3V0OgomIzQzOwltdXRleF91bmxvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWRldl9kYmcoJmFtcDticC0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Q1BMRCBkZXZpY2UgSUQgdW5hdmFpbGFibGU6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi8KJiM0MztzdGF0aWMgc3NpemVfdAomIzQzO2NwbGRfc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCSBjaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IGNvdW50ID0gMDsKJiM0MzsJdTMyIHN0ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovCiYjNDM7CXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXJldCA9IGFkdmFfeDFfbXV4X3NlbGVjdChicCwgQURWQV9NVVhfQ0hBTk5FTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlbGVhc2U7CiYjNDM7CXJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCk7CiYjNDM7CWFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpOwomIzQzO3JlbGVhc2U6CiYjNDM7CWFkdmFfeDFfYnVzX3JlbGVhc2UoYnApOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBGbGFnczogdGhlIG5hbWVzIG9mIHRoZSBiaXRzIHRoYXQgYXJlIHNldCwgbm90aGluZyB3aGVuIG5vbmUgaXMsCiYjNDM7CSAqIHJhdGhlciB0aGFuIGEgdmFsdWUgcGVyIGJpdCBpbiBvbmUgZmlsZS4KJiM0MzsJICovCiYjNDM7CWlmIChzdCAmYW1wOyBDUExEX1NUQVRVU19ET05FKQomIzQzOwkJY291bnQgJiM0Mzs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgJiMzNDtkb25lJiMzNDspOwomIzQzOwlpZiAoc3QgJmFtcDsgQ1BMRF9TVEFUVVNfQlVTWSkKJiM0MzsJCWNvdW50ICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsICYjMzQ7JXNidXN5JiMzNDssIGNvdW50ID8gJiMzNDsgJiMzNDsgOiAmIzM0OyYjMzQ7KTsKJiM0MzsJaWYgKHN0ICZhbXA7IENQTERfU1RBVFVTX0ZBSUxFRCkKJiM0MzsJCWNvdW50ICYjNDM7PSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsICYjMzQ7JXNmYWlsZWQmIzM0OywKJiM0MzsJCQkJICAgICAgIGNvdW50ID8gJiMzNDsgJiMzNDsgOiAmIzM0OyYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvdW50ICYjNDM7IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgJiMzNDtcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7c3RhdGljIERFVklDRV9BVFRSX0FETUlOX1JPKGNwbGRfc3RhdHVzKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByb2dyYW0gdGhlIENQTEQgY29uZmlndXJhdGlvbiBmbGFzaCBmcm9tIEBmdyBhbmQgYWN0aXZhdGUgaXQuICBTZWxlY3RlZAomIzQzOyAqIGJ5IHRoZSAmIzM0O2Z3LmNwbGQmIzM0OyBmbGFzaCBjb21wb25lbnQ7IHRoZSBTUEkgZmxhc2gga2VlcHMgdGhlIGRlZmF1bHQgcGF0aC4KJiM0MzsgKiBSdW5zIHVuZGVyIGNwbGRfbG9jayB3aXRoIHRoZSBpMmMgYWRhcHRlciBsb2NrIGhlbGQsIHNvIGFuIEVFUFJPTSByZWFkCiYjNDM7ICogYmxvY2tzIGZvciBhcyBsb25nIGFzIHByb2dyYW1taW5nIHRha2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzaXplX3Qgb2Zmc2V0OwomIzQzOwlpbnQgZXJyOwomIzQzOwl1MzIgc3Q7CiYjNDM7CiYjNDM7CWlmICghZnctJmd0O3NpemUgfHwgZnctJmd0O3NpemUgJSBDUExEX1BBR0VfU0laRSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtpbWFnZSBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIG9mIDE2LWJ5dGUgcGFnZXMmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnAtJmd0O2NwbGRfbG9jayk7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwllcnIgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byByZWxlYXNlOwomIzQzOwomIzQzOwkvKiBTZXQgYmVmb3JlIEVOX0NGR19UUCwgbm90IGFmdGVyOiB0aGUgQ1BMRCBtYXkgaGF2ZSBlbnRlcmVkIGNvbmZpZwomIzQzOwkgKiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIGVycm9ycyBvciB0aGUgd2FpdCB0aW1lcyBvdXQsIGFuZCBvbmx5IHRoaXMKJiM0MzsJICogbWFrZXMgdGhlIGV4aXQgcGF0aCBzZW5kIERJU19DRkcuICBBIHN0cmF5IERJU19DRkcgaXMgaGFybWxlc3M7CiYjNDM7CSAqIGxlYXZpbmcgY29uZmlnIG1vZGUgZW5hYmxlZCBpcyBub3QuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRU5fQ0ZHX1RQKTsKJiM0MzsJaWYgKCFlcnIpCiYjNDM7CQllcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgNTAwMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssICYjMzQ7RXJhc2luZyYjMzQ7LAomIzQzOwkJCQkJICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRVJBU0UpOwomIzQzOwlpZiAoIWVycikKJiM0MzsJCWVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCBDUExEX0VSQVNFX01TKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9jb25maWc7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCAmbHQ7IGZ3LSZndDtzaXplOyBvZmZzZXQgJiM0Mzs9IENQTERfUEFHRV9TSVpFKSB7CiYjNDM7CQl1OCBhcmdzWzMgJiM0MzsgQ1BMRF9QQUdFX1NJWkVdID0geyAweDAwLCAweDAwLCAweDAxIH07CiYjNDM7CiYjNDM7CQltZW1jcHkoJmFtcDthcmdzWzNdLCBmdy0mZ3Q7ZGF0YSAmIzQzOyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTsKJiM0MzsJCWVyciA9IGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBDUExEX0NNRF9XUklURV9QQUdFLAomIzQzOwkJCQkgICAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKTsKJiM0MzsJCWlmICghZXJyKQomIzQzOwkJCWVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDApOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwkJaWYgKCEob2Zmc2V0ICUgKENQTERfUEFHRV9TSVpFICogNjQpKSkKJiM0MzsJCQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssCiYjNDM7CQkJCQkJCSAgICYjMzQ7UHJvZ3JhbW1pbmcmIzM0OywKJiM0MzsJCQkJCQkJICAgQURWQV9DUExEX0NPTVBPTkVOVCwKJiM0MzsJCQkJCQkJICAgb2Zmc2V0LCBmdy0mZ3Q7c2l6ZSk7CiYjNDM7CX0KJiM0MzsJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLCAmIzM0O1Byb2dyYW1taW5nJiMzNDssCiYjNDM7CQkJCQkgICBBRFZBX0NQTERfQ09NUE9ORU5ULAomIzQzOwkJCQkJICAgZnctJmd0O3NpemUsIGZ3LSZndDtzaXplKTsKJiM0MzsKJiM0MzsJZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9TRVRfRE9ORSk7CiYjNDM7CWlmICghZXJyKQomIzQzOwkJZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMDApOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBleGl0X2NvbmZpZzsKJiM0MzsKJiM0MzsJZXJyID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCAmYW1wO3N0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXhpdF9jb25maWc7CiYjNDM7CWlmICghKHN0ICZhbXA7IENQTERfU1RBVFVTX0RPTkUpKSB7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBleGl0X2NvbmZpZzsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssICYjMzQ7QWN0aXZhdGluZyYjMzQ7LAomIzQzOwkJCQkJICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVGUkVTSCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGV4aXRfY29uZmlnOwomIzQzOwomIzQzOwkvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gdGhlIGV4aXQKJiM0MzsJICogcGF0aCBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIGEgY2hlY2sgYmVsb3cgZmFpbHMuCiYjNDM7CSAqLwomIzQzOwlicC0mZ3Q7Y3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZywgc28gYSBzZWdtZW50IHRoYXQgaXMgbm90IGJhY2sKJiM0MzsJICogeWV0IG11c3Qgbm90IGJlIHJlcG9ydGVkIGFzIGEgZmFpbGVkIHVwZGF0ZTogcmV0cnkgdGhlIHJlc2VsZWN0CiYjNDM7CSAqIHJhdGhlciB0aGFuIHNhbXBsaW5nIHRoZSBtdXggb25jZSBhdCBhIGZpeGVkIGRlbGF5LgomIzQzOwkgKi8KJiM0MzsJbXNsZWVwKDE1MDApOwomIzQzOwllcnIgPSByZWFkX3BvbGxfdGltZW91dChhZHZhX3gxX211eF9zZWxlY3QsIGVyciwgIWVyciwgQ1BMRF9QT0xMX1VTLAomIzQzOwkJCQkzMDAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsCiYjNDM7CQkJCWJwLCBBRFZBX01VWF9DSEFOTkVMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVzZWxlY3Q7CiYjNDM7CiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAzMDAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZGVzZWxlY3Q7CiYjNDM7CiYjNDM7CS8qIFJlcXVpcmUgRE9ORSBzZXQsIG5vdCBidXN5IGFuZCBubyBlcnJvciBjb2RlLCBhcyBtYWNoeG8yLXNwaS5jIGRvZXMKJiM0MzsJICogYWZ0ZXIgYSByZWZyZXNoOiB3aXRob3V0IGl0IGEgQ1JDIG9yIHByZWFtYmxlIGVycm9yIHJlYWRzIGJhY2sgYXMgYQomIzQzOwkgKiBzdWNjZXNzZnVsIHVwZGF0ZS4KJiM0MzsJICovCiYjNDM7CWVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgJmFtcDtzdCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGRlc2VsZWN0OwomIzQzOwlpZiAoIShzdCAmYW1wOyBDUExEX1NUQVRVU19ET05FKSB8fCAoc3QgJmFtcDsgQ1BMRF9TVEFUVVNfQlVTWSkgfHwKJiM0MzsJICAgIChzdCAmYW1wOyBDUExEX1NUQVRVU19FUlIpKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7YnAtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0NQTEQgcmVmcmVzaCBsZWZ0IHN0YXR1cyAweCUwOHhcbiYjMzQ7LCBzdCk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O0NQTEQgZGlkIG5vdCBjb21lIGJhY2sgY29uZmlndXJlZCYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU87CiYjNDM7CQlnb3RvIGRlc2VsZWN0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBpbWFnZSBvbiB0aGUgcGFydCBjaGFuZ2VkLCBzbyB0aGUgY2FjaGVkIFVTRVJDT0RFIGhhcyB0b28uICovCiYjNDM7CVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaWQsIDApOwomIzQzOwlXUklURV9PTkNFKGJwLSZndDtjcGxkX2lkX3RyaWVkLCBmYWxzZSk7CiYjNDM7CWJwLSZndDtjcGxkX2lkX2F0dGVtcHRzID0gMDsKJiM0MzsKJiM0MztleGl0X2NvbmZpZzoKJiM0MzsJYWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKGJwKTsKJiM0MztkZXNlbGVjdDoKJiM0MzsJYWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7CiYjNDM7cmVsZWFzZToKJiM0MzsJYWR2YV94MV9idXNfcmVsZWFzZShicCk7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDticC0mZ3Q7Y3BsZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfc2VyaWFsbnVtLmF0dHIsCiAJJmFtcDtkZXZfYXR0cl9nbnNzX3N5bmMuYXR0ciwKQEAgLTQyNzQsNiAmIzQzOzQ5OTAsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR2YV90aW1lY2FyZF94MV9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfdHNfd2luZG93X2FkanVzdC5hdHRyLAogCSZhbXA7ZGV2X2F0dHJfdXRjX3RhaV9vZmZzZXQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX3RvZF9jb3JyZWN0aW9uLmF0dHIsCiYjNDM7CSZhbXA7ZGV2X2F0dHJfY3BsZF9zdGF0dXMuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtNDkwNCw2ICYjNDM7NTYyMSw3IEBAIHB0cF9vY3BfZGV0YWNoKHN0cnVjdCBwdHBfb2NwICpicCkKIAkJY2xrX2h3X3VucmVnaXN0ZXJfZml4ZWRfcmF0ZShicC0mZ3Q7aTJjX2Nsayk7CiAJaWYgKGJwLSZndDtuX2lycXMpCiAJCXBjaV9mcmVlX2lycV92ZWN0b3JzKGJwLSZndDtwZGV2KTsKJiM0MzsJbXV0ZXhfZGVzdHJveSgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwogCWRldmljZV91bnJlZ2lzdGVyKCZhbXA7YnAtJmd0O2Rldik7CiB9CiAKQEAgLTUwNTIsNiAmIzQzOzU3NzAsMjAgQEAgcHRwX29jcF9zeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJYnAtJmd0O3N5bmMgPSBzeW5jOwogCiYjNDM7CS8qIFRoZSBhZGFwdGVyIGNhbiBhcHBlYXIgYWZ0ZXIgcHJvYmUsIHNvIHJlYWQgdGhlIElEIGZyb20gaGVyZSBvbmNlCiYjNDM7CSAqIGl0IGhhcy4gIEEgY2xhaW0gY2FuIGZhaWwgdHJhbnNpZW50bHkgLSB0aGUgZmlybXdhcmUgbWF5IG5vdCBncmFudAomIzQzOwkgKiB0aGUgc2VnbWVudCBzdHJhaWdodCBhZnRlciBwb3dlci11cCAtIHNvIHJldHJ5IGEgYm91bmRlZCBudW1iZXIgb2YKJiM0MzsJICogdGltZXMuICAtRUJVU1kgbWVhbnMgY3BsZF9sb2NrIGlzIGhlbGQgYW5kIGRvZXMgbm90IGNvdW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKGJwLSZndDtoYXNfY3BsZCAmYW1wOyZhbXA7ICFSRUFEX09OQ0UoYnAtJmd0O2NwbGRfaWRfdHJpZWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIFJFQURfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9ucikgJmd0Oz0gMCkgewomIzQzOwkJaW50IGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX2lkKGJwKTsKJiM0MzsKJiM0MzsJCWlmIChlcnIgIT0gLUVCVVNZICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWVyciB8fCAmIzQzOyYjNDM7YnAtJmd0O2NwbGRfaWRfYXR0ZW1wdHMgJmd0Oz0gQ1BMRF9JRF9NQVhfQVRURU1QVFMpKQomIzQzOwkJCVdSSVRFX09OQ0UoYnAtJmd0O2NwbGRfaWRfdHJpZWQsIHRydWUpOwomIzQzOwl9CiYjNDM7CiAJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZhbXA7YnAtJmd0O3N5bmNfd29yaywgSFopOwogfQogCkBAIC01MDgwLDYgJiM0Mzs1ODEyLDE0IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9kaXNhYmxlOwogCiYjNDM7CS8qIEJlZm9yZSB0aGUgZmlyc3QgZXJyb3IgcGF0aCB0aGF0IGNhbGxzIHB0cF9vY3BfZGV0YWNoKCksIHNvCiYjNDM7CSAqIG11dGV4X2Rlc3Ryb3koKSBydW5zIG9uIGFuIGluaXRpYWxpc2VkIG11dGV4LCBhbmQgYmVmb3JlCiYjNDM7CSAqIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCksIHNvIHRoaXMgc2VudGluZWwgY2Fubm90IG92ZXJ3cml0ZSBhbgomIzQzOwkgKiBhZGFwdGVyIG51bWJlciB0aGUgaTJjIG5vdGlmaWVyIHN0b3JlcyBkdXJpbmcgcmVnaXN0cmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2JwLSZndDtjcGxkX2xvY2spOwomIzQzOwlicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9uciA9IC0xOwomIzQzOwogCUlOSVRfREVMQVlFRF9XT1JLKCZhbXA7YnAtJmd0O3N5bmNfd29yaywgcHRwX29jcF9zeW5jX3dvcmspOwogCiAJLyogY29tcGF0IG1vZGUuCkBAIC01MDk5LDYgJiM0Mzs1ODM5LDggQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiYjNDM7CWFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoYnApOwomIzQzOwogCWJwLSZndDtwdHAgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoJmFtcDticC0mZ3Q7cHRwX2luZm8sICZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlpZiAoSVNfRVJSKGJwLSZndDtwdHApKSB7CiAJCWVyciA9IFBUUl9FUlIoYnAtJmd0O3B0cCk7CkBAIC01MTE5LDEyICYjNDM7NTg2MSwxMiBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJaWYgKElTX0VSUihicC0mZ3Q7ZHBsbCkpIHsKIAkJZXJyID0gUFRSX0VSUihicC0mZ3Q7ZHBsbCk7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7ZHBsbF9kZXZpY2VfYWxsb2MgZmFpbGVkXG4mIzM0Oyk7Ci0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfZGV2bGluazsKIAl9CiAKIAllcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC0mZ3Q7ZHBsbCwgRFBMTF9UWVBFX1BQUywgJmFtcDtkcGxsX29wcywgYnApOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfZHBsbF9wdXQ7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgT0NQX1NNQV9OVU07IGkmIzQzOyYjNDM7KSB7CiAJCWJwLSZndDtzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLApAQCAtNTE1MCw3ICYjNDM7NTg5MiwxNiBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiAJCWRwbGxfcGluX3VucmVnaXN0ZXIoYnAtJmd0O2RwbGwsIGJwLSZndDtzbWFbaV0uZHBsbF9waW4sICZhbXA7ZHBsbF9waW5zX29wcywgJmFtcDticC0mZ3Q7c21hW2ldKTsKIAkJZHBsbF9waW5fcHV0KGJwLSZndDtzbWFbaV0uZHBsbF9waW4sICZhbXA7YnAtJmd0O3NtYVtpXS50cmFja2VyKTsKIAl9CiYjNDM7CS8qIGRwbGxfZGV2aWNlX3JlZ2lzdGVyKCkgdGFrZXMgYSBzZWNvbmQgcmVmZXJlbmNlIGFuZCBzdG9yZXMgYnA7IG9ubHkKJiM0MzsJICogZHBsbF9kZXZpY2VfdW5yZWdpc3RlcigpIGRyb3BzIGl0LiAgV2l0aG91dCB0aGlzIHRoZSBkZXZpY2Ugc3RheXMKJiM0MzsJICogdmlzaWJsZSB3aXRoIGEgcHJpdiBwb2ludGVyIGludG8gc3RvcmFnZSBkZXZsaW5rX2ZyZWUoKSB3aWxsIHJlbGVhc2UuCiYjNDM7CSAqLwomIzQzOwlkcGxsX2RldmljZV91bnJlZ2lzdGVyKGJwLSZndDtkcGxsLCAmYW1wO2RwbGxfb3BzLCBicCk7CiYjNDM7b3V0X2RwbGxfcHV0OgogCWRwbGxfZGV2aWNlX3B1dChicC0mZ3Q7ZHBsbCwgJmFtcDticC0mZ3Q7dHJhY2tlcik7CiYjNDM7b3V0X2Rldmxpbms6CiYjNDM7CS8qIGRldGFjaCgpIGRlc3Ryb3lzIGNwbGRfbG9jazsgbm8gZGV2bGluayBvcCBtYXkgc3RpbGwgcmVhY2ggaXQgKi8KJiM0MzsJZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspOwogb3V0OgogCXB0cF9vY3BfZGV0YWNoKGJwKTsKIG91dF9kaXNhYmxlOgpAQCAtNTE5Niw2ICYjNDM7NTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKIAkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2LCAqY2hpbGQgPSBkYXRhOwomIzQzOwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7CiAJc3RydWN0IHB0cF9vY3AgKmJwOwogCWJvb2wgYWRkOwogCkBAIC01MjE5LDExICYjNDM7NTk3MSwyMSBAQCBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAKIGZvdW5kOgogCWJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGFkZCkKJiM0MzsJYWRhcCA9IGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCk7CiYjNDM7CWlmIChhZGQpIHsKIAkJcHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgJiMzNDtpMmMmIzM0Oyk7Ci0JZWxzZQomIzQzOwkJLyogT25seSB0aGUgY2FyZCYjMzk7cyBvd24gY29udHJvbGxlcjogYSBtdXggY2hpbGQgYWRkZWQgb24gaXQKJiM0MzsJCSAqIHJlYWNoZXMgcHRwX29jcCB0aHJvdWdoIHRoZSBzYW1lIHdhbGsuICBOdW1iZXJzIGFyZQomIzQzOwkJICogcmVjeWNsZWQsIHNvIHRoZSBjbGFpbSByZS1jaGVja3MgdGhlIHBhcmVudCBpdHNlbGYuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChicC0mZ3Q7aTJjX2N0cmwgJmFtcDsmYW1wOyBhZGFwLSZndDtkZXYucGFyZW50ID09ICZhbXA7YnAtJmd0O2kyY19jdHJsLSZndDtkZXYpCiYjNDM7CQkJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9uciwgYWRhcC0mZ3Q7bnIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSwgYnV0IG9ubHkgZm9yIHRoZSBjYWNoZWQgYWRhcHRlciAqLwomIzQzOwkJaWYgKFJFQURfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9ucikgPT0gYWRhcC0mZ3Q7bnIpCiYjNDM7CQkJV1JJVEVfT05DRShicC0mZ3Q7Y3BsZF9pMmNfYWRhcF9uciwgLTEpOwogCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2JwLSZndDtkZXYua29iaiwgJiMzNDtpMmMmIzM0Oyk7Ci0KJiM0MzsJfQogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzE1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIHNlcmllcyBpcyBkb2luZy4gSSBzZWUgaXQgdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZGAsIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RgLCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3RgLCBgTUFJTlRBSU5FUlNgLCBhbmQgY3J1Y2lhbGx5LCBgZHJpdmVycy9wdHAvcHRwX29jcC5jYC4gU2VlbXMgbGlrZSBhIGRvY3VtZW50YXRpb24gdXBkYXRlLCBhIGxpa2VseSBBQkkgY2hhbmdlLCBzb21lIG5ldHdvcmtpbmcgcmVsYXRlZCBjaGFuZ2VzIGFuZCBhIGRyaXZlciBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBlYWNoLCBidXQgYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2AgaXMgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIHdvcmsgaXMgcHJvYmFibHkuCgpSaWdodCwgc28gd2hhdCYjMzk7cyBgcHRwX29jcC5jYD8gQSBxdWljayBzY2FuIHRlbGxzIG1lIGl0JiMzOTtzIGFuIE9wZW5Db21wdXRlIFBUUCBjbG9jayBkcml2ZXIuIEludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgc2hvdWxkIGNoZWNrIHdoYXQgZGV2aWNlcyB0aGlzIGRyaXZlciBhY3R1YWxseSBzdXBwb3J0czsgYmluZGluZyB0byBQQ0kgZGV2aWNlcyBzZWVtcyB0aGUgbW9zdCBsaWtlbHksIGxldCYjMzk7cyBxdWlja2x5IGdyZXAgaW4gdGhlIGBwdHBfb2NwLmNgIGZvciBhbnkgYHBjaV9kZXZpY2VfaWRgIGVudHJpZXMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZHJpdmVyIGlzIHVzZWQsIGFuZCB3aGF0IGRldmljZXMgaXQgaW50ZXJmYWNlcyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXChwY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jPTEzMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMjQtfTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgUFRQT0NQIERldmljZSBJRCBUYWJsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUFRQT0NQIGRyaXZlciAoYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2ApIGlkZW50aWZpZXMgYW5kIGhhbmRsZXMgc3BlY2lmaWMgaGFyZHdhcmUuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBjcml0aWNhbCBzdGVwIGluIGRlYnVnZ2luZy91bmRlcnN0YW5kaW5nLCBpcyB0byBleGFtaW5lIHRoZSBgcGNpX2RldmljZV9pZGAgdGFibGUuIFRoYXQgdGFibGUgaXMgdGhlIGhvbHkgZ3JhaWwgZm9yIGEgUENJIGRldmljZSBkcml2ZXIuIEl0IGNvbnRhaW5zIHRoZSBhbGwtaW1wb3J0YW50IHZlbmRvciBJRHMsIGRldmljZSBJRHMsIGFuZCBzb21ldGltZXMgc3Vic3lzdGVtIElEcywgdGhhdCB0aGUgZHJpdmVyIHVzZXMgdG8gY2xhaW0gZGV2aWNlcyBkdXJpbmcgcHJvYmUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXZpY2UgSURzIG1hdGNoIHRoZSBkZXZpY2VzIEkmIzM5O20gZXhhbWluaW5nLCBvciB1bmRlcnN0YW5kIHdoeSB0aGV5IGRvbiYjMzk7dC4gSXQgd2lsbCBnaXZlIG1lIGEgZmlyc3QgY2x1ZSBvbiB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9wdHAvcHRwX29jcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzEwOlx0XHRcdFx0LmF0dHJfZ3JvdXBzICA9IGFkdmFfdGltZWNhcmRfeDFfZ3JvdXBzLFxuMTMxMTpcdFx0XHRcdC5oYXNfY3BsZCAgICAgPSB0cnVlLFxuMTMxMjpcdFx0XHR9LFxuMTMxMzpcdFx0fSxcbjEzMTQ6XHRcdHsgfVxuMTMxNTpcdH07XG4xMzE2Olx0XG4xMzE3Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG4xMzE4Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBUSU1FQ0FSRCwgXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxuMTMxOTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoQ0VMRVNUSUNBLCBUSU1FQ0FSRCwgXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxuMTMyMDpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoT1JPTElBLCBBUlRDQVJELCBcdTAwMjZvY3BfYXJ0X3Jlc291cmNlKSB9LFxuMTMyMTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkQsIFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxuMTMyMjpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFx1MDAyNm9jcF9hZHZhX3gxX3Jlc291cmNlKSB9LFxuMTMyMzpcdFx0eyB9XG4xMzI0Olx0fTtcbjEzMjU6XHRNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcHRwX29jcF9wY2lkZXZfaWQpO1xuMTMyNjpcdFxuMTMyNzpcdHN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcbjEzMjg6XHRzdGF0aWMgREVGSU5FX0lEUihwdHBfb2NwX2lkcik7XG4xMzI5Olx0XG4xMzMwOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9jbG9ja1tdID0ge1xuMTMzMTpcdFx0eyAubmFtZSA9IFwmIzM0O05PTkVcJiMzNDssXHQudmFsdWUgPSAwIH0sXG4xMzMyOlx0XHR7IC5uYW1lID0gXCYjMzQ7VE9EXCYjMzQ7LFx0LnZhbHVlID0gMSB9LFxuMTMzMzpcdFx0eyAubmFtZSA9IFwmIzM0O0lSSUdcJiMzNDssXHQudmFsdWUgPSAyIH0sXG4xMzM0Olx0XHR7IC5uYW1lID0gXCYjMzQ7UFBTXCYjMzQ7LFx0LnZhbHVlID0gMyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Njg1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdvcnRoRnV6emluZyBDcml0ZXJpYSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogSSBuZWVkIHRvIGRldGVybWluZSBpZiBJIGNhbiBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYmFzZWQgb24gc29tZSBuZWdhdGl2ZSBjcml0ZXJpYS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCByZXR1cm4gYGZhbHNlYCBPTkxZIGlmIGFsbCB0aGUgY2hhbmdlZCBjb2RlIGZhbGxzIGludG8gc3BlY2lmaWMgY2F0ZWdvcmllcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IG5lZ2F0aXZlIGNvbmRpdGlvbnM6IG5vbi1rZXJuZWwsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSwgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocy4KCkhtbSwgdGhpcyBgcHRwX29jcGAgZHJpdmVyLi4uIGRvZXMgaXQgZmFsbCB1bmRlciB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeT8gVGhhdCBzZWN0aW9uIHNwZWNpZmljYWxseSBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhlIGtpbmQgdGhhdCBuZWVkIGFjdHVhbCBoYXJkd2FyZSwgbm90IFFFTVUgZW11bGF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBhcHBseSB0byBgcHRwX29jcGA/CgpJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbi4gTGV0IG1lIHNlZS4uLiBJIGhhdmUgc29tZSBQQ0kgSURzIGhlcmU6IGBQQ0lfVkVORE9SX0lEX01FVEFgLCBgUENJX0RFVklDRV9JRF9NRVRBX1RJTUVDQVJEYCwgYW5kIG90aGVycyBsaWtlIENlbGVzdGljYSwgT3JvbGlhLCBhbmQgQURWQS4gVGhlc2UgKmxvb2sqIGxpa2UgdGltZSBjYXJkcy4gVGhleSYjMzk7cmUgYWxsIGZvciBzcGVjaWFsaXplZCBQVFAgdGltZSBjYXJkIFBDSWUgY2FyZHMsIHJlbGF0ZWQgdG8gdGhlIE9wZW5Db21wdXRlIFRpbWUgQXBwbGlhbmNlIFByb2plY3QsIHRoZSAmIzM0O1RpbWUgQ2FyZCYjMzQ7LgoKUmlnaHQsIHRoaXMgaGFyZHdhcmUgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlYXNpbHkgZW11bGF0ZWQgaW4gUUVNVS4gVGhleSByZXF1aXJlIGRlZGljYXRlZCBoYXJkd2FyZS4gTXkgbmV4dCBjaGVjayB3b3VsZCBiZSB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSYjMzk7cyBhbnkgdmlydHVhbCBidXMgb3Igc29mdHdhcmUgZW11bGF0aW9uIHJlbGF0ZWQgdG8gYHB0cF9vY3BgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmaWxlIGFuZCBvdGhlciByZWxldmFudCBrZXJuZWwgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBzb21lIG1vY2ssIHZpcnR1YWwsIG9yIG90aGVyIHNvZnR3YXJlLWJhc2VkIG1ldGhvZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdHBfb2NwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDIxMDEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvcHRwL01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19QVFBfMTU4OF9DTE9DS19WTVcpXHQmIzQzOz0gcHRwX3Ztdy5vXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfT0NQKVx0JiM0Mzs9IHB0cF9vY3Aub1xuZHJpdmVycy9wdHAvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BUUF9ERkxfVE9EKVx0XHQmIzQzOz0gcHRwX2RmbF90b2Qub1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00OD1zdHJ1Y3Qgb2NwX3JlZyB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTcyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjczOnN0cnVjdCBwdHBfb2NwX3NlcnZvX2NvbmYge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc0LVx0dTMyXHRzZXJ2b19vZmZzZXRfcDtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODEtICogQ29tYmluZWQgc2Vydm8gJiM0MzsgYm9hcmQtdmFyaWFudCBwYXJhbWV0ZXJzIGZvciBBRFZBIGJvYXJkcy5cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4MjogKiBFbWJlZGRlZCBpbiB0aGUgcmVzb3VyY2UgdGFibGUgLmV4dHJhIHNvIGEgc2luZ2xlIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KClcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04My0gKiBjYW4gaGFuZGxlIGJvdGggQURWQSBhbmQgQURWQS1YMSB3aXRob3V0IHBlci12YXJpYW50IGluaXQgZnVuY3Rpb25zLlxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0LSAqL1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1OnN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODY6XHRzdHJ1Y3QgcHRwX29jcF9zZXJ2b19jb25mXHRzZXJ2bztcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04Ny1cdHUzMlx0XHRcdFx0Zmxhc2hfc3RhcnQ7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTI0Mz1zdHJ1Y3QgYm9hcmRfY29uZmlnX3JlZyB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI1MS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNTI6c3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbyB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjUzLVx0Y29uc3QgY2hhciAqbmFtZTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjU4LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI1OTpzdHJ1Y3QgcHRwX29jcF9maXJtd2FyZV9oZWFkZXIge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI2MC1cdGNoYXIgbWFnaWNbNF07XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI2OS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNzA6c3RydWN0IHB0cF9vY3BfaTJjX2luZm8ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3MS1cdGNvbnN0IGNoYXIgKm5hbWU7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3Ni1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNzc6c3RydWN0IHB0cF9vY3BfZXh0X2luZm8ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3OC1cdGludCBpbmRleDtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjgyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI4MzpzdHJ1Y3QgcHRwX29jcF9leHRfc3JjIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yODQtXHR2b2lkIF9faW9tZW1cdFx0Km1lbTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyODU6XHRzdHJ1Y3QgcHRwX29jcFx0XHQqYnA7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mjg2Olx0c3RydWN0IHB0cF9vY3BfZXh0X2luZm9cdCppbmZvO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI4Ny1cdGludFx0XHRcdGlycV92ZWM7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI4OS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyOTA6ZW51bSBwdHBfb2NwX3NtYV9tb2RlIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTEtXHRTTUFfTU9ERV9JTixcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjk0LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5NTpzdGF0aWMgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBwdHBfb2NwX3NtYV9mcmVxW10gPSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjk2LVx0RFBMTF9QSU5fRlJFUVVFTkNZXzFQUFMsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTMwMS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMDI6c3RydWN0IHB0cF9vY3Bfc21hX2Nvbm5lY3RvciB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzAzOlx0ZW51bVx0cHRwX29jcF9zbWFfbW9kZSBtb2RlO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTMwNC1cdGJvb2xcdGZpeGVkX2Zjbjtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzI0PXN0cnVjdCBvY3Bfc21hX29wIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMjUtXHRjb25zdCBzdHJ1Y3Qgb2NwX3NlbGVjdG9yICp0YmxbMl07XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzI2Olx0dm9pZCAoKmluaXQpKHN0cnVjdCBwdHBfb2NwICpicCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzI3Olx0dTMyICgqZ2V0KShzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBzbWFfbnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMyODpcdGludCAoKnNldF9pbnB1dHMpKHN0cnVjdCBwdHBfb2NwICpicCwgaW50IHNtYV9uciwgdTMyIHZhbCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzI5Olx0aW50ICgqc2V0X291dHB1dCkoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgc21hX25yLCB1MzIgdmFsKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMzAtfTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzM1LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMzNjpzdHJ1Y3QgcHRwX29jcF9zaWduYWwge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTMzNy1cdGt0aW1lX3RcdFx0cGVyaW9kO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNDUtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzQ2OnN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0IHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNDctXHRpbnQgbGluZTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzU3PWVudW0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNjUtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzY2OnN0cnVjdCBwdHBfb2NwIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNjctXHRzdHJ1Y3QgcGNpX2Rldlx0XHQqcGRldjtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzgzLVx0c3RydWN0IGZyZXF1ZW5jeV9yZWdcdF9faW9tZW0gKmZyZXFfaW5bT0NQX0ZSRVFfTlVNXTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODQ6XHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXHQqc2lnbmFsX291dFtPQ1BfU0lHTkFMX05VTV07XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg1Olx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1x0KnBwcztcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODY6XHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXHQqdHMwO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM4NzpcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcdCp0czE7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg4Olx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1x0KnRzMjtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODk6XHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXHQqdHMzO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM5MDpcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcdCp0czQ7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzkxLVx0c3RydWN0IG9jcF9hcnRfZ3Bpb19yZWcgX19pb21lbSAqYXJ0X3NtYTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzk5LVx0Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqKmF0dHJfZ3JvdXA7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDAwOlx0Y29uc3Qgc3RydWN0IHB0cF9vY3BfZWVwcm9tX21hcCAqZWVwcm9tX21hcDtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDEtXHRzdHJ1Y3QgZGVudHJ5XHRcdCpkZWJ1Z19yb290O1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDYtXHRpbnRcdFx0XHRuX2lycXM7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDA3Olx0c3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnRcdHBvcnRbX19QT1JUX0NPVU5UXTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDgtXHRib29sXHRcdFx0ZndfbG9hZGVyO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MTgtXHR1NjRcdFx0XHRmd19jYXA7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDE5Olx0c3RydWN0IHB0cF9vY3Bfc2lnbmFsXHRzaWduYWxbT0NQX1NJR05BTF9OVU1dO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQyMDpcdHN0cnVjdCBwdHBfb2NwX3NtYV9jb25uZWN0b3Igc21hW09DUF9TTUFfTlVNXTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjEtXHRjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCAqc21hX29wO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00NTI9c3RydWN0IG9jcF9yZXNvdXJjZSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ1NS1cdGludCBpcnFfdmVjO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ1NjpcdGludCAoKnNldHVwKShzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ1Ny1cdHZvaWQgKmV4dHJhO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NjEtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDYyOnN0YXRpYyBpbnQgcHRwX29jcF9yZWdpc3Rlcl9tZW0oc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NjM6c3RhdGljIGludCBwdHBfb2NwX3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NDpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfc3BpKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDY1OnN0YXRpYyBpbnQgcHRwX29jcF9yZWdpc3Rlcl9zZXJpYWwoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NjY6c3RhdGljIGludCBwdHBfb2NwX3JlZ2lzdGVyX2V4dChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NzpzdGF0aWMgaW50IHB0cF9vY3BfZmJfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2ODpzdGF0aWMgaXJxcmV0dXJuX3QgcHRwX29jcF90c19pcnEoaW50IGlycSwgdm9pZCAqcHJpdik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDY5OnN0YXRpYyBpcnFyZXR1cm5fdCBwdHBfb2NwX3NpZ25hbF9pcnEoaW50IGlycSwgdm9pZCAqcHJpdik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDcwOnN0YXRpYyBpbnQgcHRwX29jcF90c19lbmFibGUodm9pZCAqcHJpdiwgdTMyIHJlcSwgYm9vbCBlbmFibGUpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3MTpzdGF0aWMgaW50IHB0cF9vY3Bfc2lnbmFsX2Zyb21fcGVyb3V0KHN0cnVjdCBwdHBfb2NwICpicCwgaW50IGdlbixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXEpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3MzpzdGF0aWMgaW50IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSh2b2lkICpwcml2LCB1MzIgcmVxLCBib29sIGVuYWJsZSk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDc0OnN0YXRpYyBpbnQgcHRwX29jcF9zbWFfc3RvcmUoc3RydWN0IHB0cF9vY3AgKmJwLCBjb25zdCBjaGFyICpidWYsIGludCBzbWFfbnIpO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3NS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzY6c3RhdGljIGludCBwdHBfb2NwX2FydF9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDc3LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3ODpzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDc5LVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00ODE9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcDtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDg1LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ4NjpzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9mbGFzaChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ4Ny1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3Vwc1tdO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ5Ny1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0OTg6c3RydWN0IHB0cF9vY3BfZWVwcm9tX21hcCB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDk5LVx0dTE2XHRvZmY7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUwNi1cdC5vZmYgPSBhZGRyLFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTA3Olx0LmxlbiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgcHRwX29jcCwgbWVtYmVyKSxcdFx0XFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MDg6XHQuYnBfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB0cF9vY3AsIG1lbWJlcilcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MDktXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMy1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTQ6c3RhdGljIHN0cnVjdCBwdHBfb2NwX2VlcHJvbV9tYXAgZmJfZWVwcm9tX21hcFtdID0ge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxNS1cdHsgRUVQUk9NX0VOVFJZKDB4NDMsIGJvYXJkX2lkKSB9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTktXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTIwOnN0YXRpYyBzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIGFydF9lZXByb21fbWFwW10gPSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTIxLVx0eyBFRVBST01fRU5UUlkoMHgyMDAgJiM0MzsgMHg0MywgYm9hcmRfaWQpIH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzMS0jZGVmaW5lIE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSBcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzMjpcdC5uYW1lID0gI21lbWJlciwgLmJwX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwdHBfb2NwLCBtZW1iZXIpXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTMzLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzNC0jZGVmaW5lIE9DUF9NRU1fUkVTT1VSQ0UobWVtYmVyKSBcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzNTpcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9tZW1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MzYtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTM3LSNkZWZpbmUgT0NQX1NFUklBTF9SRVNPVVJDRShtZW1iZXIpIFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTM4Olx0T0NQX1JFU19MT0NBVElPTihtZW1iZXIpLCAuc2V0dXAgPSBwdHBfb2NwX3JlZ2lzdGVyX3NlcmlhbFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzOS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDAtI2RlZmluZSBPQ1BfSTJDX1JFU09VUkNFKG1lbWJlcikgXFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1NDE6XHRPQ1BfUkVTX0xPQ0FUSU9OKG1lbWJlciksIC5zZXR1cCA9IHB0cF9vY3BfcmVnaXN0ZXJfaTJjXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQyLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0My0jZGVmaW5lIE9DUF9TUElfUkVTT1VSQ0UobWVtYmVyKSBcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU0NDpcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9zcGlcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDUtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQ2LSNkZWZpbmUgT0NQX0VYVF9SRVNPVVJDRShtZW1iZXIpIFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTQ3Olx0T0NQX1JFU19MT0NBVElPTihtZW1iZXIpLCAuc2V0dXAgPSBwdHBfb2NwX3JlZ2lzdGVyX2V4dFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0OC1cbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTc2PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9mYl9yZXNvdXJjZVtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01ODMtXHRcdC5vZmZzZXQgPSAweDAxMDEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1ODQ6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU4NS1cdFx0XHQuaW5kZXggPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU4NjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU4NzpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTg4LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01OTItXHRcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1OTM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU5NC1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU5NTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU5NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTk3LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MDEtXHRcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MDI6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYwMy1cdFx0XHQuaW5kZXggPSAyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYwNDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYwNTpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjA2LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTAtXHRcdC5vZmZzZXQgPSAweDAxMTEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjExOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTItXHRcdFx0LmluZGV4ID0gMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MTM6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MTQ6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYxNS1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjE5LVx0XHQub2Zmc2V0ID0gMHgwMTEyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE2LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYyMDpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjIxLVx0XHRcdC5pbmRleCA9IDQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjIyOlx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjIzOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MjQtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYyOS1cdFx0Lm9mZnNldCA9IDB4MDEwQzAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYzMDpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjMxLVx0XHRcdC5pbmRleCA9IDUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjMyOlx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjMzOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MzQtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYzOC1cdFx0Lm9mZnNldCA9IDB4MDEwRDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Mzk6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0MC1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY0MTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NDI6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NDMtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0Ny1cdFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NDg6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0OS1cdFx0XHQuaW5kZXggPSAyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1MDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NTE6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NTItXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY1Ni1cdFx0Lm9mZnNldCA9IDB4MDEwRjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NTc6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY1OC1cdFx0XHQuaW5kZXggPSAzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1OTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NjA6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NjEtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2NS1cdFx0Lm9mZnNldCA9IDB4MDExMDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NjY6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2Ny1cdFx0XHQuaW5kZXggPSA0LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY2ODpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Njk6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NzAtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTcyMi1cdFx0Lm9mZnNldCA9IDB4MDAxNTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA3LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjcyMzpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzI0LVx0XHRcdC5uYW1lID0gXCYjMzQ7eGlpYy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTczOS1cdFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDMsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzQwOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NDEtXHRcdFx0LmJhdWQgPSAxMTUyMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc0Ni1cdFx0Lm9mZnNldCA9IDB4MDAxNzAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzQ3Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NDgtXHRcdFx0LmJhdWQgPSAxMTUyMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc1My1cdFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzU0Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NTUtXHRcdFx0LmJhdWQgPSA1NzYwMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzY0LVx0XHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzY1Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc2Ni1cdFx0XHQubmFtZSA9IFwmIzM0O3hpbGlueF9zcGlcJiMzNDssIC5wY2lfb2Zmc2V0ID0gMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzk1LVx0e1xuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc5NjpcdFx0LnNldHVwID0gcHRwX29jcF9mYl9ib2FyZF9pbml0LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc5NzpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcnZvX2NvbmYpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03OTgtXHRcdFx0LnNlcnZvX29mZnNldF9wID0gMHgyMDAwLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz04MTc9c3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FydF9yZXNvdXJjZVtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04MjQtXHRcdC5vZmZzZXQgPSAweDAwMTYwMDAwICYjNDM7IDB4MTAwMCwgLmlycV92ZWMgPSAzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgyNTpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODI2LVx0XHRcdC5iYXVkID0gMTE1MjAwLFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04MzYtXHRcdC5vZmZzZXQgPSAweDM2MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDEyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgzNzpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODM4LVx0XHRcdC5pbmRleCA9IDAsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODM5Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODQwOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NDEtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0NS1cdFx0Lm9mZnNldCA9IDB4MzgwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gOCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NDY6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0Ny1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg0ODpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg0OTpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODUwLVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NTQtXHRcdC5vZmZzZXQgPSAweDM5MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDEwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1NTpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODU2LVx0XHRcdC5pbmRleCA9IDIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODU3Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODU4Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NTktXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg2My1cdFx0Lm9mZnNldCA9IDB4M0EwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODY0Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NjUtXHRcdFx0LmluZGV4ID0gMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NjY6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4Njc6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg2OC1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODcyLVx0XHQub2Zmc2V0ID0gMHgzQjAwMDAsIC5zaXplID0gMHgyMCwgLmlycV92ZWMgPSAxNSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NzM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg3NC1cdFx0XHQuaW5kZXggPSA0LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg3NTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg3NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODc3LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04ODItXHRcdC5vZmZzZXQgPSAweDAwMzMwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODgzOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04ODQtXHRcdFx0LmluZGV4ID0gNSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4ODU6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4ODY6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg4Ny1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODkxLVx0XHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODkyOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg5My1cdFx0XHQubmFtZSA9IFwmIzM0O3NwaV9hbHRlcmFcJiMzNDssIC5wY2lfb2Zmc2V0ID0gMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTA2LVx0XHQub2Zmc2V0ID0gMHgzNTAwMDAsIC5zaXplID0gMHgxMDAsIC5pcnFfdmVjID0gNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MDc6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9pMmNfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkwOC1cdFx0XHQubmFtZSA9IFwmIzM0O29jb3Jlcy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkyMy1cdFx0Lm9mZnNldCA9IDB4MDAxOTAwMDAsIC5pcnFfdmVjID0gNyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MjQ6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9zZXJpYWxfcG9ydCkge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkyNS1cdFx0XHQuYmF1ZCA9IDk2MDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkzMi1cdHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MzM6XHRcdC5zZXR1cCA9IHB0cF9vY3BfYXJ0X2JvYXJkX2luaXQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTM0Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2Vydm9fY29uZikge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkzNS1cdFx0XHQuc2Vydm9fb2Zmc2V0X3AgPSAweDIwMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTk0ND1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV9yZXNvdXJjZVtdID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NTEtXHRcdC5vZmZzZXQgPSAweDAxMDEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NTI6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk1My1cdFx0XHQuaW5kZXggPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk1NDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk1NTpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTU2LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjAtXHRcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NjE6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk2Mi1cdFx0XHQuaW5kZXggPSAxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk2MzpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk2NDpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTY1LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjktXHRcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NzA6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk3MS1cdFx0XHQuaW5kZXggPSAyLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk3MjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk3MzpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTc0LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NzktXHRcdC5vZmZzZXQgPSAweDAxMEMwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5ODA6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk4MS1cdFx0XHQuaW5kZXggPSA1LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4MjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4MzpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTg0LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05ODgtXHRcdC5vZmZzZXQgPSAweDAxMEQwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTg5Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTAtXHRcdFx0LmluZGV4ID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5OTE6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTkyOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTkzLVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTctXHRcdC5vZmZzZXQgPSAweDAxMEUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTk4Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTktXHRcdFx0LmluZGV4ID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMDAwOlx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwMDE6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDAyLVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDM0LVx0XHQub2Zmc2V0ID0gMHgwMDE2MDAwMCAmIzQzOyAweDEwMDAsIC5pcnFfdmVjID0gMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMDM1Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDM2LVx0XHRcdC5iYXVkID0gOTYwMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA0MS1cdFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA0MjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA0My1cdFx0XHQuYmF1ZCA9IDExNTIwMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA1Ni1cdFx0Lm9mZnNldCA9IDB4MDAzMTA0MDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA5LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwNTc6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA1OC1cdFx0XHQubmFtZSA9IFwmIzM0O3NwaV9hbHRlcmFcJiMzNDssIC5wY2lfb2Zmc2V0ID0gMCxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA3MS1cdFx0Lm9mZnNldCA9IDB4MTUwMDAwLCAuc2l6ZSA9IDB4MTAwLCAuaXJxX3ZlYyA9IDcsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA3MjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA3My1cdFx0XHQubmFtZSA9IFwmIzM0O29jb3Jlcy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwOTAtXHR7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MTpcdFx0LnNldHVwID0gcHRwX29jcF9hZHZhX2JvYXJkX2luaXQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwOTMtXHRcdFx0LnNlcnZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMTYtXHRcdC5vZmZzZXQgPSAweDAxMDEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTE3Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTE4LVx0XHRcdC5pbmRleCA9IDAsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTExOTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMjA6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjEtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjUtXHRcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTI2Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTI3LVx0XHRcdC5pbmRleCA9IDEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyODpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMjk6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzAtXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzQtXHRcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTM1Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTM2LVx0XHRcdC5pbmRleCA9IDIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEzNzpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMzg6XHRcdFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzktXHRcdH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNDMtXHRcdC5vZmZzZXQgPSAweDAxMTEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE0NDpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE0NS1cdFx0XHQuaW5kZXggPSAzLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNDY6XHRcdFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTQ3Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTQ4LVx0XHR9LFxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTUyLVx0XHQub2Zmc2V0ID0gMHgwMTEyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE2LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNTM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNTQtXHRcdFx0LmluZGV4ID0gNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTU1Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE1NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE1Ny1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE2Mi1cdFx0Lm9mZnNldCA9IDB4MDEwQzAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAwLFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNjM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNjQtXHRcdFx0LmluZGV4ID0gNSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTY1Olx0XHRcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE2NjpcdFx0XHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE2Ny1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE3MS1cdFx0Lm9mZnNldCA9IDB4MDEwRDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTcyOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTczLVx0XHRcdC5pbmRleCA9IDEsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE3NDpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTc1Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE3Ni1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4MC1cdFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTgxOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTgyLVx0XHRcdC5pbmRleCA9IDIsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4MzpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTg0Olx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4NS1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4OS1cdFx0Lm9mZnNldCA9IDB4MDEwRjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkwOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTkxLVx0XHRcdC5pbmRleCA9IDMsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE5MjpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkzOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE5NC1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE5OC1cdFx0Lm9mZnNldCA9IDB4MDExMDAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNCxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTk5Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjAwLVx0XHRcdC5pbmRleCA9IDQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTIwMTpcdFx0XHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjAyOlx0XHRcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIwMy1cdFx0fSxcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIzNS1cdFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgJiM0MzsgMHgxMDAwLCAuaXJxX3ZlYyA9IDMsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTIzNjpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIzNy1cdFx0XHQuYmF1ZCA9IDk2MDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDItXHRcdC5vZmZzZXQgPSAweDAwMTgwMDAwICYjNDM7IDB4MTAwMCwgLmlycV92ZWMgPSA1LFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyNDM6XHRcdC5leHRyYSA9IFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9zZXJpYWxfcG9ydCkge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDQtXHRcdFx0LmJhdWQgPSAxMTUyMDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNjUtXHRcdC5vZmZzZXQgPSAweDAwMzEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gOSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjY2Olx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNjctXHRcdFx0Lm5hbWUgPSBcJiMzNDt4aWxpbnhfc3BpXCYjMzQ7LCAucGNpX29mZnNldCA9IDAsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyODItXHRcdC5vZmZzZXQgPSAweDAwMTUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNyxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjgzOlx0XHQuZXh0cmEgPSBcdTAwMjYoc3RydWN0IHB0cF9vY3BfaTJjX2luZm8pIHtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjg0LVx0XHRcdC5uYW1lID0gXCYjMzQ7eGlpYy1pMmNcJiMzNDssXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTctXHR7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI5ODpcdFx0LnNldHVwID0gcHRwX29jcF9hZHZhX2JvYXJkX2luaXQsXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI5OTpcdFx0LmV4dHJhID0gXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbykge1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDAtXHRcdFx0LnNlcnZvID0ge1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzE2LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMTc6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMxOC1cdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMjQtfTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNi1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI3OnN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI4OnN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzI5LVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0NDkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFdvcnRoRnV6emluZyBDcml0ZXJpYSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgb3V0bGluaW5nIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhIOKAkyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB3ZSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGVzZSBhcmUgZXNzZW50aWFsbHkgbm8tZ28gem9uZXMuIEl0JiMzOTtzIHRlbGxpbmcgbWUsIGRvbiYjMzk7dCB3YXN0ZSB0aW1lIGZ1enppbmcgdGhpcyBjb2RlLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNhdGVnb3JpZXMgaGVyZToKCiogICAqKk5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6KiogVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBkb2NzLCBjb21tZW50cywgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZyB0aGF0JiMzOTtzIHB1cmVseSBkZWNvcmF0aXZlLCBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gVGhpcyBpcyBiYXNpY2FsbHkgc3R1ZmYgdGhhdCB3b24mIzM5O3QgY2hhbmdlIHRoZSBjb21waWxlZCBrZXJuZWwuIE1ha2VzIHNlbnNlLgoqICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVmVuZG9yLXNwZWNpZmljIHN0dWZmIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpbmdzIGxpa2Ugc3BlY2lmaWMgUENJZSBjYXJkcywgU21hcnROSUNzLCBHUFUgZHJpdmVycy4gVGhpcyBpcyB3aGF0IEkgaGF2ZSB0byBmb2N1cyBvbi4KKiAgICoqVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOioqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3Mgb25seSB1c2VkIGR1cmluZyBob3QtdW5wbHVnLCBvciBjb2RlIGV4Y2x1c2l2ZSB0byBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcywgc28gYW55dGhpbmcgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSBvciBzZXR1cC4KCk5vdywgd2FpdCBhIG1pbnV0ZSwgbGV0JiMzOTtzIGZvY3VzIG9uIGBwdHBfb2NwYC4gVGhpcyBpcyBhbiBPcGVuIENvbXB1dGUgUHJvamVjdCAoT0NQKSBUaW1lIENhcmQgZHJpdmVyLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byDigJMgaXMgdGhpcyBhIGRyaXZlciBmb3IgcGh5c2ljYWwgUENJZSBjYXJkcz8gT2theSwgeWVzLCBpdCYjMzk7cyB0aGUgZHJpdmVyIGZvciB0aGUgT0NQIFRpbWVDYXJkLCB3aGljaCBpcyBhIHBoeXNpY2FsIFBDSWUgY2FyZCB0aGF0IHByb3ZpZGVzIGF0b21pYyBjbG9jaywgR05TUywgYW5kIFBUUCB0aW1pbmcgcmVmZXJlbmNlIGZvciBzZXJ2ZXJzIGluIGRhdGFjZW50ZXJzLiBNZXRhIGluaXRpYXRlZCB0aGlzLCBJIHJlY2FsbC4gSSBrbm93IHRoZSBUaW1lQ2FyZCBkZXZpY2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBQQ0kgZGV2aWNlczogTWV0YSBUaW1lQ2FyZCwgQ2VsZXN0aWNhIFRpbWVDYXJkLCBPcm9saWEgQXJ0Q2FyZCwgQURWQSBUaW1lQ2FyZCBhbmQgQURWQSBUaW1lQ2FyZCBYMS4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgTWV0YSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkPyBObyEgUUVNVSAqZG9lc24mIzM5O3QqIGVtdWxhdGUgdGhpcyBoYXJkd2FyZS4gVGhpcyBpcyBhIGNydWNpYWwgcG9pbnQhIFNvLCBzaW5jZSB0aGUgVGltZUNhcmQgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBpdCBmYWxscyB1bmRlciB0aGF0ICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGNhdGVnb3J5LgoKTm93LCBiZWZvcmUgSSBtYWtlIGEgZmluYWwgZGV0ZXJtaW5hdGlvbiwgSSBuZWVkIHRvIHZlcmlmeTogY2FuIGBwdHBfb2NwYCBiZSBwcm9iZWQgb3IgaW5zdGFudGlhdGVkICp3aXRob3V0KiB0aGUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZT8gTGV0IG1lIGNoZWNrIGhvdyB0aGUgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGhhdmUgYW4gYWx0ZXJuYXRpdmUgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9vY3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTk5Nz1wdHBfb2NwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxNC1cdHdoYXQgPSBcJiMzNDtwdHBfb2NwIGRyaXZlclwmIzM0OztcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MDE1Olx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZwdHBfb2NwX2RyaXZlcik7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxNi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA3OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjU0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUFRQIEluaXRpYWxpemF0aW9uIGFuZCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgUFRQIGNvbXBvbmVudHMgYXJlIGludGVyYWN0aW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byBgcHRwX29jcF9pbml0YC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0JiMzOTtzIHNldHRpbmcgdXAgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBjbG9ja3MsIGFuZCBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgc3luY2hyb25pemF0aW9uIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgcGVyaGFwcyBkdXJpbmcgZWFybHkgYm9vdD8gQXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgc2V0IHVwIGNvcnJlY3RseT8gQW55IGlzc3VlcyBhcm91bmQgY2xvY2sgc291cmNlIHNlbGVjdGlvbj8gQW5kIHRoZW4gSSYjMzk7bGwgbW92ZSB0byB0aGUgYHB0cF9vY3BfZHJpdmVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgUFRQIHRpbWVzdGFtcHMsIGFuZCBob3cgaXQmIzM5O3MgZXhwb3NlZCB0byB0aGUgdXNlciBzcGFjZS4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXM/IEFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBvciBkYXRhIHRyYW5zZmVyPyBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGJvdGggb2YgdGhlc2UgbW9kdWxlcywgZXNwZWNpYWxseSB0aGUgY2FzZXMgd2hlcmUgdGhlIGluaXRpYWxpemF0aW9uIGZhaWxzLiBJIGFtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBpc3N1ZXMgYXJvdW5kIGRhdGEgcmFjZXMgb3IgaG93IHRoZXkgYXJlIGhhbmRsZWQsIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgdGhlIG92ZXJhbGwgcm9idXN0bmVzcyBpbiBlZGdlIGNhc2VzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGVuZC10by1lbmQgUFRQIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9vY3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk5MDpcdH1cbjU5OTE6XHRcbjU5OTI6XHRzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHB0cF9vY3BfaTJjX25vdGlmaWVyID0ge1xuNTk5MzpcdFx0Lm5vdGlmaWVyX2NhbGwgPSBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsLFxuNTk5NDpcdH07XG41OTk1Olx0XG41OTk2Olx0c3RhdGljIGludCBfX2luaXRcbjU5OTc6XHRwdHBfb2NwX2luaXQodm9pZClcbjU5OTg6XHR7XG41OTk5Olx0XHRjb25zdCBjaGFyICp3aGF0O1xuNjAwMDpcdFx0aW50IGVycjtcbjYwMDE6XHRcbjYwMDI6XHRcdHB0cF9vY3BfZGVidWdmc19pbml0KCk7XG42MDAzOlx0XG42MDA0Olx0XHR3aGF0ID0gXCYjMzQ7dGltZWNhcmQgY2xhc3NcJiMzNDs7XG42MDA1Olx0XHRlcnIgPSBjbGFzc19yZWdpc3RlcihcdTAwMjZ0aW1lY2FyZF9jbGFzcyk7XG42MDA2Olx0XHRpZiAoZXJyKVxuNjAwNzpcdFx0XHRnb3RvIG91dDtcbjYwMDg6XHRcbjYwMDk6XHRcdHdoYXQgPSBcJiMzNDtpMmMgbm90aWZpZXJcJiMzNDs7XG42MDEwOlx0XHRlcnIgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2aTJjX2J1c190eXBlLCBcdTAwMjZwdHBfb2NwX2kyY19ub3RpZmllcik7XG42MDExOlx0XHRpZiAoZXJyKVxuNjAxMjpcdFx0XHRnb3RvIG91dF9ub3RpZmllcjtcbjYwMTM6XHRcbjYwMTQ6XHRcdHdoYXQgPSBcJiMzNDtwdHBfb2NwIGRyaXZlclwmIzM0OztcbjYwMTU6XHRcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2cHRwX29jcF9kcml2ZXIpO1xuNjAxNjpcdFx0aWYgKGVycilcbjYwMTc6XHRcdFx0Z290byBvdXRfcmVnaXN0ZXI7XG42MDE4Olx0XG42MDE5Olx0XHRyZXR1cm4gMDtcbjYwMjA6XHRcbjYwMjE6XHRvdXRfcmVnaXN0ZXI6XG42MDIyOlx0XHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZpMmNfYnVzX3R5cGUsIFx1MDAyNnB0cF9vY3BfaTJjX25vdGlmaWVyKTtcbjYwMjM6XHRvdXRfbm90aWZpZXI6XG42MDI0Olx0XHRjbGFzc191bnJlZ2lzdGVyKFx1MDAyNnRpbWVjYXJkX2NsYXNzKTtcbjYwMjU6XHRvdXQ6XG42MDI2Olx0XHRwdHBfb2NwX2RlYnVnZnNfZmluaSgpO1xuNjAyNzpcdFx0cHJfZXJyKEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogZmFpbGVkIHRvIHJlZ2lzdGVyICVzOiAlZFxcblwmIzM0Oywgd2hhdCwgZXJyKTtcbjYwMjg6XHRcdHJldHVybiBlcnI7XG42MDI5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDU0NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFEVkEgeDEgVEFQIEJvYXJkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwdHBfb2NwX2RyaXZlcmAuIEl0JiMzOTtzIGRlZmluZWQgYXMgYSBzdGFuZGFyZCBgc3RydWN0IHBjaV9kcml2ZXJgLCBub3RoaW5nIGdyb3VuZGJyZWFraW5nIHRoZXJlLiBUaGUgaW50ZXJlc3RpbmcgYml0LCBhcyBhbHdheXMsIGlzIGhvdyBpdCBwcm9iZXMuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElEcywgcmlnaHQ/IEFuZCBJIHNlZSB0aGUgdGFibGU6IGBwdHBfb2NwX3BjaWRldl9pZGAuCgpSaWdodCwgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEFEVkEgeDEgVEFQIGJvYXJkcyAoYFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRF9YMSwgJmFtcDtvY3BfYWR2YV94MV9yZXNvdXJjZSlgKS4gVGhlc2UgYXJlIGFjdHVhbCBQQ0llIGNhcmRzIHdpdGggdGhlIFBDSSBJRCAweGFkNWE6MHgwNDEwLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBmdW5jdGlvbnMgcmVsYXRlIHRvIENQTEQgZmxhc2ggdXBkYXRlcyBhbmQgcmVhZGluZyBpdHMgc3RhdHVzIG9uICp0aG9zZSogYm9hcmRzOiBgYWR2YV94MV9jcGxkX2ZsYXNoYCwgYGFkdmFfeDFfY3BsZF9yZWFkX2lkYCwgcGx1cyB0aGUgc3lzZnMgYXR0cmlidXRlIGBjcGxkX3N0YXR1c2AuIEl0JiMzOTtzIGFkZGluZyBkZXZsaW5rIHN1cHBvcnQgZm9yIGZsYXNoaW5nIGFuZCBpbmZvcm1hdGlvbiByZXRyaWV2YWwsIGluY2x1ZGluZyBgcHRwX29jcF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAsIGBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXRgLCBhbmQgYHB0cF9vY3Bfc3luY193b3JrYC4gVGhlcmUgYXJlIGFsc28gc29tZSBlcnJvciBmaXhlcyBpbiBgcHRwX29jcF9wcm9iZWAgLyBgcHRwX29jcF9kZXRhY2hgLCBhcyB3ZWxsIGFzIG11dGV4IGluaXRpYWxpemF0aW9uLgoKTm93LCBob2xkIG9uLi4uIHRoYXQgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgIGZ1bmN0aW9uLiBJdCAqcmVnaXN0ZXJzKiBhbiBJMkMgYWRhcHRlci4gSSB3b25kZXIsIGRvZXMgaXQgbWF0Y2ggYW4gSTJDIGFkYXB0ZXIganVzdCBmb3IgdGhlc2UgVEFQIGJvYXJkcywgb3IgY291bGQgaXQgcG90ZW50aWFsbHkgYmUgaW52b2tlZCBvbiBvdGhlciBJMkMgYnVzIGV2ZW50cz8gSSBzaG91bGQgY2hlY2sgdGhlIGNvZGUgZm9yIHRoYXQuIEJldHRlciBsb29rIGF0IHRoZSBsaW5lcyA1OTQ2LTU5ODkgb2YgYHB0cF9vY3AuY2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBicm9hZCBidXMgbWF0Y2hpbmcgZ29pbmcgb24uIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGlzIEkyQyBub3RpZmllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3B0cC9wdHBfb2NwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU5NDU6XHRzdGF0aWMgaW50XG41OTQ2Olx0cHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuNTk0NzpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXG41OTQ4Olx0e1xuNTk0OTpcdFx0c3RydWN0IGRldmljZSAqZGV2LCAqY2hpbGQgPSBkYXRhO1xuNTk1MDpcdFx0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuNTk1MTpcdFx0c3RydWN0IHB0cF9vY3AgKmJwO1xuNTk1MjpcdFx0Ym9vbCBhZGQ7XG41OTUzOlx0XG41OTU0Olx0XHRzd2l0Y2ggKGFjdGlvbikge1xuNTk1NTpcdFx0Y2FzZSBCVVNfTk9USUZZX0FERF9ERVZJQ0U6XG41OTU2Olx0XHRjYXNlIEJVU19OT1RJRllfREVMX0RFVklDRTpcbjU5NTc6XHRcdFx0YWRkID0gYWN0aW9uID09IEJVU19OT1RJRllfQUREX0RFVklDRTtcbjU5NTg6XHRcdFx0YnJlYWs7XG41OTU5Olx0XHRkZWZhdWx0OlxuNTk2MDpcdFx0XHRyZXR1cm4gMDtcbjU5NjE6XHRcdH1cbjU5NjI6XHRcbjU5NjM6XHRcdGlmICghaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKSlcbjU5NjQ6XHRcdFx0cmV0dXJuIDA7XG41OTY1Olx0XG41OTY2Olx0XHRkZXYgPSBjaGlsZDtcbjU5Njc6XHRcdHdoaWxlICgoZGV2ID0gZGV2LVx1MDAzZXBhcmVudCkpXG41OTY4Olx0XHRcdGlmIChkZXYtXHUwMDNlZHJpdmVyIFx1MDAyNlx1MDAyNiAhc3RyY21wKGRldi1cdTAwM2Vkcml2ZXItXHUwMDNlbmFtZSwgS0JVSUxEX01PRE5BTUUpKVxuNTk2OTpcdFx0XHRcdGdvdG8gZm91bmQ7XG41OTcwOlx0XHRyZXR1cm4gMDtcbjU5NzE6XHRcbjU5NzI6XHRmb3VuZDpcbjU5NzM6XHRcdGJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG41OTc0Olx0XHRhZGFwID0gaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKTtcbjU5NzU6XHRcdGlmIChhZGQpIHtcbjU5NzY6XHRcdFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXCYjMzQ7aTJjXCYjMzQ7KTtcbjU5Nzc6XHRcdFx0LyogT25seSB0aGUgY2FyZCYjMzk7cyBvd24gY29udHJvbGxlcjogYSBtdXggY2hpbGQgYWRkZWQgb24gaXRcbjU5Nzg6XHRcdFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXG41OTc5Olx0XHRcdCAqIHJlY3ljbGVkLCBzbyB0aGUgY2xhaW0gcmUtY2hlY2tzIHRoZSBwYXJlbnQgaXRzZWxmLlxuNTk4MDpcdFx0XHQgKi9cbjU5ODE6XHRcdFx0aWYgKGJwLVx1MDAzZWkyY19jdHJsIFx1MDAyNlx1MDAyNiBhZGFwLVx1MDAzZWRldi5wYXJlbnQgPT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KVxuNTk4MjpcdFx0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgYWRhcC1cdTAwM2Vucik7XG41OTgzOlx0XHR9IGVsc2Uge1xuNTk4NDpcdFx0XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXG41OTg1Olx0XHRcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikgPT0gYWRhcC1cdTAwM2VucilcbjU5ODY6XHRcdFx0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIC0xKTtcbjU5ODc6XHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwmIzM0O2kyY1wmIzM0Oyk7XG41OTg4Olx0XHR9XG41OTg5Olx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGxgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gVGhlIGNvbW1lbnQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBJMkMgZGV2aWNlIGlzIGFkZGVkIG9yIHJlbW92ZWQuIEludGVyZXN0aW5nLiBTbywgaXQmIzM5O3MgYSBob3RwbHVnIG5vdGlmaWNhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2suIEl0IHN0YXJ0cyBieSB0cmF2ZXJzaW5nIHRoZSBkZXZpY2UgaGllcmFyY2h5IHVwd2FyZHMgZnJvbSB0aGUgY2hpbGQgZGV2aWNlIChgZGV2ID0gY2hpbGRgKSBhbmQgbG9va3MgZm9yIGEgcGFyZW50IHRoYXQgaGFzIGEgZHJpdmVyIG5hbWVkICYjMzQ7cHRwX29jcC4mIzM0OyBUaGUgbG9vcCBtYWtlcyBwZXJmZWN0IHNlbnNlIOKAkyB3ZSYjMzk7cmUgdHJhY2luZyBiYWNrIHRoZSBkZXZpY2UmIzM5O3MgYW5jZXN0cnkgdG8gc2VlIGlmIGl0JiMzOTtzIGNvbm5lY3RlZCB0byBzb21ldGhpbmcgcmVsZXZhbnQuIFRoZSBgc3RyY21wYCBpcyBob3cgaXQmIzM5O3MgY2hlY2tpbmcgdGhlIG5hbWUsIG1ha2VzIHBlcmZlY3Qgc2Vuc2UsIHNvIHRoZSBjb2RlIGp1bXBzIHRvIGBmb3VuZGAgaWYgdGhhdCBkcml2ZXIgZXhpc3RzLiBBbmQgaWYgaXQgZG9lc24mIzM5O3QgZmluZCBhIGBwdHBfb2NwYCBkcml2ZXIgYXR0YWNoZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDAuCgpXYWl0IGEgc2Vjb25k4oCmIElmIG5vIGBwdHBfb2NwYCBwYXJlbnQgaXMgZm91bmQsIGl0IHJldHVybnMgd2l0aG91dCBkb2luZyBhbnl0aGluZz8gVGhhdCBzZWVtc+KApiByZXN0cmljdGl2ZS4gSXQgc2VlbXMgdG8gc3VnZ2VzdCB0aGlzIHdob2xlIGZ1bmN0aW9uIGlzIG9ubHkgcmVsZXZhbnQgaWYgYSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvIGEgYHB0cF9vY3BgIGRldmljZS4gQW5kIEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCBgcHRwX29jcGAgaXMgb25seSBpbnN0YW50aWF0ZWQgaWYgaXQgcHJvYmVzIHdpdGggYSBQQ0kgSUQgaW4gdGhhdCBgcHRwX29jcF9wY2lkZXZfaWRgIGFycmF5LgoKU28gaGVyZSYjMzk7cyB0aGUgcXVlc3Rpb246IGluIGEgUUVNVSBlbnZpcm9ubWVudCwgaXMgdGhlcmUgKmFueSogdmlydHVhbCBidXMgb3IgZW11bGF0aW9uIHRoYXQgKmNhbiogYWN0dWFsbHkgaW5zdGFudGlhdGUgdGhlIGBwdHBfb2NwYCBkZXZpY2U/IEkmIzM5O20gZHJhd2luZyBhIGJsYW5rIHJpZ2h0IG5vdy4gSXQgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBibGluZCBzcG90IGluIG15IHNldHVwLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGVyZSYjMzk7cyBldmVuIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBub3RpZmljYXRpb24gaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHRoaW5rIEkmIzM5O2xsIGxvb2sgYXJvdW5kIGluIHRoZSBrZXJuZWwgdHJlZSBmb3Igb3RoZXIgaW5zdGFuY2VzIHdoZXJlIGBwdHBfb2NwYCBkZXZpY2VzIGFyZSBjcmVhdGVkLiBJdCBtaWdodCBvZmZlciBzb21lIGluc2lnaHQgaW50byBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyBvciBhbHRlcm5hdGUgaW5zdGFudGlhdGlvbiBtZXRob2RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcJiMzNDtwdHBfb2NwXCYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcHRwL3B0cF9vY3AuYz0yMjY5PV9fcHRwX29jcF9nZXRfbWVtKHN0cnVjdCBwdHBfb2NwICpicCwgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBpbnQgc2l6ZSlcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yMjcwLXtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyMjcxOlx0c3RydWN0IHJlc291cmNlIHJlcyA9IERFRklORV9SRVNfTUVNX05BTUVEKHN0YXJ0LCBzaXplLCBcJiMzNDtwdHBfb2NwXCYjMzQ7KTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yMjcyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIzMAoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA5NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiAmIzM0O3B0cF9vY3AmIzM0OyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBkaWRuJiMzOTt0IGltbWVkaWF0ZWx5IHJldmVhbCBhbnkgcmVkIGZsYWdzLiBCdXQsIEkgbmVlZCB0byBiZSBwcmVjaXNlLiAgJiMzNDtwdHBfb2NwJiMzNDsgaXNuJiMzOTt0IGJpbmRpbmcgYW55dGhpbmcgc3BlY2lmaWMgaW4gbXkgbWVudGFsIG1vZGVsLCBzbyBJIHdlbnQgZGVlcGVyLiAgSSBxdWlja2x5IHJlZmVyZW5jZWQgdGhlIFBDSSB2ZW5kb3IgSURzLCB0aGUgTUVUQSwgQURWQSwgQ0VMRVNUSUNBLCBhbmQgT1JPTElBIElEcywgYWxsIG9mIHdoaWNoIGFyZSBhIG5vbi1lbXVsYXRlZCBieSBRRU1VIGFuZCBHQ0UsIGEgY29tbW9uIGluZGljYXRvciBvZiBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuCgpUaGUgZGVjaXNpdmUgZmFjdG9yIGlzIHRoZSBjcml0aWNhbCBzZWN0aW9uIDIgb2YgdGhlIGluc3RydWN0aW9ucy4gVGhpcyBzZWN0aW9uIGRlZmluZXMgd2hlbiBhIHBhdGNoIHNob3VsZCAqbm90KiBiZSBmdXp6ZWQgKFdvcnRoRnV6emluZz1mYWxzZSkuIEkgbWV0aWN1bG91c2x5IHJlYWQgdGhyb3VnaCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBJdCBjbGVhcmx5IHN0YXRlcyB0aGF0IHZlbmRvci1zcGVjaWZpYyBQQ0llIGRldmljZXMgdGhhdCBhcmVuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgYXJlIGV4Y2x1ZGVkLiAgVGhpcyBkaXJlY3RseSBoaXRzIGhvbWU6IHNwZWNpZmljYWxseSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4gSSBrbm93IHRoaXMgdmVyeSB3ZWxsIQoKU2VjdGlvbiAxIHJlaW5mb3JjZXMgdGhpcy4gUmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudC4gSWYgY29kZSBjYW4mIzM5O3QgZXhlY3V0ZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBpdCYjMzk7cyBhIG5vLWdvIGZvciBmdXp6aW5nLiBObyBtYXR0ZXIgaG93IGNsZXZlciBvciBjb21wbGV4LCBpZiBpdCYjMzk7cyBub3QgKnJlYWNoYWJsZSosIGl0JiMzOTtzIG5vdCBmdXp6ZWQuCgpOb3csIGxldCYjMzk7cyBleGFtaW5lIHRoZSBwYXRjaCBjb250ZW50LiBJIG5lZWQgdG8gYmUgZXhhY3QuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW46CgoxLiAgYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmRgCjIuICBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0YAozLiAgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0YAo0LiAgYE1BSU5UQUlORVJTYAo1LiAgYGRyaXZlcnMvcHRwL3B0cF9vY3AuY2AKClRoZSBkb2N1bWVudGF0aW9uIGFuZCBgTUFJTlRBSU5FUlNgIGNoYW5nZXMgYXJlIHB1cmUgZG9jdW1lbnRhdGlvbi4gTm90IGV4ZWN1dGFibGUuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGlzIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLiAgVGhpcyBpcyB0aGUgT3BlbkNvbXB1dGUgUFRQIGNsb2NrIFBDSWUgZHJpdmVyLiAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgZGVwZW5kcyBvbiBzcGVjaWZpYywgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgdGhlIEFEVkEgVGltZUNhcmQgWDEgUENJZSBjYXJkLiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUgb3IgR0NFLgoKVGh1cywgd2l0aG91dCB0aGUgKnBoeXNpY2FsKiBQQ0llIGRldmljZSwgdGhlIGBwdHBfb2NwX3Byb2JlKClgIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC4gTm8gYHB0cF9vY3BgIGluc3RhbmNlIGlzIGNyZWF0ZWQsIG5vIGRldmxpbmsgb3Igc3lzZnMgZGV2aWNlIGlzIHJlZ2lzdGVyZWQuIEFsbCB0aGUgbW9kaWZpZWQgY29kZSBpbiB0aGlzIGRyaXZlciwgdGhlIG5ldyBhbmQgb2xkLCBpcyB1bnJlYWNoYWJsZSBieSBzeXprYWxsZXIuCgpJIGNvbmZpcm0gdGhlcmUgd2VyZSBubyB0b3VjaGVzIHRvIGNvcmUgb3IgZ2VuZXJpYyBzdWJzeXN0ZW0gY29kZS4gSnVzdCB0aGUgZHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBmdW5kYW1lbnRhbGx5ICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLgoKSGVuY2UsIGl0JiMzOTtzIGEgY2xlYXI6CgoqICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKioKKiAgICoqRW5hYmxlQ29uZmlnczogXFsgXSoqCiogICAqKkZvY3VzU3ltYm9sczogXFsgXSoqCgpUaGUgcmVhc29uaW5nIGlzIHNpbXBsZSBhbmQgcHJlY2lzZTogdGhlIGNoYW5nZXMgaW52b2x2ZSBEb2N1bWVudGF0aW9uIGFuZCBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCwgYSBzcGVjaWFsaXplZCBQQ0llIHRpbWVjYXJkIGRyaXZlciAoTWV0YSAvIEFEVkEgVGltZUNhcmQgWDEpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoaXMgbWFrZXMgdGhlIGFmZmVjdGVkIGNvZGUgaW5hY2Nlc3NpYmxlIHRvIHN5emthbGxlciwgd2hpY2ggZGVwZW5kcyBvbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwNzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjc6MjAuNTAzOTI0OTcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2NjA0MzAwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzoyMC41MDM5MjkxMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODg5MzgyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3M2JlZTg4MTY4MWJiM2U1NTQwYTc0OGI1Y2VjZTViYjQwOGJjNzhkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDE0IDA3OjI3OjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuaW5kZXggM2FlNDFiNzYzNGFjOS4uNmRkY2E0NTJiYzYzMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxcbkBAIC0xMSw2ICsxMSwzNCBAQCBDb250YWN0OlxcdEpvbmF0aGFuIExlbW9uIFxcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cXHUwMDNlXFxuIERlc2NyaXB0aW9uOlxcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcXG4gXFx0XFx0cmVnaXN0ZXJlZC5cXG4gXFxuK1doYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2NwbGRfc3RhdHVzXFxuK0RhdGU6XFx0XFx0SnVseSAyMDI2XFxuK0NvbnRhY3Q6XFx0U2FnaSBNYWltb24gXFx1MDAzY21haW1vbi5zYWdpQGdtYWlsLmNvbVxcdTAwM2VcXG4rRGVzY3JpcHRpb246XFx0KFJPLCByb290IG9ubHkpIFRoZSBmbGFncyBzZXQgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBvZiB0aGVcXG4rXFx0XFx0VEFQIENQTEQsIHNwYWNlIHNlcGFyYXRlZCwgb3IgYW4gZW1wdHkgbGluZSB3aGVuIG5vbmUgaXNcXG4rXFx0XFx0c2V0LiAgT25seSBwcmVzZW50IG9uIEFEVkEgeDEgVEFQIGJvYXJkcyAoUENJIElEXFxuK1xcdFxcdDB4YWQ1YToweDA0MTApLlxcbitcXG4rXFx0XFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcdFxcdGRvbmUgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGZsYXNoIHdhcyBwcm9ncmFtbWVkXFxuK1xcdFxcdFxcdCAgICBzdWNjZXNzZnVsbHkgYW5kIGlzIGFjdGl2ZVxcbitcXHRcXHRidXN5ICAgICAgICBhbiBpbnRlcm5hbCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3NcXG4rXFx0XFx0ZmFpbGVkICAgICAgdGhlIGxhc3QgSVNDIG9wZXJhdGlvbiBmYWlsZWRcXG4rXFx0XFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitcXHRcXHRGb3IgZXhhbXBsZSBcXFwiYnVzeVxcXCIgd2hpbGUgcHJvZ3JhbW1pbmcsIG9yIFxcXCJidXN5IGZhaWxlZFxcXCIgaWYgYVxcbitcXHRcXHRmYWlsdXJlIGlzIGxhdGNoZWQgd2hpbGUgYW5vdGhlciBvcGVyYXRpb24gcnVucy5cXG4rXFxuK1xcdFxcdEEgcmVhZCBhcmJpdHJhdGVzIGZvciB0aGUgc2hhcmVkIEkyQyBidXMgYW5kIHJlcHJvZ3JhbXMgdGhlXFxuK1xcdFxcdG9uLWNhcmQgbXV4LCBzbyBpdCBpcyByZXN0cmljdGVkIHRvIHJvb3QuICBUaGUgTGF0dGljZSBkZXZpY2VcXG4rXFx0XFx0SUQgb2YgdGhlIENQTEQgaXMgcmVhZCBvbmNlIGJ5IHRoZSBkcml2ZXIsIHNob3J0bHkgYWZ0ZXJcXG4rXFx0XFx0cHJvYmUsIGFuZCByZXBvcnRlZCBmcm9tIHRoYXQgY2FjaGVkIHZhbHVlIGFzIHRoZSBmaXhlZFxcbitcXHRcXHRcXFwiY3BsZC5pZFxcXCIgdmVyc2lvbiBieSBkZXZsaW5rIGRldiBpbmZvLlxcbitcXG4rXFx0XFx0TmV3IENQTEQgZmlybXdhcmUgaXMgcHJvZ3JhbW1lZCB3aXRoIGRldmxpbmsgZGV2IGZsYXNoLFxcbitcXHRcXHRzZWxlY3RpbmcgdGhlIFxcXCJmdy5jcGxkXFxcIiBjb21wb25lbnQ7IHNlZVxcbitcXHRcXHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdC5cXG4rXFxuIFdoYXQ6XFx0XFx0L3N5cy9jbGFzcy90aW1lY2FyZC9vY3BOL2F2YWlsYWJsZV9jbG9ja19zb3VyY2VzXFxuIERhdGU6XFx0XFx0U2VwdGVtYmVyIDIwMjFcXG4gQ29udGFjdDpcXHRKb25hdGhhbiBMZW1vbiBcXHUwMDNjam9uYXRoYW4ubGVtb25AZ21haWwuY29tXFx1MDAzZVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcXG5pbmRleCBkNGE4M2ZkY2ZmN2ZlLi4xYWY3ODBjODExZWUyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbkBAIC05OSw2ICs5OSw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy5cXG4gICAgbmZwXFxuICAgIG9jdGVvbnR4MlxcbiAgICBwcmVzdGVyYVxcbisgICBwdHBfb2NwXFxuICAgIHFlZFxcbiAgICBzZmNcXG4gICAgc3RtbWFjXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3RcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM3ZTlmMWViZDFhODFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3RcXG5AQCAtMCwwICsxLDcwIEBAXFxuKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbis9PT09PT09PT09PT09PT09PT09PT09PT1cXG4rcHRwX29jcCBkZXZsaW5rIHN1cHBvcnRcXG4rPT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGV2bGluayBmZWF0dXJlcyBpbXBsZW1lbnRlZCBieSB0aGUgYGBwdHBfb2NwYGBcXG4rZGV2aWNlIGRyaXZlcjogdGhlIGluZm8gdmVyc2lvbnMgaXQgcmVwb3J0cyBhbmQgaXRzIGZsYXNoIHVwZGF0ZSBzdXBwb3J0LlxcbitcXG4rSW5mbyB2ZXJzaW9uc1xcbis9PT09PT09PT09PT09XFxuK1xcbitUaGUgYGBwdHBfb2NwYGAgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyB2ZXJzaW9uc1xcbitcXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZFxcbisgICA6d2lkdGhzOiA1IDUgOTBcXG4rXFxuKyAgICogLSBOYW1lXFxuKyAgICAgLSBUeXBlXFxuKyAgICAgLSBEZXNjcmlwdGlvblxcbisgICAqIC0gYGBmd2BgXFxuKyAgICAgLSBydW5uaW5nXFxuKyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBjYXJkLiAgUmVwb3J0ZWQgYXMgYGBsb2FkZXJgYFxcbisgICAgICAgaW5zdGVhZCB3aGVuIHRoZSBjYXJkIGlzIHJ1bm5pbmcgdGhlIGZpcm13YXJlIGxvYWRlci5cXG4rICAgKiAtIGBgYm9hcmQuaWRgYFxcbisgICAgIC0gZml4ZWRcXG4rICAgICAtIEJvYXJkIGlkZW50aWZpZXIsIHJlYWQgZnJvbSB0aGUgb24tY2FyZCBFRVBST00uXFxuKyAgICogLSBgYGNwbGQuaWRgYFxcbisgICAgIC0gZml4ZWRcXG4rICAgICAtIExhdHRpY2UgZGV2aWNlIElEIChJRENPREUpIG9mIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzIGBgMHglMDh4YGAuXFxuKyAgICAgICBPbmx5IHByZXNlbnQgb24gQURWQSBUaW1lQ2FyZCBYMSBib2FyZHMsIHdoaWNoIGFyZSB0aGUgb25seSBvbmVzXFxuKyAgICAgICBjYXJyeWluZyB0aGF0IENQTEQuICBSZWFkaW5nIGl0IGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgYW5kXFxuKyAgICAgICByZXByb2dyYW1zIHRoZSBvbi1jYXJkIG11eCwgc28gdGhlIGRyaXZlciBkb2VzIHRoYXQgb25jZSBmcm9tIGl0c1xcbisgICAgICAgb3duIHdvcmtlciBhbmQgcmVwb3J0cyB0aGUgY2FjaGVkIHZhbHVlIGhlcmU7IHRoZSB2ZXJzaW9uIGlzXFxuKyAgICAgICBvbWl0dGVkIHVudGlsIHRoYXQgcmVhZCBoYXMgc3VjY2VlZGVkLlxcbisgICAqIC0gYGBmdy5jcGxkYGBcXG4rICAgICAtIHJ1bm5pbmdcXG4rICAgICAtIFVTRVJDT0RFIG9mIHRoZSBpbWFnZSBwcm9ncmFtbWVkIGludG8gdGhlIFRBUCBDUExELCBmb3JtYXR0ZWQgYXNcXG4rICAgICAgIGBgMHglMDh4YGAuICBSZWFkIHRvZ2V0aGVyIHdpdGggYGBjcGxkLmlkYGAgYW5kIHJlcG9ydGVkIHRoZSBzYW1lXFxuKyAgICAgICB3YXkuICBUaGlzIGlzIHRoZSBjb21wb25lbnQgbmFtZSB0byBwYXNzIHRvIGBgZGV2bGluayBkZXYgZmxhc2hgYFxcbisgICAgICAgdG8gdXBkYXRlIHRoZSBDUExELlxcbitcXG4rRmxhc2ggdXBkYXRlXFxuKz09PT09PT09PT09PVxcbitcXG4rVGhlIGRyaXZlciBpbXBsZW1lbnRzIGBgZGV2bGluayBkZXYgZmxhc2hgYCBmb3IgdHdvIHNlcGFyYXRlIHRhcmdldHMsXFxuK3NlbGVjdGVkIHdpdGggdGhlIGNvbXBvbmVudCBuYW1lLlxcbitcXG4rLi4gbGlzdC10YWJsZTo6IEZsYXNoIGNvbXBvbmVudHNcXG4rICAgOndpZHRoczogMjAgODBcXG4rXFxuKyAgICogLSBDb21wb25lbnRcXG4rICAgICAtIERlc2NyaXB0aW9uXFxuKyAgICogLSAobm9uZSlcXG4rICAgICAtIFRoZSBjYXJkJ3Mgb3duIGZsYXNoLCB3cml0dGVuIHRocm91Z2ggdGhlIFNQSSBjb250cm9sbGVyIHRoZSBkcml2ZXJcXG4rICAgICAgIGV4cG9zZXMuICBUaGUgY2FyZCBydW5zIHRoZSBuZXcgaW1hZ2UgYWZ0ZXIgaXRzIG5leHQgcmVzZXQuXFxuKyAgICogLSBgYGZ3LmNwbGRgYFxcbisgICAgIC0gVGhlIGNvbmZpZ3VyYXRpb24gZmxhc2ggb2YgdGhlIFRBUCBDUExEIG9uIEFEVkEgVGltZUNhcmQgWDEgYm9hcmRzLFxcbisgICAgICAgcHJvZ3JhbW1lZCBvdmVyIEkyQyB3aXRoIHRoZSBNYWNoWE8zIGluLXN5c3RlbSBwcm9ncmFtbWluZyBjb21tYW5kc1xcbisgICAgICAgYW5kIGFjdGl2YXRlZCB3aXRoIGEgUkVGUkVTSCwgc28gdGhlIG5ldyBpbWFnZSBydW5zIGltbWVkaWF0ZWx5LlxcbisgICAgICAgVGhlIGltYWdlIGlzIHRoZSByYXcgY29uZmlndXJhdGlvbiBiaXRzdHJlYW0sIGEgd2hvbGUgbnVtYmVyIG9mXFxuKyAgICAgICAxNi1ieXRlIHBhZ2VzOyBjb250YWluZXIgZm9ybWF0cyBzdWNoIGFzIGBgLmplZGBgIGFyZSByZWplY3RlZC5cXG4rXFxuK1Byb2dyYW1taW5nIHRoZSBDUExEIGNsYWltcyB0aGUgc2hhcmVkIEkyQyBidXMgZm9yIHRoZSB3aG9sZSBjeWNsZSwgc29cXG4rcmVhZHMgb2YgdGhlIGNhcmQncyBFRVBST00gYmxvY2sgdW50aWwgaXQgY29tcGxldGVzLiAgUHJvZ3Jlc3MgaXMgcmVwb3J0ZWRcXG4rd2l0aCB0aGUgc3RhbmRhcmQgZGV2bGluayBzdGF0dXMgbm90aWZpY2F0aW9ucy5cXG4rXFxuK0V4YW1wbGU6OlxcbitcXG4rICAgICQgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6MDI6MDAuMCBmaWxlIGFkdmEtY3BsZC5iaW4gY29tcG9uZW50IGZ3LmNwbGRcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDBlMDRkOTJkMWIwOTguLjExM2YzMTQzNDYxNzcgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0yMDQ3OSw2ICsyMDQ3OSw3IEBAIE9QRU5DT01QVVRFIFBUUCBDTE9DSyBEUklWRVJcXG4gTTpcXHRWYWRpbSBGZWRvcmVua28gXFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxcbiBGOlxcdGRyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbiBcXG4gT1BFTkNPUkVTIEkyQyBCVVMgRFJJVkVSXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xcbmluZGV4IDNkMjZlYzFmN2I5ZWMuLjU4YjkwYjJiMjgyZmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuKysrIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXFxuQEAgLTIwLDEwICsyMCwxNCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpL2FsdGVyYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2kyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdGQvbXRkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMTYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RwbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFxcdFxcdDB4MDQwMFxcbiBcXG5AQCAtODUsNiArODksOCBAQCBzdHJ1Y3QgcHRwX29jcF9hZHZhX2luZm8ge1xcbiBcXHR1OFxcdFxcdFxcdFxcdHNpZ25hbHNfbnI7XFxuIFxcdHU4XFx0XFx0XFx0XFx0ZnJlcV9pbl9ucjtcXG4gXFx0Y29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwXFx0KmF0dHJfZ3JvdXBzO1xcbitcXHQvKiB4MTogVEFQIENQTEQgcHJlc2VudCAqL1xcbitcXHRib29sXFx0XFx0XFx0XFx0aGFzX2NwbGQ7XFxuIH07XFxuIFxcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVxcdFxcdEJJVCgwKVxcbkBAIC0xNjMsNyArMTY5LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcXG4gXFx0dTMyXFx0Z3BpbzE7XFxuIFxcdHUzMlxcdF9fcGFkMDtcXG4gXFx0dTMyXFx0Z3BpbzI7XFxuLVxcdHUzMlxcdF9fcGFkMTtcXG4rXFx0LyogYWR2YV94MTogSTJDIGJ1cyBvd25lcnNoaXAgcmVnaXN0ZXI7IHJlc2VydmVkIG9uIG90aGVyIHZhcmlhbnRzICovXFxuK1xcdHUzMlxcdGkyY19idXNfY3RybDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBpcmlnX21hc3Rlcl9yZWcge1xcbkBAIC00MTYsNiArNDIzLDI3IEBAIHN0cnVjdCBwdHBfb2NwIHtcXG4gXFx0ZHBsbF90cmFja2VyIHRyYWNrZXI7XFxuIFxcdGludCBzaWduYWxzX25yO1xcbiBcXHRpbnQgZnJlcV9pbl9ucjtcXG4rXFx0LyogYWR2YV94MSBDUExEIEkyQyAoaW50ZXJuYWwgdXNlIG9ubHkpICovXFxuK1xcdC8qIHNlcmlhbGlzZXMgQ1BMRCBvcGVyYXRpb25zICovXFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdGNwbGRfbG9jaztcXG4rXFx0LyogSTJDIGFkYXB0ZXIgbnI7IC0xIGlmIGFic2VudCAqL1xcbitcXHRpbnRcXHRcXHRcXHRjcGxkX2kyY19hZGFwX25yO1xcbitcXHQvKiBjbGFpbWVkIGFkYXB0ZXI7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xcbitcXHRzdHJ1Y3QgaTJjX2FkYXB0ZXJcXHQqY3BsZF9hZGFwO1xcbitcXHQvKiBzY3JhdGNoLCB3cml0ZSBoYWxmIHRoZW4gcmVhZCBoYWxmOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cXG4rXFx0dThcXHRcXHRcXHQqY3BsZF9idWY7XFxuK1xcdC8qIExhdHRpY2UgZGV2aWNlIElEOyAwIGlmIHVucmVhZCAqL1xcbitcXHR1MzJcXHRcXHRcXHRjcGxkX2lkO1xcbitcXHQvKiBVU0VSQ09ERSBvZiB0aGUgcHJvZ3JhbW1lZCBpbWFnZTsgdmFsaWQgb25jZSBjcGxkX2lkIGlzIHNldCAqL1xcbitcXHR1MzJcXHRcXHRcXHRjcGxkX3VzZXJjb2RlO1xcbitcXHQvKiB0aGUgb25lLXNob3QgSUQgcmVhZCBpcyBmaW5pc2hlZCwgc3VjY2Vzc2Z1bGx5IG9yIG5vdCAqL1xcbitcXHRib29sXFx0XFx0XFx0Y3BsZF9pZF90cmllZDtcXG4rXFx0LyogZmFpbGVkIElEIHJlYWQgYXR0ZW1wdHMgc28gZmFyICovXFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGNwbGRfaWRfYXR0ZW1wdHM7XFxuK1xcdC8qIHgxIFRBUCBDUExEIHByZXNlbnQgKi9cXG4rXFx0Ym9vbFxcdFxcdFxcdGhhc19jcGxkO1xcbitcXHQvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gnZCAqL1xcbitcXHRib29sXFx0XFx0XFx0Y3BsZF9pbl9jb25maWdfbW9kZTtcXG4gfTtcXG4gXFxuICNkZWZpbmUgT0NQX1JFUV9USU1FU1RBTVBcXHRCSVQoMClcXG5AQCAtNDUyLDYgKzQ4MCwxMyBAQCBzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV9zbWFfb3A7XFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XFxuIFxcbisvKiBGbGFzaCBjb21wb25lbnQgbmFtaW5nIHRoZSBDUExEIGltYWdlLCBhcyByZXBvcnRlZCBieSAtXFx1MDAzZWluZm9fZ2V0KCkuICovXFxuKyNkZWZpbmUgQURWQV9DUExEX0NPTVBPTkVOVFxcdFxcXCJmdy5jcGxkXFxcIlxcbitcXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfZmxhc2goc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXTtcXG5AQCAtMTI3Myw2ICsxMzA4LDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcXG4gXFx0XFx0XFx0LnNpZ25hbHNfbnIgICA9IDQsXFxuIFxcdFxcdFxcdC5mcmVxX2luX25yICAgPSA0LFxcbiBcXHRcXHRcXHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXFxuK1xcdFxcdFxcdC5oYXNfY3BsZCAgICAgPSB0cnVlLFxcbiBcXHRcXHR9LFxcbiBcXHR9LFxcbiBcXHR7IH1cXG5AQCAtMjEzMyw2ICsyMTY5LDE3IEBAIHB0cF9vY3BfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdGNvbnN0IGNoYXIgKm1zZztcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHRpZiAoIWJwLVxcdTAwM2VoYXNfY3BsZCB8fFxcbitcXHRcXHQgICAgc3RyY21wKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50LCBBRFZBX0NQTERfQ09NUE9ORU5UKSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwidW5zdXBwb3J0ZWQgZmxhc2ggY29tcG9uZW50XFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmV0dXJuIGFkdmFfeDFfY3BsZF9mbGFzaChicCwgZGV2bGluaywgcGFyYW1zLVxcdTAwM2VmdywgZXh0YWNrKTtcXG4rXFx0fVxcbitcXG4gXFx0ZGV2ID0gcHRwX29jcF9maW5kX2ZsYXNoKGJwKTtcXG4gXFx0aWYgKCFkZXYpIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2YnAtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbid0IGZpbmQgRmxhc2ggU1BJIGFkYXB0ZXJcXFxcblxcXCIpO1xcbkBAIC0yMTU1LDEwICsyMjAyLDEzIEBAIHN0YXRpYyBpbnRcXG4gcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiBcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuK1xcdGVudW0gZGV2bGlua19pbmZvX3ZlcnNpb25fdHlwZSB2ZXJfdHlwZSA9XFxuK1xcdFxcdFxcdFxcdFxcdERFVkxJTktfSU5GT19WRVJTSU9OX1RZUEVfQ09NUE9ORU5UO1xcbiBcXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XFxuIFxcdGNvbnN0IGNoYXIgKmZ3X2ltYWdlO1xcbiBcXHRjaGFyIGJ1ZlszMl07XFxuIFxcdGludCBlcnI7XFxuK1xcdHUzMiBpZDtcXG4gXFxuIFxcdGZ3X2ltYWdlID0gYnAtXFx1MDAzZWZ3X2xvYWRlciA/IFxcXCJsb2FkZXJcXFwiIDogXFxcImZ3XFxcIjtcXG4gXFx0c3ByaW50ZihidWYsIFxcXCIlZC4lZFxcXCIsIGJwLVxcdTAwM2Vmd190YWcsIGJwLVxcdTAwM2Vmd192ZXJzaW9uKTtcXG5AQCAtMjE2Niw2ICsyMjE2LDI4IEBAIHB0cF9vY3BfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdC8qIFJlYWQgYnkgdGhlIHdvcmtlciwgbm90IGhlcmU6IHRoaXMgY29tbWFuZCBpcyB1bnByaXZpbGVnZWQgYW5kXFxuK1xcdCAqIHJlYWRpbmcgdGhlIElEIGNsYWltcyB0aGUgSTJDIGJ1cy4gIDAgbWVhbnMgdW5yZWFkIC0gc2tpcCBpdFxcbitcXHQgKiByYXRoZXIgdGhhbiBmYWlsLCBkZXZsaW5rIGRpc2NhcmRzIHRoZSB3aG9sZSByZXBseSBvbiBlcnJvci5cXG4rXFx0ICovXFxuK1xcdGlkID0gUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2lkKTtcXG4rXFx0aWYgKGJwLVxcdTAwM2VoYXNfY3BsZCBcXHUwMDI2XFx1MDAyNiBpZCkge1xcbitcXHRcXHRzcHJpbnRmKGJ1ZiwgXFxcIjB4JTA4eFxcXCIsIGlkKTtcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgXFxcImNwbGQuaWRcXFwiLCBidWYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0XFx0LyogVGhlIGZsYXNoYWJsZSBjb21wb25lbnQ6IG5hbWluZyBpdCBoZXJlIGlzIHdoYXQgbGV0c1xcbitcXHRcXHQgKiBcXFwiZGV2bGluayBkZXYgZmxhc2ggLi4uIGNvbXBvbmVudCBmdy5jcGxkXFxcIiB0aHJvdWdoLCBhcyB0aGVcXG4rXFx0XFx0ICogY29yZSBtYXRjaGVzIHRoZSBuYW1lIGFnYWluc3QgdGhlIHZlcnNpb25zIHJlcG9ydGVkIGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzcHJpbnRmKGJ1ZiwgXFxcIjB4JTA4eFxcXCIsIFJFQURfT05DRShicC1cXHUwMDNlY3BsZF91c2VyY29kZSkpO1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBcXFwiZncuY3BsZFxcXCIsIGJ1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdmVyX3R5cGUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWJwLVxcdTAwM2VoYXNfZWVwcm9tX2RhdGEpIHtcXG4gXFx0XFx0cHRwX29jcF9yZWFkX2VlcHJvbShicCk7XFxuIFxcdFxcdGlmICghYnAtXFx1MDAzZWhhc19lZXByb21fZGF0YSlcXG5AQCAtMzE5OSw2ICszMjcxLDggQEAgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRwdHBfb2NwX3NtYV9pbml0KGJwKTtcXG4gXFxuK1xcdGJwLVxcdTAwM2VoYXNfY3BsZCA9IGluZm8tXFx1MDAzZWhhc19jcGxkO1xcbitcXG4gXFx0cmV0dXJuIHB0cF9vY3BfaW5pdF9jbG9jayhicCwgXFx1MDAyNmluZm8tXFx1MDAzZXNlcnZvKTtcXG4gfVxcbiBcXG5AQCAtNDIyNiw2ICs0MzAwLDY0OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwIGFydF90aW1lY2FyZF9ncm91cHNbXSA9IHtcXG4gXFx0eyB9LFxcbiB9O1xcbiBcXG4rLypcXG4rICogYWR2YV94MSBUQVAgQ1BMRCAoTGF0dGljZSBMQ01YTzNMRi0yMTAwKSBoZWxwZXJzLlxcbisgKlxcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cXG4rICogVGhlIGkyY19idXNfY3RybCBoYW5kc2hha2UgcmUtcm91dGVzIHdoYXQgZWFjaCBpcyB3aXJlZCB0bzpcXG4rICpcXG4rICogICBncmFudCAwOiAgMHgxNTAwMDAgLVxcdTAwM2UgRUVQUk9NcyAgICAgMHgxMjAwMDAgLVxcdTAwM2UgVE1DIG9yIE0uMiwgTUIncyBjaG9pY2VcXG4rICogICBncmFudCAxOiAgMHgxNTAwMDAgLVxcdTAwM2UgVE1DIGJ1cyAgICAgMHgxMjAwMDAgLVxcdTAwM2UgTS4yXFxuKyAqXFxuKyAqIFRoZSBQQ0E5NTQ4IGF0IDB4NzQgYW5kIHRoZSBDUExEIGF0IDB4NDAgYmVoaW5kIGl0cyBjaGFubmVsIDAgYXJlIG9uIHRoZVxcbisgKiBUTUMgYnVzLCByZWFjaGFibGUgb25seSB3aGlsZSB0aGUgZ3JhbnQgaXMgaGVsZC4gIFRoZSBFRVBST01zIGFyZSBub3RcXG4rICogYmVoaW5kIHRoZSBhZGFwdGVyIGZvciB0aGF0IHdpbmRvdywgc28gYSBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2tcXG4rICogYW5kIHRoZSBhZGFwdGVyIGxvY2sgdG8ga2VlcCB0aGUgRUVQUk9NIGFuZCBudm1lbSBwYXRocyBvZmYgaXQuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBBRFZBX01VWF9BRERSICAgICAweDc0XFxuKyNkZWZpbmUgQURWQV9DUExEX0FERFIgICAgMHg0MFxcbisjZGVmaW5lIEFEVkFfTVVYX0NIQU5ORUwgIDBcXG4rXFxuKy8qIExvbmdlc3QgY29tbWFuZCBvciByZXBseTsgYm91bmRzIGVhY2ggaGFsZiBvZiB0aGUgcGVyLWNsYWltIHNjcmF0Y2guICovXFxuKyNkZWZpbmUgQURWQV9DUExEX1hGRVJfTUFYIDMyXFxuK1xcbisjZGVmaW5lIE1CTEFaRV9SRVFVRVNUICAgIDB4MDAwMGFhYWFVXFxuKyNkZWZpbmUgTUJMQVpFX0dSQU5URUQgICAgMHg1NTU1YWFhYVVcXG4rI2RlZmluZSBNQkxBWkVfUkVMRUFTRSAgICAweDU1NTUwMDAwVVxcbisjZGVmaW5lIE1CTEFaRV9SRVRSSUVTICAgIDIwMFxcbisjZGVmaW5lIE1CTEFaRV9SRVRSWV9VUyAgIDEwMDAwXFxuK1xcbisvKiBMYXR0aWNlIExDTVhPM0xGIElTQyBjb21tYW5kIGNvZGVzICovXFxuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9JRCAgICAgIDB4RTAwMDAwMDBVTFxcbisjZGVmaW5lIENQTERfQ01EX1JFQURfVVNFUkNPREUgMHhDMDAwMDAwMFVMXFxuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9TVEFUVVMgIDB4M0MwMDAwMDBVTFxcbisjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqL1xcbisjZGVmaW5lIENQTERfQ01EX0RJU19DRkcgICAgICAweDI2XFxuKyNkZWZpbmUgQ1BMRF9DTURfRVJBU0UgICAgICAgIDB4MEVcXG4rI2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NlxcbisjZGVmaW5lIENQTERfQ01EX1dSSVRFX1BBR0UgICAweDcwXFxuKyNkZWZpbmUgQ1BMRF9DTURfU0VUX0RPTkUgICAgIDB4NUVcXG4rI2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OVxcbisjZGVmaW5lIENQTERfUEFHRV9TSVpFICAgICAgICAxNlxcbisjZGVmaW5lIENQTERfUE9MTF9VUyAgICAgICAgICAxMDAwMCAgLyogc3RhdHVzIHBvbGwgaW50ZXJ2YWwgd2hpbGUgYnVzeSAqL1xcbisjZGVmaW5lIENQTERfRVJBU0VfTVMgICAgICAgICAxNTAwMCAgLyogY29uZmlnIHNlY3RvciBlcmFzZSwgZGF0YXNoZWV0IG1heCAqL1xcbisjZGVmaW5lIENQTERfSURfTUFYX0FUVEVNUFRTICAxMCAgICAgLyogb25lIHBlciBzeW5jX3dvcmsgdGljayAqL1xcbitcXG4rLyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqL1xcbisjZGVmaW5lIENQTERfU1RBVFVTX0RPTkUgICBCSVQoOClcXG4rI2RlZmluZSBDUExEX1NUQVRVU19CVVNZICAgQklUKDEyKVxcbisjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpXFxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRVJSICAgIEdFTk1BU0soMjUsIDIzKVxcbitcXG4rLypcXG4rICogSXNzdWUgb25lIEkyQyB0cmFuc2FjdGlvbiBvbiB0aGUgVE1DIGJ1czogQGNtZCBpZiBub3QgbmVnYXRpdmUsIHRoZW5cXG4rICogQHdsZW4gYnl0ZXMgb2YgQHdkYXRhIChOVUxMIHNlbmRzIHplcm9zKSwgdGhlbiBAcmxlbiBieXRlcyByZWFkIGJhY2suXFxuKyAqIFRoZSBtZXNzYWdlIGlzIGJ1aWx0IGluIHRoZSBzY3JhdGNoIGJ1ZmZlciBmcm9tIGFkdmFfeDFfYnVzX2NsYWltKCksIHNvXFxuKyAqIGFuIHVwbG9hZCBjb3N0cyBvbmUgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBvbmUgcGVyIHBhZ2UuICBJMkNfTV9ETUFfU0FGRVxcbisgKiBpcyBub3Qgc2V0OiB0aGUgdHdvIGhhbHZlcyBhcmUgbm90IHNlcGFyYXRlbHkgYWxpZ25lZCwgc28gbGV0IHRoZSBjb3JlXFxuKyAqIGJvdW5jZS4gIENhbGxlciBob2xkcyB0aGUgY2xhaW0sIGhlbmNlIF9faTJjX3RyYW5zZmVyKCkuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfaTJjX3hmZXIoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBhZGRyLCBpbnQgY21kLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sXFxuK1xcdFxcdFxcdCAgICB2b2lkICpyZGF0YSwgdTggcmxlbilcXG4re1xcbitcXHR1OCAqd2J1ZiwgKnJidWY7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcXG4rXFx0c3RydWN0IGkyY19tc2cgbXNnc1syXTtcXG4rXFx0aW50IG5tc2dzID0gMCwgcmV0O1xcbitcXHR1MTYgaGRyID0gY21kIFxcdTAwM2U9IDA7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFxuK1xcdGFkYXAgPSBicC1cXHUwMDNlY3BsZF9hZGFwO1xcbitcXHRpZiAoIWFkYXAgfHwgIWJwLVxcdTAwM2VjcGxkX2J1ZilcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRpZiAoaGRyICsgd2xlbiBcXHUwMDNlIEFEVkFfQ1BMRF9YRkVSX01BWCB8fCBybGVuIFxcdTAwM2UgQURWQV9DUExEX1hGRVJfTUFYKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHdidWYgPSBicC1cXHUwMDNlY3BsZF9idWY7XFxuK1xcdHJidWYgPSBicC1cXHUwMDNlY3BsZF9idWYgKyBBRFZBX0NQTERfWEZFUl9NQVg7XFxuK1xcbitcXHRpZiAoaGRyICsgd2xlbikge1xcbitcXHRcXHRpZiAoaGRyKVxcbitcXHRcXHRcXHR3YnVmWzBdID0gY21kO1xcbitcXHRcXHRpZiAod2RhdGEpXFxuK1xcdFxcdFxcdG1lbWNweSh3YnVmICsgaGRyLCB3ZGF0YSwgd2xlbik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWVtc2V0KHdidWYgKyBoZHIsIDAsIHdsZW4pO1xcbitcXHRcXHRtc2dzW25tc2dzKytdID0gKHN0cnVjdCBpMmNfbXNnKXtcXG4rXFx0XFx0XFx0LmFkZHIgID0gYWRkcixcXG4rXFx0XFx0XFx0LmZsYWdzID0gMCxcXG4rXFx0XFx0XFx0LmxlbiAgID0gaGRyICsgd2xlbixcXG4rXFx0XFx0XFx0LmJ1ZiAgID0gd2J1ZixcXG4rXFx0XFx0fTtcXG4rXFx0fVxcbitcXHRpZiAocmxlbikge1xcbitcXHRcXHRtc2dzW25tc2dzKytdID0gKHN0cnVjdCBpMmNfbXNnKXtcXG4rXFx0XFx0XFx0LmFkZHIgID0gYWRkcixcXG4rXFx0XFx0XFx0LmZsYWdzID0gSTJDX01fUkQsXFxuK1xcdFxcdFxcdC5sZW4gICA9IHJsZW4sXFxuK1xcdFxcdFxcdC5idWYgICA9IHJidWYsXFxuK1xcdFxcdH07XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcXG4rXFx0aWYgKHJldCAhPSBubXNncylcXG4rXFx0XFx0cmV0dXJuIChyZXQgXFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XFxuK1xcbitcXHRpZiAocmRhdGEgXFx1MDAyNlxcdTAwMjYgcmxlbilcXG4rXFx0XFx0bWVtY3B5KHJkYXRhLCByYnVmLCBybGVuKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBIYW5kIHRoZSBzZWdtZW50IGJhY2ssIGFuZCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gZHJvcCB0aGUgZ3JhbnQgYmVmb3JlXFxuKyAqIHRoZSBjYWxsZXIgdW5sb2NrcyB0aGUgYWRhcHRlcjogYSB0cmFuc2ZlciBxdWV1ZWQgYmVoaW5kIHVzIHdvdWxkXFxuKyAqIG90aGVyd2lzZSBiZSBjbG9ja2VkIG91dCB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBzdGlsbCBvbiB0aGUgVE1DIGJ1cyxcXG4rICogd2hpY2ggaXMgd2hhdCBob2xkaW5nIHRoZSBhZGFwdGVyIGxvY2sgYWNyb3NzIHRoZSBncmFudCBleGlzdHMgdG8gc3RvcC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGFkdmFfeDFfbWJsYXplX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFicC1cXHUwMDNlcHBzX3NlbGVjdClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aW93cml0ZTMyKE1CTEFaRV9SRUxFQVNFLCBcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCk7XFxuK1xcdC8qIEZsdXNoIHRoZSBwb3N0ZWQgd3JpdGUsIGFzIHRoZSBhY3F1aXJlIHBhdGggZG9lcy4gKi9cXG4rXFx0aW9yZWFkMzIoXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1CTEFaRV9SRVRSSUVTOyBpKyspIHtcXG4rXFx0XFx0aWYgKGlvcmVhZDMyKFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKSAhPSBNQkxBWkVfR1JBTlRFRClcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgKyAxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2X3dhcm4oXFx1MDAyNmJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJUTUMgYnVzIHN0aWxsIGdyYW50ZWQgYWZ0ZXIgcmVsZWFzZVxcXFxuXFxcIik7XFxuK31cXG4rXFxuKy8qIEFjcXVpcmUgdGhlIHNoYXJlZCBJMkMgYnVzIGZyb20gdGhlIE1pY3JvQmxhemUgZmlybXdhcmUuICBSZXR1cm5zIHdpdGggbm9cXG4rICogcmVxdWVzdCBvdXRzdGFuZGluZyBvbiBmYWlsdXJlLCBzbyB0aGUgZmlybXdhcmUgaXMgbmV2ZXIgbGVmdCBncmFudGluZyBhXFxuKyAqIHNlZ21lbnQgdG8gYSBob3N0IHRoYXQgaGFzIGdpdmVuIHVwIHdhaXRpbmcgZm9yIGl0LlxcbisgKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX21ibGF6ZV9hY3F1aXJlKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghYnAtXFx1MDAzZXBwc19zZWxlY3QpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0LyogRHJvcCBhIHJlcXVlc3QgbGVmdCBieSBhIGNhbGxlciB0aGF0IGRpZWQgbWlkLXNlcXVlbmNlOyBjcGxkX2xvY2tcXG4rXFx0ICoga2VlcHMgbGl2ZSBvbmVzIG91dC4gIFRoZSByZWFkIGJhY2sgb25seSBmbHVzaGVzIHRoZSBwb3N0ZWQgd3JpdGUuXFxuK1xcdCAqL1xcbitcXHRpb3dyaXRlMzIoMCwgXFx1MDAyNmJwLVxcdTAwM2VwcHNfc2VsZWN0LVxcdTAwM2VpMmNfYnVzX2N0cmwpO1xcbitcXHRpb3JlYWQzMihcXHUwMDI2YnAtXFx1MDAzZXBwc19zZWxlY3QtXFx1MDAzZWkyY19idXNfY3RybCk7XFxuK1xcbitcXHRpb3dyaXRlMzIoTUJMQVpFX1JFUVVFU1QsIFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1CTEFaRV9SRVRSSUVTOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICsgMTAwMCk7XFxuK1xcdFxcdHZhbCA9IGlvcmVhZDMyKFxcdTAwMjZicC1cXHUwMDNlcHBzX3NlbGVjdC1cXHUwMDNlaTJjX2J1c19jdHJsKTtcXG4rXFx0XFx0aWYgKHZhbCA9PSBNQkxBWkVfR1JBTlRFRClcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApO1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rLyogUm91dGUgdGhlIGhvc3QgY29udHJvbGxlciBiYWNrIHRvIHRoZSBFRVBST01zIGFuZCByZWxlYXNlIHRoZSBhZGFwdGVyLlxcbisgKiBTYWZlIGFmdGVyIGEgZmFpbGVkIGNsYWltOiBpdCBhbHNvIGNsZWFycyBhIHJlcXVlc3QgdGhhdCB3YXMgbmV2ZXIgZ3JhbnRlZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGFkdmFfeDFfYnVzX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLVxcdTAwM2VjcGxkX2FkYXA7XFxuK1xcbitcXHRpZiAoIWFkYXApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGFkdmFfeDFfbWJsYXplX3JlbGVhc2UoYnApO1xcbitcXHRicC1cXHUwMDNlY3BsZF9hZGFwID0gTlVMTDtcXG4rXFx0a2ZyZWUoYnAtXFx1MDAzZWNwbGRfYnVmKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfYnVmID0gTlVMTDtcXG4rXFx0aTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcXG4rXFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHJldHVybiAhIWkyY192ZXJpZnlfYWRhcHRlcihkZXYpO1xcbit9XFxuK1xcbisvKlxcbisgKiBDYWNoZSB0aGUgYWRhcHRlciB0aGUgQ1BMRCBoYW5ncyBvZmYuICBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKCkgbWlzc2VzXFxuKyAqIGl0IHdoZW4gdGhlIGkyYyBjb250cm9sbGVyIGRyaXZlciBpcyBhbHJlYWR5IGxvYWRlZDogdGhlIGFkYXB0ZXIgaXMgdGhlblxcbisgKiBhZGRlZCBmcm9tIGluc2lkZSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoKSwgYmVmb3JlIGJwLVxcdTAwM2VpMmNfY3RybCBpcyBzZXQuXFxuKyAqIE9ubHkgZGlyZWN0IGNoaWxkcmVuIGFyZSBzZWFyY2hlZCwgc28gYSBtdXggYWRhcHRlciBjYW5ub3QgbWF0Y2guXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhZHZhX3gxX2NhY2hlX2kyY19hZGFwKHN0cnVjdCBwdHBfb2NwICpicClcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpjaGlsZDtcXG4rXFxuK1xcdGlmICghYnAtXFx1MDAzZWhhc19jcGxkIHx8ICFicC1cXHUwMDNlaTJjX2N0cmwgfHxcXG4rXFx0ICAgIFJFQURfT05DRShicC1cXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Y2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2YnAtXFx1MDAzZWkyY19jdHJsLVxcdTAwM2VkZXYsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgYWR2YV94MV9pMmNfYWRhcF9tYXRjaCk7XFxuK1xcdGlmICghY2hpbGQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCktXFx1MDAzZW5yKTtcXG4rXFx0cHV0X2RldmljZShjaGlsZCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENsYWltIHRoZSBUTUMgYnVzLiAgVGhlIGFkYXB0ZXIgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgaGFuZHNoYWtlIHRvIGtlZXBcXG4rICogdGhlIEVFUFJPTSwgbnZtZW0gYW5kIGF0MjQgcGF0aHMgb2ZmIHRoZSBjb250cm9sbGVyIHdoaWxlIGl0IGlzIHJvdXRlZFxcbisgKiBhd2F5IGZyb20gdGhlIEVFUFJPTXM7IGFuIEVFUFJPTSByZWFkIGJsb2NrcyB1bnRpbCB0aGUgY2xhaW0gaXMgZHJvcHBlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9idXNfY2xhaW0oc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0YWRhcCA9IGkyY19nZXRfYWRhcHRlcihSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcXG4rXFx0aWYgKCFhZGFwKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdC8qIFRoZSBudW1iZXIgaXMgZnJlZWQgYmVmb3JlIHRoZSBub3RpZmllciBjbGVhcnMgaXQsIHNvIGl0IGNhblxcbitcXHQgKiBhbHJlYWR5IGJlIGFub3RoZXIgYWRhcHRlcidzLiAgQ2hlY2sgdGhpcyBpcyBzdGlsbCBvdXJzLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFicC1cXHUwMDNlaTJjX2N0cmwgfHwgYWRhcC1cXHUwMDNlZGV2LnBhcmVudCAhPSBcXHUwMDI2YnAtXFx1MDAzZWkyY19jdHJsLVxcdTAwM2VkZXYpIHtcXG4rXFx0XFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0LyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGFuIHVwbG9hZFxcbitcXHQgKiBob2xkcyB0aGUgY2xhaW0gZm9yIHRoZSB3aG9sZSBpbWFnZS5cXG4rXFx0ICovXFxuK1xcdGJwLVxcdTAwM2VjcGxkX2J1ZiA9IGt6YWxsb2MoMiAqIEFEVkFfQ1BMRF9YRkVSX01BWCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghYnAtXFx1MDAzZWNwbGRfYnVmKSB7XFxuK1xcdFxcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGkyY19sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xcbitcXHRicC1cXHUwMDNlY3BsZF9hZGFwID0gYWRhcDtcXG4rXFxuK1xcdHJldCA9IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoYnApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIFNlbGVjdCBhIG11eCBjaGFubmVsLCBvciBkZXNlbGVjdCBhbGwgd2l0aCBjaCBcXHUwMDNjIDAgLSB0aGUgcG93ZXItb24gc3RhdGUuXFxuKyAqIFRoZSBtdXggaXMgb24gdGhlIFRNQyBidXMsIHNvIHdoYXQgaXQgaXMgbGVmdCBzZXQgdG8gbmV2ZXIgYWZmZWN0cyB0aGVcXG4rICogRUVQUk9NIHBhdGhzLlxcbisgKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX211eF9zZWxlY3Qoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgY2gpXFxuK3tcXG4rXFx0dTggdmFsID0gKGNoIFxcdTAwM2U9IDApID8gQklUKGNoKSA6IDA7XFxuK1xcbitcXHRyZXR1cm4gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9NVVhfQUREUiwgdmFsLCBOVUxMLCAwLCBOVUxMLCAwKTtcXG4rfVxcbitcXG4rLypcXG4rICogQXJndW1lbnQgYnl0ZXMgdGhhdCBmb2xsb3cgYW4gSVNDIG9wY29kZS4gIFJldHVybnMgTlVMTCB3aXRoIEBuYXJncyBzZXRcXG4rICogd2hlbiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgemVybzogYWR2YV94MV9pMmNfeGZlcigpIHplcm9lcyB0aGUgYnVmZmVyLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHU4ICphZHZhX3gxX2NwbGRfYXJncyh1OCBjbWQsIHU4ICpuYXJncylcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgdTggZW5fY2ZnX3RwW10gPSB7IDB4MDgsIDB4MDAgfTtcXG4rXFx0LyogY2ZnIHNlY3RvciBvbmx5ICovXFxuK1xcdHN0YXRpYyBjb25zdCB1OCBlcmFzZV9jZmdbXSA9IHsgMHgwNCwgMHgwMCwgMHgwMCB9O1xcbitcXG4rXFx0c3dpdGNoIChjbWQpIHtcXG4rXFx0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XFxuK1xcdFxcdCpuYXJncyA9IHNpemVvZihlbl9jZmdfdHApO1xcbitcXHRcXHRyZXR1cm4gZW5fY2ZnX3RwO1xcbitcXHRjYXNlIENQTERfQ01EX0VSQVNFOlxcbitcXHRcXHQqbmFyZ3MgPSBzaXplb2YoZXJhc2VfY2ZnKTtcXG4rXFx0XFx0cmV0dXJuIGVyYXNlX2NmZztcXG4rXFx0Y2FzZSBDUExEX0NNRF9SRVNFVF9BRERSOlxcbitcXHRjYXNlIENQTERfQ01EX1NFVF9ET05FOlxcbitcXHRcXHQqbmFyZ3MgPSAzO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0Y2FzZSBDUExEX0NNRF9ESVNfQ0ZHOlxcbitcXHRjYXNlIENQTERfQ01EX1JFRlJFU0g6XFxuK1xcdFxcdCpuYXJncyA9IDI7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQqbmFyZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBTZW5kIGFuIElTQyBjb21tYW5kIHdpdGggdGhlIGZpeGVkIGFyZ3VtZW50cyB0aGF0IGJlbG9uZyB0byBpdC4gKi9cXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXFxuK3tcXG4rXFx0Y29uc3QgdTggKmFyZ3M7XFxuK1xcdHU4IG5hcmdzO1xcbitcXG4rXFx0YXJncyA9IGFkdmFfeDFfY3BsZF9hcmdzKGNtZCwgXFx1MDAyNm5hcmdzKTtcXG4rXFxuK1xcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgY21kLCBhcmdzLCBuYXJncywgTlVMTCwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFNlbmQgYSA0LWJ5dGUgY29tbWFuZCBhbmQgcmVhZCBiYWNrIHdpdGhvdXQgYW4gaW50ZXJtZWRpYXRlIFNUT1A6IHR3b1xcbisgKiBtZXNzYWdlcyBpbiBvbmUgdHJhbnNmZXIgaXMgdGhlIExhdHRpY2Ugd3JpdGUgLVxcdTAwM2UgcmVwZWF0ZWQgU1RBUlQgLVxcdTAwM2UgcmVhZCxcXG4rICogc28gbm8gcHJvdG9jb2wtbWFuZ2xpbmcgZmxhZyBpcyBuZWVkZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChzdHJ1Y3QgcHRwX29jcCAqYnAsXFxuK1xcdFxcdFxcdFxcdCB1MzIgY21kX2JlLCB1OCAqb3V0LCB1OCBvdXRfbGVuKVxcbit7XFxuK1xcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xcbitcXG4rXFx0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgXFx1MDAyNmNtZCwgNCwgb3V0LCBvdXRfbGVuKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoc3RydWN0IHB0cF9vY3AgKmJwLCB1MzIgKnN0YXR1cylcXG4re1xcbitcXHR1OCBidWZbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfU1RBVFVTLCBidWYsIDQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQqc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGJ1Zik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuXFxuKyAqIFRoZSBkZWFkbGluZSBpcyBvbiB3YWxsIHRpbWUsIHNvIHRoZSBJMkMgdHJhbnNhY3Rpb25zIGNvdW50IGFnYWluc3QgaXQsXFxuKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHJlYWQgb25jZSBtb3JlIGFmdGVyIGl0IGV4cGlyZXMgYmVmb3JlIGdpdmluZyB1cC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoc3RydWN0IHB0cF9vY3AgKmJwLCB1bnNpZ25lZCBpbnQgbWF4X21zKVxcbit7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHRpbnQgZXJyID0gMCwgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXFxuK1xcdFxcdFxcdFxcdGVyciB8fCAoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxcbitcXHRcXHRcXHRcXHQhKHN0YXR1cyBcXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxcbitcXHRcXHRcXHRcXHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRicCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIEtlZXAgdGhlIHRyYW5zcG9ydCBlcnJubyBzbyBpdCByZWFjaGVzIHVzZXJzcGFjZSBhcy1pczsgLUVJTyBpc1xcbitcXHQgKiByZXNlcnZlZCBmb3IgdGhlIENQTEQgaXRzZWxmIHJlcG9ydGluZyBGQUlMRUQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBXYWl0IGZvciBCVVNZIHRvIGNsZWFyLCBpZ25vcmluZyBhIHBlbmRpbmcgY2FuY2VsLiAgQW4gSVNDIGNvbW1hbmQgaXNzdWVkXFxuKyAqIHdoaWxlIHRoZSBwYXJ0IGlzIHN0aWxsIGVyYXNpbmcgb3IgcHJvZ3JhbW1pbmcgbWF5IG5vdCBsYXRjaCwgc28gYW4gYWJvcnRcXG4rICogaGFzIHRvIHdhaXQgdGhlIG9wZXJhdGlvbiBvdXQgYmVmb3JlIGl0IGNhbiBsZWF2ZSBjb25maWd1cmF0aW9uIG1vZGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF93YWl0X2lkbGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1bnNpZ25lZCBpbnQgbWF4X21zKVxcbit7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHRpbnQgZXJyID0gMCwgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXFxuK1xcdFxcdFxcdFxcdGVyciB8fCAhKHN0YXR1cyBcXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxcbitcXHRcXHRcXHRcXHRDUExEX1BPTExfVVMsIG1heF9tcyAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRicCwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbisvKiBMZWF2ZSB0cmFuc3BhcmVudCBjb25maWd1cmF0aW9uIG1vZGUuICBjcGxkX2luX2NvbmZpZ19tb2RlIHN0YXlzIHNldCB3aGVuXFxuKyAqIERJU19DRkcgZG9lcyBub3QgZ2V0IHRocm91Z2gsIHNvIGEgbGF0ZXIgY2xlYW51cCgpIHRyaWVzIGFnYWluIHJhdGhlciB0aGFuXFxuKyAqIHJlY29yZGluZyBhbiBleGl0IHRoYXQgbmV2ZXIgaGFwcGVuZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBhZHZhX3gxX2NwbGRfZXhpdF9jb25maWcoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWJwLVxcdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhZHZhX3gxX2NwbGRfd2FpdF9pZGxlKGJwLCBDUExEX0VSQVNFX01TKTtcXG4rXFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGRldl93YXJuKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcIkNQTEQgbGVmdCBpbiBjb25maWd1cmF0aW9uIG1vZGU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGJwLVxcdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlYWQgdGhlIExhdHRpY2UgZGV2aWNlIElEIGFuZCB0aGUgaW1hZ2UgVVNFUkNPREUgdW5kZXIgb25lIGJ1cyBjbGFpbS5cXG4rICogRG9uZSBvbmNlLCBvZmYgdGhlIHVucHJpdmlsZWdlZCBkZXZsaW5rIHBhdGgsIHdoaWNoIHJlcG9ydHMgdGhlIGNhY2hlZFxcbisgKiB2YWx1ZXMuICAtRUJVU1kgbWVhbnMgY3BsZF9sb2NrIGlzIGhlbGQsIHNvIHRoZSBjYWxsZXIgY2FuIHJldHJ5IHJhdGhlclxcbisgKiB0aGFuIHdhaXQgYmVoaW5kIGEgbG9uZyBDUExEIG9wZXJhdGlvbi5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfaWQoc3RydWN0IHB0cF9vY3AgKmJwKVxcbit7XFxuK1xcdHUzMiBpZCwgdXNlcmNvZGU7XFxuK1xcdHU4IGRhdGFbNF07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIW11dGV4X3RyeWxvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0cmV0ID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZWxlYXNlO1xcbitcXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfSUQsIGRhdGEsIDQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGRlc2VsZWN0O1xcbitcXHRpZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcXG4rXFxuK1xcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSwgZGF0YSwgNCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcdHVzZXJjb2RlID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEpO1xcbitcXG4rXFx0LyogY3BsZF9pZCBpcyB0aGUgdmFsaWRpdHkgZmxhZyBmb3IgYm90aCwgc28gcHVibGlzaCBpdCBsYXN0LiAqL1xcbitcXHRXUklURV9PTkNFKGJwLVxcdTAwM2VjcGxkX3VzZXJjb2RlLCB1c2VyY29kZSk7XFxuK1xcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaWQsIGlkKTtcXG4rZGVzZWxlY3Q6XFxuK1xcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xcbityZWxlYXNlOlxcbitcXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcXG4rb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZGJnKFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiQ1BMRCBkZXZpY2UgSUQgdW5hdmFpbGFibGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi9cXG4rc3RhdGljIHNzaXplX3RcXG4rY3BsZF9zdGF0dXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHQgY2hhciAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfb2NwICpicCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRpbnQgY291bnQgPSAwO1xcbitcXHR1MzIgc3QgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogQSBDUExEIG9wZXJhdGlvbiBjYW4gaG9sZCBjcGxkX2xvY2sgYSBsb25nIHRpbWU7IHN0YXkga2lsbGFibGUuICovXFxuK1xcdHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhZHZhX3gxX2J1c19jbGFpbShicCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlbGVhc2U7XFxuK1xcdHJldCA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KTtcXG4rXFx0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XFxuK3JlbGVhc2U6XFxuK1xcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xcbitvdXQ6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnAtXFx1MDAzZWNwbGRfbG9jayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBGbGFnczogdGhlIG5hbWVzIG9mIHRoZSBiaXRzIHRoYXQgYXJlIHNldCwgbm90aGluZyB3aGVuIG5vbmUgaXMsXFxuK1xcdCAqIHJhdGhlciB0aGFuIGEgdmFsdWUgcGVyIGJpdCBpbiBvbmUgZmlsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChzdCBcXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpXFxuK1xcdFxcdGNvdW50ICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgXFxcImRvbmVcXFwiKTtcXG4rXFx0aWYgKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSlcXG4rXFx0XFx0Y291bnQgKz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcXFwiJXNidXN5XFxcIiwgY291bnQgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIik7XFxuK1xcdGlmIChzdCBcXHUwMDI2IENQTERfU1RBVFVTX0ZBSUxFRClcXG4rXFx0XFx0Y291bnQgKz0gc3lzZnNfZW1pdF9hdChidWYsIGNvdW50LCBcXFwiJXNmYWlsZWRcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY291bnQgPyBcXFwiIFxcXCIgOiBcXFwiXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gY291bnQgKyBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFxcXCJcXFxcblxcXCIpO1xcbit9XFxuK3N0YXRpYyBERVZJQ0VfQVRUUl9BRE1JTl9STyhjcGxkX3N0YXR1cyk7XFxuK1xcbisvKlxcbisgKiBQcm9ncmFtIHRoZSBDUExEIGNvbmZpZ3VyYXRpb24gZmxhc2ggZnJvbSBAZncgYW5kIGFjdGl2YXRlIGl0LiAgU2VsZWN0ZWRcXG4rICogYnkgdGhlIFxcXCJmdy5jcGxkXFxcIiBmbGFzaCBjb21wb25lbnQ7IHRoZSBTUEkgZmxhc2gga2VlcHMgdGhlIGRlZmF1bHQgcGF0aC5cXG4rICogUnVucyB1bmRlciBjcGxkX2xvY2sgd2l0aCB0aGUgaTJjIGFkYXB0ZXIgbG9jayBoZWxkLCBzbyBhbiBFRVBST00gcmVhZFxcbisgKiBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXFxuKyAqL1xcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9mbGFzaChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbitcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c2l6ZV90IG9mZnNldDtcXG4rXFx0aW50IGVycjtcXG4rXFx0dTMyIHN0O1xcbitcXG4rXFx0aWYgKCFmdy1cXHUwMDNlc2l6ZSB8fCBmdy1cXHUwMDNlc2l6ZSAlIENQTERfUEFHRV9TSVpFKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJpbWFnZSBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIG9mIDE2LWJ5dGUgcGFnZXNcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0ZXJyID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0ZXJyID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byByZWxlYXNlO1xcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBFTl9DRkdfVFAsIG5vdCBhZnRlcjogdGhlIENQTEQgbWF5IGhhdmUgZW50ZXJlZCBjb25maWdcXG4rXFx0ICogbW9kZSBldmVuIGlmIHRoZSB3cml0ZSBlcnJvcnMgb3IgdGhlIHdhaXQgdGltZXMgb3V0LCBhbmQgb25seSB0aGlzXFxuK1xcdCAqIG1ha2VzIHRoZSBleGl0IHBhdGggc2VuZCBESVNfQ0ZHLiAgQSBzdHJheSBESVNfQ0ZHIGlzIGhhcm1sZXNzO1xcbitcXHQgKiBsZWF2aW5nIGNvbmZpZyBtb2RlIGVuYWJsZWQgaXMgbm90LlxcbitcXHQgKi9cXG4rXFx0YnAtXFx1MDAzZWNwbGRfaW5fY29uZmlnX21vZGUgPSB0cnVlO1xcbitcXG4rXFx0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FTl9DRkdfVFApO1xcbitcXHRpZiAoIWVycilcXG4rXFx0XFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGV4aXRfY29uZmlnO1xcbitcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLCBcXFwiRXJhc2luZ1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VSQVNFKTtcXG4rXFx0aWYgKCFlcnIpXFxuK1xcdFxcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCBDUExEX0VSQVNFX01TKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2NvbmZpZztcXG4rXFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9jb25maWc7XFxuK1xcbitcXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGZ3LVxcdTAwM2VzaXplOyBvZmZzZXQgKz0gQ1BMRF9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0dTggYXJnc1szICsgQ1BMRF9QQUdFX1NJWkVdID0geyAweDAwLCAweDAwLCAweDAxIH07XFxuK1xcbitcXHRcXHRtZW1jcHkoXFx1MDAyNmFyZ3NbM10sIGZ3LVxcdTAwM2VkYXRhICsgb2Zmc2V0LCBDUExEX1BBR0VfU0laRSk7XFxuK1xcdFxcdGVyciA9IGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCBDUExEX0NNRF9XUklURV9QQUdFLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKTtcXG4rXFx0XFx0aWYgKCFlcnIpXFxuK1xcdFxcdFxcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDApO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGV4aXRfY29uZmlnO1xcbitcXG4rXFx0XFx0aWYgKCEob2Zmc2V0ICUgKENQTERfUEFHRV9TSVpFICogNjQpKSlcXG4rXFx0XFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkZXZsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiUHJvZ3JhbW1pbmdcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBvZmZzZXQsIGZ3LVxcdTAwM2VzaXplKTtcXG4rXFx0fVxcbitcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJQcm9ncmFtbWluZ1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGZ3LVxcdTAwM2VzaXplLCBmdy1cXHUwMDNlc2l6ZSk7XFxuK1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX1NFVF9ET05FKTtcXG4rXFx0aWYgKCFlcnIpXFxuK1xcdFxcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2NvbmZpZztcXG4rXFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhicCwgXFx1MDAyNnN0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBleGl0X2NvbmZpZztcXG4rXFx0aWYgKCEoc3QgXFx1MDAyNiBDUExEX1NUQVRVU19ET05FKSkge1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIGV4aXRfY29uZmlnO1xcbitcXHR9XFxuK1xcbitcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJBY3RpdmF0aW5nXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQURWQV9DUExEX0NPTVBPTkVOVCwgMCwgMCk7XFxuK1xcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVGUkVTSCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXhpdF9jb25maWc7XFxuK1xcbitcXHQvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gdGhlIGV4aXRcXG4rXFx0ICogcGF0aCBtdXN0IG5vdCBzZW5kIERJU19DRkcgYWZ0ZXJ3YXJkcyBldmVuIGlmIGEgY2hlY2sgYmVsb3cgZmFpbHMuXFxuK1xcdCAqL1xcbitcXHRicC1cXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IGZhbHNlO1xcbitcXG4rXFx0LyogVGhlIG5ldyBpbWFnZSBpcyBhbHJlYWR5IHJ1bm5pbmcsIHNvIGEgc2VnbWVudCB0aGF0IGlzIG5vdCBiYWNrXFxuK1xcdCAqIHlldCBtdXN0IG5vdCBiZSByZXBvcnRlZCBhcyBhIGZhaWxlZCB1cGRhdGU6IHJldHJ5IHRoZSByZXNlbGVjdFxcbitcXHQgKiByYXRoZXIgdGhhbiBzYW1wbGluZyB0aGUgbXV4IG9uY2UgYXQgYSBmaXhlZCBkZWxheS5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcCgxNTAwKTtcXG4rXFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9tdXhfc2VsZWN0LCBlcnIsICFlcnIsIENQTERfUE9MTF9VUyxcXG4rXFx0XFx0XFx0XFx0MzAwMCAqIFVTRUNfUEVSX01TRUMsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHRicCwgQURWQV9NVVhfQ0hBTk5FTCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShicCwgMzAwMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcbitcXHQvKiBSZXF1aXJlIERPTkUgc2V0LCBub3QgYnVzeSBhbmQgbm8gZXJyb3IgY29kZSwgYXMgbWFjaHhvMi1zcGkuYyBkb2VzXFxuK1xcdCAqIGFmdGVyIGEgcmVmcmVzaDogd2l0aG91dCBpdCBhIENSQyBvciBwcmVhbWJsZSBlcnJvciByZWFkcyBiYWNrIGFzIGFcXG4rXFx0ICogc3VjY2Vzc2Z1bCB1cGRhdGUuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFxcdTAwMjZzdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZGVzZWxlY3Q7XFxuK1xcdGlmICghKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkgfHwgKHN0IFxcdTAwMjYgQ1BMRF9TVEFUVVNfQlVTWSkgfHxcXG4rXFx0ICAgIChzdCBcXHUwMDI2IENQTERfU1RBVFVTX0VSUikpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2YnAtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkNQTEQgcmVmcmVzaCBsZWZ0IHN0YXR1cyAweCUwOHhcXFxcblxcXCIsIHN0KTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkNQTEQgZGlkIG5vdCBjb21lIGJhY2sgY29uZmlndXJlZFxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIGRlc2VsZWN0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgaW1hZ2Ugb24gdGhlIHBhcnQgY2hhbmdlZCwgc28gdGhlIGNhY2hlZCBVU0VSQ09ERSBoYXMgdG9vLiAqL1xcbitcXHRXUklURV9PTkNFKGJwLVxcdTAwM2VjcGxkX2lkLCAwKTtcXG4rXFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pZF90cmllZCwgZmFsc2UpO1xcbitcXHRicC1cXHUwMDNlY3BsZF9pZF9hdHRlbXB0cyA9IDA7XFxuK1xcbitleGl0X2NvbmZpZzpcXG4rXFx0YWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKGJwKTtcXG4rZGVzZWxlY3Q6XFxuK1xcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xcbityZWxlYXNlOlxcbitcXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwLVxcdTAwM2VjcGxkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdmFfdGltZWNhcmRfYXR0cnNbXSA9IHtcXG4gXFx0XFx1MDAyNmRldl9hdHRyX3NlcmlhbG51bS5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfZ25zc19zeW5jLmF0dHIsXFxuQEAgLTQyNzQsNiArNDk5MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsXFxuIFxcdFxcdTAwMjZkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0cixcXG4rXFx0XFx1MDAyNmRldl9hdHRyX2NwbGRfc3RhdHVzLmF0dHIsXFxuIFxcdE5VTEwsXFxuIH07XFxuIFxcbkBAIC00OTA0LDYgKzU2MjEsNyBAQCBwdHBfb2NwX2RldGFjaChzdHJ1Y3QgcHRwX29jcCAqYnApXFxuIFxcdFxcdGNsa19od191bnJlZ2lzdGVyX2ZpeGVkX3JhdGUoYnAtXFx1MDAzZWkyY19jbGspO1xcbiBcXHRpZiAoYnAtXFx1MDAzZW5faXJxcylcXG4gXFx0XFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtXFx1MDAzZXBkZXYpO1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4gXFx0ZGV2aWNlX3VucmVnaXN0ZXIoXFx1MDAyNmJwLVxcdTAwM2VkZXYpO1xcbiB9XFxuIFxcbkBAIC01MDUyLDYgKzU3NzAsMjAgQEAgcHRwX29jcF9zeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gXFx0YnAtXFx1MDAzZXN5bmMgPSBzeW5jO1xcbiBcXG4rXFx0LyogVGhlIGFkYXB0ZXIgY2FuIGFwcGVhciBhZnRlciBwcm9iZSwgc28gcmVhZCB0aGUgSUQgZnJvbSBoZXJlIG9uY2VcXG4rXFx0ICogaXQgaGFzLiAgQSBjbGFpbSBjYW4gZmFpbCB0cmFuc2llbnRseSAtIHRoZSBmaXJtd2FyZSBtYXkgbm90IGdyYW50XFxuK1xcdCAqIHRoZSBzZWdtZW50IHN0cmFpZ2h0IGFmdGVyIHBvd2VyLXVwIC0gc28gcmV0cnkgYSBib3VuZGVkIG51bWJlciBvZlxcbitcXHQgKiB0aW1lcy4gIC1FQlVTWSBtZWFucyBjcGxkX2xvY2sgaXMgaGVsZCBhbmQgZG9lcyBub3QgY291bnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoYnAtXFx1MDAzZWhhc19jcGxkIFxcdTAwMjZcXHUwMDI2ICFSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfaWRfdHJpZWQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBSRUFEX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aW50IGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX2lkKGJwKTtcXG4rXFxuK1xcdFxcdGlmIChlcnIgIT0gLUVCVVNZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWVyciB8fCArK2JwLVxcdTAwM2VjcGxkX2lkX2F0dGVtcHRzIFxcdTAwM2U9IENQTERfSURfTUFYX0FUVEVNUFRTKSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pZF90cmllZCwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuIFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcXHUwMDI2YnAtXFx1MDAzZXN5bmNfd29yaywgSFopO1xcbiB9XFxuIFxcbkBAIC01MDgwLDYgKzU4MTIsMTQgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dF9kaXNhYmxlO1xcbiBcXG4rXFx0LyogQmVmb3JlIHRoZSBmaXJzdCBlcnJvciBwYXRoIHRoYXQgY2FsbHMgcHRwX29jcF9kZXRhY2goKSwgc29cXG4rXFx0ICogbXV0ZXhfZGVzdHJveSgpIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXgsIGFuZCBiZWZvcmVcXG4rXFx0ICogcHRwX29jcF9yZWdpc3Rlcl9yZXNvdXJjZXMoKSwgc28gdGhpcyBzZW50aW5lbCBjYW5ub3Qgb3ZlcndyaXRlIGFuXFxuK1xcdCAqIGFkYXB0ZXIgbnVtYmVyIHRoZSBpMmMgbm90aWZpZXIgc3RvcmVzIGR1cmluZyByZWdpc3RyYXRpb24uXFxuK1xcdCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZicC1cXHUwMDNlY3BsZF9sb2NrKTtcXG4rXFx0YnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIgPSAtMTtcXG4rXFxuIFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZicC1cXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XFxuIFxcbiBcXHQvKiBjb21wYXQgbW9kZS5cXG5AQCAtNTA5OSw2ICs1ODM5LDggQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdGFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoYnApO1xcbitcXG4gXFx0YnAtXFx1MDAzZXB0cCA9IHB0cF9jbG9ja19yZWdpc3RlcihcXHUwMDI2YnAtXFx1MDAzZXB0cF9pbmZvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKElTX0VSUihicC1cXHUwMDNlcHRwKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKGJwLVxcdTAwM2VwdHApO1xcbkBAIC01MTE5LDEyICs1ODYxLDEyIEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gXFx0aWYgKElTX0VSUihicC1cXHUwMDNlZHBsbCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihicC1cXHUwMDNlZHBsbCk7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImRwbGxfZGV2aWNlX2FsbG9jIGZhaWxlZFxcXFxuXFxcIik7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF9kZXZsaW5rO1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXFx1MDAyNmRwbGxfb3BzLCBicCk7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF9kcGxsX3B1dDtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBPQ1BfU01BX05VTTsgaSsrKSB7XFxuIFxcdFxcdGJwLVxcdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLFxcbkBAIC01MTUwLDcgKzU4OTIsMTYgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiBcXHRcXHRkcGxsX3Bpbl91bnJlZ2lzdGVyKGJwLVxcdTAwM2VkcGxsLCBicC1cXHUwMDNlc21hW2ldLmRwbGxfcGluLCBcXHUwMDI2ZHBsbF9waW5zX29wcywgXFx1MDAyNmJwLVxcdTAwM2VzbWFbaV0pO1xcbiBcXHRcXHRkcGxsX3Bpbl9wdXQoYnAtXFx1MDAzZXNtYVtpXS5kcGxsX3BpbiwgXFx1MDAyNmJwLVxcdTAwM2VzbWFbaV0udHJhY2tlcik7XFxuIFxcdH1cXG4rXFx0LyogZHBsbF9kZXZpY2VfcmVnaXN0ZXIoKSB0YWtlcyBhIHNlY29uZCByZWZlcmVuY2UgYW5kIHN0b3JlcyBicDsgb25seVxcbitcXHQgKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyKCkgZHJvcHMgaXQuICBXaXRob3V0IHRoaXMgdGhlIGRldmljZSBzdGF5c1xcbitcXHQgKiB2aXNpYmxlIHdpdGggYSBwcml2IHBvaW50ZXIgaW50byBzdG9yYWdlIGRldmxpbmtfZnJlZSgpIHdpbGwgcmVsZWFzZS5cXG4rXFx0ICovXFxuK1xcdGRwbGxfZGV2aWNlX3VucmVnaXN0ZXIoYnAtXFx1MDAzZWRwbGwsIFxcdTAwMjZkcGxsX29wcywgYnApO1xcbitvdXRfZHBsbF9wdXQ6XFxuIFxcdGRwbGxfZGV2aWNlX3B1dChicC1cXHUwMDNlZHBsbCwgXFx1MDAyNmJwLVxcdTAwM2V0cmFja2VyKTtcXG4rb3V0X2Rldmxpbms6XFxuK1xcdC8qIGRldGFjaCgpIGRlc3Ryb3lzIGNwbGRfbG9jazsgbm8gZGV2bGluayBvcCBtYXkgc3RpbGwgcmVhY2ggaXQgKi9cXG4rXFx0ZGV2bGlua191bnJlZ2lzdGVyKGRldmxpbmspO1xcbiBvdXQ6XFxuIFxcdHB0cF9vY3BfZGV0YWNoKGJwKTtcXG4gb3V0X2Rpc2FibGU6XFxuQEAgLTUxOTYsNiArNTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4gXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYsICpjaGlsZCA9IGRhdGE7XFxuK1xcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcXG4gXFx0c3RydWN0IHB0cF9vY3AgKmJwO1xcbiBcXHRib29sIGFkZDtcXG4gXFxuQEAgLTUyMTksMTEgKzU5NzEsMjEgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbiBcXG4gZm91bmQ6XFxuIFxcdGJwID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuLVxcdGlmIChhZGQpXFxuK1xcdGFkYXAgPSBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpO1xcbitcXHRpZiAoYWRkKSB7XFxuIFxcdFxcdHB0cF9vY3Bfc3ltbGluayhicCwgY2hpbGQsIFxcXCJpMmNcXFwiKTtcXG4tXFx0ZWxzZVxcbitcXHRcXHQvKiBPbmx5IHRoZSBjYXJkJ3Mgb3duIGNvbnRyb2xsZXI6IGEgbXV4IGNoaWxkIGFkZGVkIG9uIGl0XFxuK1xcdFxcdCAqIHJlYWNoZXMgcHRwX29jcCB0aHJvdWdoIHRoZSBzYW1lIHdhbGsuICBOdW1iZXJzIGFyZVxcbitcXHRcXHQgKiByZWN5Y2xlZCwgc28gdGhlIGNsYWltIHJlLWNoZWNrcyB0aGUgcGFyZW50IGl0c2VsZi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChicC1cXHUwMDNlaTJjX2N0cmwgXFx1MDAyNlxcdTAwMjYgYWRhcC1cXHUwMDNlZGV2LnBhcmVudCA9PSBcXHUwMDI2YnAtXFx1MDAzZWkyY19jdHJsLVxcdTAwM2VkZXYpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGFkYXAtXFx1MDAzZW5yKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZGF0ZSBiZWZvcmUgZnJlZSwgYnV0IG9ubHkgZm9yIHRoZSBjYWNoZWQgYWRhcHRlciAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2kyY19hZGFwX25yKSA9PSBhZGFwLVxcdTAwM2VucilcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShicC1cXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgLTEpO1xcbiBcXHRcXHRzeXNmc19yZW1vdmVfbGluayhcXHUwMDI2YnAtXFx1MDAzZWRldi5rb2JqLCBcXFwiaTJjXFxcIik7XFxuLVxcbitcXHR9XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzoyMi4xOTM2MTk2MjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk2OTcwNzIzNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkb2N1bWVudGF0aW9uIGFuZCB0aGUgcHRwX29jcCBkcml2ZXIgKGRyaXZlcnMvcHRwL3B0cF9vY3AuYyksIGFkZGluZyBDUExEIGZsYXNoIGFuZCBzdGF0dXMgc3VwcG9ydCBmb3IgQURWQSBUaW1lQ2FyZCBYMSBkZXZpY2VzLiBUaGlzIGRyaXZlciBiaW5kcyBzcGVjaWZpY2FsbHkgdG8gdmVuZG9yLXNwZWNpZmljIFBDSWUgdGltZWNhcmQgaGFyZHdhcmUgKHN1Y2ggYXMgQURWQSBUaW1lQ2FyZCBYMSwgTWV0YSBUaW1lY2FyZCkgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLiBBcyBzdWNoLCB0aGUgZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczYmVlODgxNjgxYmIzZTU1NDBhNzQ4YjVjZWNlNWJiNDA4YmM3OGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAwNzoyNzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtdGltZWNhcmQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkXG5pbmRleCAzYWU0MWI3NjM0YWM5Li42ZGRjYTQ1MmJjNjMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy10aW1lY2FyZFxuQEAgLTExLDYgKzExLDM0IEBAIENvbnRhY3Q6XHRKb25hdGhhbiBMZW1vbiBcdTAwM2Nqb25hdGhhbi5sZW1vbkBnbWFpbC5jb21cdTAwM2VcbiBEZXNjcmlwdGlvbjpcdFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBOdGggdGltZWNhcmRcbiBcdFx0cmVnaXN0ZXJlZC5cbiBcbitXaGF0Olx0XHQvc3lzL2NsYXNzL3RpbWVjYXJkL29jcE4vY3BsZF9zdGF0dXNcbitEYXRlOlx0XHRKdWx5IDIwMjZcbitDb250YWN0Olx0U2FnaSBNYWltb24gXHUwMDNjbWFpbW9uLnNhZ2lAZ21haWwuY29tXHUwMDNlXG4rRGVzY3JpcHRpb246XHQoUk8sIHJvb3Qgb25seSkgVGhlIGZsYWdzIHNldCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZVxuK1x0XHRUQVAgQ1BMRCwgc3BhY2Ugc2VwYXJhdGVkLCBvciBhbiBlbXB0eSBsaW5lIHdoZW4gbm9uZSBpc1xuK1x0XHRzZXQuICBPbmx5IHByZXNlbnQgb24gQURWQSB4MSBUQVAgYm9hcmRzIChQQ0kgSURcbitcdFx0MHhhZDVhOjB4MDQxMCkuXG4rXG4rXHRcdD09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1x0XHRkb25lICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBmbGFzaCB3YXMgcHJvZ3JhbW1lZFxuK1x0XHRcdCAgICBzdWNjZXNzZnVsbHkgYW5kIGlzIGFjdGl2ZVxuK1x0XHRidXN5ICAgICAgICBhbiBpbnRlcm5hbCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3NcbitcdFx0ZmFpbGVkICAgICAgdGhlIGxhc3QgSVNDIG9wZXJhdGlvbiBmYWlsZWRcbitcdFx0PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rXHRcdEZvciBleGFtcGxlIFwiYnVzeVwiIHdoaWxlIHByb2dyYW1taW5nLCBvciBcImJ1c3kgZmFpbGVkXCIgaWYgYVxuK1x0XHRmYWlsdXJlIGlzIGxhdGNoZWQgd2hpbGUgYW5vdGhlciBvcGVyYXRpb24gcnVucy5cbitcbitcdFx0QSByZWFkIGFyYml0cmF0ZXMgZm9yIHRoZSBzaGFyZWQgSTJDIGJ1cyBhbmQgcmVwcm9ncmFtcyB0aGVcbitcdFx0b24tY2FyZCBtdXgsIHNvIGl0IGlzIHJlc3RyaWN0ZWQgdG8gcm9vdC4gIFRoZSBMYXR0aWNlIGRldmljZVxuK1x0XHRJRCBvZiB0aGUgQ1BMRCBpcyByZWFkIG9uY2UgYnkgdGhlIGRyaXZlciwgc2hvcnRseSBhZnRlclxuK1x0XHRwcm9iZSwgYW5kIHJlcG9ydGVkIGZyb20gdGhhdCBjYWNoZWQgdmFsdWUgYXMgdGhlIGZpeGVkXG4rXHRcdFwiY3BsZC5pZFwiIHZlcnNpb24gYnkgZGV2bGluayBkZXYgaW5mby5cbitcbitcdFx0TmV3IENQTEQgZmlybXdhcmUgaXMgcHJvZ3JhbW1lZCB3aXRoIGRldmxpbmsgZGV2IGZsYXNoLFxuK1x0XHRzZWxlY3RpbmcgdGhlIFwiZncuY3BsZFwiIGNvbXBvbmVudDsgc2VlXG4rXHRcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0LlxuK1xuIFdoYXQ6XHRcdC9zeXMvY2xhc3MvdGltZWNhcmQvb2NwTi9hdmFpbGFibGVfY2xvY2tfc291cmNlc1xuIERhdGU6XHRcdFNlcHRlbWJlciAyMDIxXG4gQ29udGFjdDpcdEpvbmF0aGFuIExlbW9uIFx1MDAzY2pvbmF0aGFuLmxlbW9uQGdtYWlsLmNvbVx1MDAzZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuaW5kZXggZDRhODNmZGNmZjdmZS4uMWFmNzgwYzgxMWVlMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5AQCAtOTksNiArOTksNyBAQCBwYXJhbWV0ZXJzLCBpbmZvIHZlcnNpb25zLCBhbmQgb3RoZXIgZmVhdHVyZXMgaXQgc3VwcG9ydHMuXG4gICAgbmZwXG4gICAgb2N0ZW9udHgyXG4gICAgcHJlc3RlcmFcbisgICBwdHBfb2NwXG4gICAgcWVkXG4gICAgc2ZjXG4gICAgc3RtbWFjXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvcHRwX29jcC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjM3ZTlmMWViZDFhODFcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0XG5AQCAtMCwwICsxLDcwIEBAXG4rLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbis9PT09PT09PT09PT09PT09PT09PT09PT1cbitwdHBfb2NwIGRldmxpbmsgc3VwcG9ydFxuKz09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZSBgYHB0cF9vY3BgYFxuK2RldmljZSBkcml2ZXI6IHRoZSBpbmZvIHZlcnNpb25zIGl0IHJlcG9ydHMgYW5kIGl0cyBmbGFzaCB1cGRhdGUgc3VwcG9ydC5cbitcbitJbmZvIHZlcnNpb25zXG4rPT09PT09PT09PT09PVxuK1xuK1RoZSBgYHB0cF9vY3BgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZFxuKyAgIDp3aWR0aHM6IDUgNSA5MFxuK1xuKyAgICogLSBOYW1lXG4rICAgICAtIFR5cGVcbisgICAgIC0gRGVzY3JpcHRpb25cbisgICAqIC0gYGBmd2BgXG4rICAgICAtIHJ1bm5pbmdcbisgICAgIC0gVmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgcnVubmluZyBvbiB0aGUgY2FyZC4gIFJlcG9ydGVkIGFzIGBgbG9hZGVyYGBcbisgICAgICAgaW5zdGVhZCB3aGVuIHRoZSBjYXJkIGlzIHJ1bm5pbmcgdGhlIGZpcm13YXJlIGxvYWRlci5cbisgICAqIC0gYGBib2FyZC5pZGBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIEJvYXJkIGlkZW50aWZpZXIsIHJlYWQgZnJvbSB0aGUgb24tY2FyZCBFRVBST00uXG4rICAgKiAtIGBgY3BsZC5pZGBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIExhdHRpY2UgZGV2aWNlIElEIChJRENPREUpIG9mIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzIGBgMHglMDh4YGAuXG4rICAgICAgIE9ubHkgcHJlc2VudCBvbiBBRFZBIFRpbWVDYXJkIFgxIGJvYXJkcywgd2hpY2ggYXJlIHRoZSBvbmx5IG9uZXNcbisgICAgICAgY2FycnlpbmcgdGhhdCBDUExELiAgUmVhZGluZyBpdCBjbGFpbXMgdGhlIHNoYXJlZCBJMkMgYnVzIGFuZFxuKyAgICAgICByZXByb2dyYW1zIHRoZSBvbi1jYXJkIG11eCwgc28gdGhlIGRyaXZlciBkb2VzIHRoYXQgb25jZSBmcm9tIGl0c1xuKyAgICAgICBvd24gd29ya2VyIGFuZCByZXBvcnRzIHRoZSBjYWNoZWQgdmFsdWUgaGVyZTsgdGhlIHZlcnNpb24gaXNcbisgICAgICAgb21pdHRlZCB1bnRpbCB0aGF0IHJlYWQgaGFzIHN1Y2NlZWRlZC5cbisgICAqIC0gYGBmdy5jcGxkYGBcbisgICAgIC0gcnVubmluZ1xuKyAgICAgLSBVU0VSQ09ERSBvZiB0aGUgaW1hZ2UgcHJvZ3JhbW1lZCBpbnRvIHRoZSBUQVAgQ1BMRCwgZm9ybWF0dGVkIGFzXG4rICAgICAgIGBgMHglMDh4YGAuICBSZWFkIHRvZ2V0aGVyIHdpdGggYGBjcGxkLmlkYGAgYW5kIHJlcG9ydGVkIHRoZSBzYW1lXG4rICAgICAgIHdheS4gIFRoaXMgaXMgdGhlIGNvbXBvbmVudCBuYW1lIHRvIHBhc3MgdG8gYGBkZXZsaW5rIGRldiBmbGFzaGBgXG4rICAgICAgIHRvIHVwZGF0ZSB0aGUgQ1BMRC5cbitcbitGbGFzaCB1cGRhdGVcbis9PT09PT09PT09PT1cbitcbitUaGUgZHJpdmVyIGltcGxlbWVudHMgYGBkZXZsaW5rIGRldiBmbGFzaGBgIGZvciB0d28gc2VwYXJhdGUgdGFyZ2V0cyxcbitzZWxlY3RlZCB3aXRoIHRoZSBjb21wb25lbnQgbmFtZS5cbitcbisuLiBsaXN0LXRhYmxlOjogRmxhc2ggY29tcG9uZW50c1xuKyAgIDp3aWR0aHM6IDIwIDgwXG4rXG4rICAgKiAtIENvbXBvbmVudFxuKyAgICAgLSBEZXNjcmlwdGlvblxuKyAgICogLSAobm9uZSlcbisgICAgIC0gVGhlIGNhcmQncyBvd24gZmxhc2gsIHdyaXR0ZW4gdGhyb3VnaCB0aGUgU1BJIGNvbnRyb2xsZXIgdGhlIGRyaXZlclxuKyAgICAgICBleHBvc2VzLiAgVGhlIGNhcmQgcnVucyB0aGUgbmV3IGltYWdlIGFmdGVyIGl0cyBuZXh0IHJlc2V0LlxuKyAgICogLSBgYGZ3LmNwbGRgYFxuKyAgICAgLSBUaGUgY29uZmlndXJhdGlvbiBmbGFzaCBvZiB0aGUgVEFQIENQTEQgb24gQURWQSBUaW1lQ2FyZCBYMSBib2FyZHMsXG4rICAgICAgIHByb2dyYW1tZWQgb3ZlciBJMkMgd2l0aCB0aGUgTWFjaFhPMyBpbi1zeXN0ZW0gcHJvZ3JhbW1pbmcgY29tbWFuZHNcbisgICAgICAgYW5kIGFjdGl2YXRlZCB3aXRoIGEgUkVGUkVTSCwgc28gdGhlIG5ldyBpbWFnZSBydW5zIGltbWVkaWF0ZWx5LlxuKyAgICAgICBUaGUgaW1hZ2UgaXMgdGhlIHJhdyBjb25maWd1cmF0aW9uIGJpdHN0cmVhbSwgYSB3aG9sZSBudW1iZXIgb2ZcbisgICAgICAgMTYtYnl0ZSBwYWdlczsgY29udGFpbmVyIGZvcm1hdHMgc3VjaCBhcyBgYC5qZWRgYCBhcmUgcmVqZWN0ZWQuXG4rXG4rUHJvZ3JhbW1pbmcgdGhlIENQTEQgY2xhaW1zIHRoZSBzaGFyZWQgSTJDIGJ1cyBmb3IgdGhlIHdob2xlIGN5Y2xlLCBzb1xuK3JlYWRzIG9mIHRoZSBjYXJkJ3MgRUVQUk9NIGJsb2NrIHVudGlsIGl0IGNvbXBsZXRlcy4gIFByb2dyZXNzIGlzIHJlcG9ydGVkXG4rd2l0aCB0aGUgc3RhbmRhcmQgZGV2bGluayBzdGF0dXMgbm90aWZpY2F0aW9ucy5cbitcbitFeGFtcGxlOjpcbitcbisgICAgJCBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDowMjowMC4wIGZpbGUgYWR2YS1jcGxkLmJpbiBjb21wb25lbnQgZncuY3BsZFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDBlMDRkOTJkMWIwOTguLjExM2YzMTQzNDYxNzcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMDQ3OSw2ICsyMDQ3OSw3IEBAIE9QRU5DT01QVVRFIFBUUCBDTE9DSyBEUklWRVJcbiBNOlx0VmFkaW0gRmVkb3JlbmtvIFx1MDAzY3ZhZGltLmZlZG9yZW5rb0BsaW51eC5kZXZcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4rRjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0XG4gRjpcdGRyaXZlcnMvcHRwL3B0cF9vY3AuY1xuIFxuIE9QRU5DT1JFUyBJMkMgQlVTIERSSVZFUlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuYyBiL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuaW5kZXggM2QyNmVjMWY3YjllYy4uNThiOTBiMmIyODJmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcHRwL3B0cF9vY3AuY1xuKysrIGIvZHJpdmVycy9wdHAvcHRwX29jcC5jXG5AQCAtMjAsMTAgKzIwLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpL2FsdGVyYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdGQvbXRkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMTYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RwbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVUQV9USU1FQ0FSRFx0XHQweDA0MDBcbiBcbkBAIC04NSw2ICs4OSw4IEBAIHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XG4gXHR1OFx0XHRcdFx0c2lnbmFsc19ucjtcbiBcdHU4XHRcdFx0XHRmcmVxX2luX25yO1xuIFx0Y29uc3Qgc3RydWN0IG9jcF9hdHRyX2dyb3VwXHQqYXR0cl9ncm91cHM7XG4rXHQvKiB4MTogVEFQIENQTEQgcHJlc2VudCAqL1xuK1x0Ym9vbFx0XHRcdFx0aGFzX2NwbGQ7XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9DVFJMX0VOQUJMRVx0XHRCSVQoMClcbkBAIC0xNjMsNyArMTY5LDggQEAgc3RydWN0IGdwaW9fcmVnIHtcbiBcdHUzMlx0Z3BpbzE7XG4gXHR1MzJcdF9fcGFkMDtcbiBcdHUzMlx0Z3BpbzI7XG4tXHR1MzJcdF9fcGFkMTtcbitcdC8qIGFkdmFfeDE6IEkyQyBidXMgb3duZXJzaGlwIHJlZ2lzdGVyOyByZXNlcnZlZCBvbiBvdGhlciB2YXJpYW50cyAqL1xuK1x0dTMyXHRpMmNfYnVzX2N0cmw7XG4gfTtcbiBcbiBzdHJ1Y3QgaXJpZ19tYXN0ZXJfcmVnIHtcbkBAIC00MTYsNiArNDIzLDI3IEBAIHN0cnVjdCBwdHBfb2NwIHtcbiBcdGRwbGxfdHJhY2tlciB0cmFja2VyO1xuIFx0aW50IHNpZ25hbHNfbnI7XG4gXHRpbnQgZnJlcV9pbl9ucjtcbitcdC8qIGFkdmFfeDEgQ1BMRCBJMkMgKGludGVybmFsIHVzZSBvbmx5KSAqL1xuK1x0Lyogc2VyaWFsaXNlcyBDUExEIG9wZXJhdGlvbnMgKi9cbitcdHN0cnVjdCBtdXRleFx0XHRjcGxkX2xvY2s7XG4rXHQvKiBJMkMgYWRhcHRlciBucjsgLTEgaWYgYWJzZW50ICovXG4rXHRpbnRcdFx0XHRjcGxkX2kyY19hZGFwX25yO1xuK1x0LyogY2xhaW1lZCBhZGFwdGVyOyB2YWxpZCB1bmRlciBjcGxkX2xvY2sgKi9cbitcdHN0cnVjdCBpMmNfYWRhcHRlclx0KmNwbGRfYWRhcDtcbitcdC8qIHNjcmF0Y2gsIHdyaXRlIGhhbGYgdGhlbiByZWFkIGhhbGY7IHZhbGlkIHVuZGVyIGNwbGRfbG9jayAqL1xuK1x0dThcdFx0XHQqY3BsZF9idWY7XG4rXHQvKiBMYXR0aWNlIGRldmljZSBJRDsgMCBpZiB1bnJlYWQgKi9cbitcdHUzMlx0XHRcdGNwbGRfaWQ7XG4rXHQvKiBVU0VSQ09ERSBvZiB0aGUgcHJvZ3JhbW1lZCBpbWFnZTsgdmFsaWQgb25jZSBjcGxkX2lkIGlzIHNldCAqL1xuK1x0dTMyXHRcdFx0Y3BsZF91c2VyY29kZTtcbitcdC8qIHRoZSBvbmUtc2hvdCBJRCByZWFkIGlzIGZpbmlzaGVkLCBzdWNjZXNzZnVsbHkgb3Igbm90ICovXG4rXHRib29sXHRcdFx0Y3BsZF9pZF90cmllZDtcbitcdC8qIGZhaWxlZCBJRCByZWFkIGF0dGVtcHRzIHNvIGZhciAqL1xuK1x0dW5zaWduZWQgaW50XHRcdGNwbGRfaWRfYXR0ZW1wdHM7XG4rXHQvKiB4MSBUQVAgQ1BMRCBwcmVzZW50ICovXG4rXHRib29sXHRcdFx0aGFzX2NwbGQ7XG4rXHQvKiBFTl9DRkdfVFAgaXNzdWVkIGJ1dCBub3QgeWV0IFJFRlJFU0gnZCAqL1xuK1x0Ym9vbFx0XHRcdGNwbGRfaW5fY29uZmlnX21vZGU7XG4gfTtcbiBcbiAjZGVmaW5lIE9DUF9SRVFfVElNRVNUQU1QXHRCSVQoMClcbkBAIC00NTIsNiArNDgwLDEzIEBAIHN0YXRpYyBpbnQgcHRwX29jcF9hZHZhX2JvYXJkX2luaXQoc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3Qgb2NwX3Jlc291cmNlICpyKTtcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9jcF9zbWFfb3Agb2NwX2FkdmFfc21hX29wO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX3NtYV9vcCBvY3BfYWR2YV94MV9zbWFfb3A7XG4gXG4rLyogRmxhc2ggY29tcG9uZW50IG5hbWluZyB0aGUgQ1BMRCBpbWFnZSwgYXMgcmVwb3J0ZWQgYnkgLVx1MDAzZWluZm9fZ2V0KCkuICovXG4rI2RlZmluZSBBRFZBX0NQTERfQ09NUE9ORU5UXHRcImZ3LmNwbGRcIlxuK1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2ZsYXNoKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgZmJfdGltZWNhcmRfZ3JvdXBzW107XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhcnRfdGltZWNhcmRfZ3JvdXBzW107XG5AQCAtMTI3Myw2ICsxMzA4LDcgQEAgc3RhdGljIHN0cnVjdCBvY3BfcmVzb3VyY2Ugb2NwX2FkdmFfeDFfcmVzb3VyY2VbXSA9IHtcbiBcdFx0XHQuc2lnbmFsc19uciAgID0gNCxcbiBcdFx0XHQuZnJlcV9pbl9uciAgID0gNCxcbiBcdFx0XHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXG4rXHRcdFx0Lmhhc19jcGxkICAgICA9IHRydWUsXG4gXHRcdH0sXG4gXHR9LFxuIFx0eyB9XG5AQCAtMjEzMyw2ICsyMTY5LDE3IEBAIHB0cF9vY3BfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRjb25zdCBjaGFyICptc2c7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbitcdFx0aWYgKCFicC1cdTAwM2VoYXNfY3BsZCB8fFxuK1x0XHQgICAgc3RyY21wKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIEFEVkFfQ1BMRF9DT01QT05FTlQpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJ1bnN1cHBvcnRlZCBmbGFzaCBjb21wb25lbnRcIik7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4rXG4rXHRcdHJldHVybiBhZHZhX3gxX2NwbGRfZmxhc2goYnAsIGRldmxpbmssIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbitcdH1cbitcbiBcdGRldiA9IHB0cF9vY3BfZmluZF9mbGFzaChicCk7XG4gXHRpZiAoIWRldikge1xuIFx0XHRkZXZfZXJyKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcIkNhbid0IGZpbmQgRmxhc2ggU1BJIGFkYXB0ZXJcXG5cIik7XG5AQCAtMjE1NSwxMCArMjIwMiwxMyBAQCBzdGF0aWMgaW50XG4gcHRwX29jcF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuK1x0ZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlID1cbitcdFx0XHRcdFx0REVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4gXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4gXHRjb25zdCBjaGFyICpmd19pbWFnZTtcbiBcdGNoYXIgYnVmWzMyXTtcbiBcdGludCBlcnI7XG4rXHR1MzIgaWQ7XG4gXG4gXHRmd19pbWFnZSA9IGJwLVx1MDAzZWZ3X2xvYWRlciA/IFwibG9hZGVyXCIgOiBcImZ3XCI7XG4gXHRzcHJpbnRmKGJ1ZiwgXCIlZC4lZFwiLCBicC1cdTAwM2Vmd190YWcsIGJwLVx1MDAzZWZ3X3ZlcnNpb24pO1xuQEAgLTIxNjYsNiArMjIxNiwyOCBAQCBwdHBfb2NwX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0LyogUmVhZCBieSB0aGUgd29ya2VyLCBub3QgaGVyZTogdGhpcyBjb21tYW5kIGlzIHVucHJpdmlsZWdlZCBhbmRcbitcdCAqIHJlYWRpbmcgdGhlIElEIGNsYWltcyB0aGUgSTJDIGJ1cy4gIDAgbWVhbnMgdW5yZWFkIC0gc2tpcCBpdFxuK1x0ICogcmF0aGVyIHRoYW4gZmFpbCwgZGV2bGluayBkaXNjYXJkcyB0aGUgd2hvbGUgcmVwbHkgb24gZXJyb3IuXG4rXHQgKi9cbitcdGlkID0gUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaWQpO1xuK1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkIFx1MDAyNlx1MDAyNiBpZCkge1xuK1x0XHRzcHJpbnRmKGJ1ZiwgXCIweCUwOHhcIiwgaWQpO1xuK1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBcImNwbGQuaWRcIiwgYnVmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHQvKiBUaGUgZmxhc2hhYmxlIGNvbXBvbmVudDogbmFtaW5nIGl0IGhlcmUgaXMgd2hhdCBsZXRzXG4rXHRcdCAqIFwiZGV2bGluayBkZXYgZmxhc2ggLi4uIGNvbXBvbmVudCBmdy5jcGxkXCIgdGhyb3VnaCwgYXMgdGhlXG4rXHRcdCAqIGNvcmUgbWF0Y2hlcyB0aGUgbmFtZSBhZ2FpbnN0IHRoZSB2ZXJzaW9ucyByZXBvcnRlZCBoZXJlLlxuK1x0XHQgKi9cbitcdFx0c3ByaW50ZihidWYsIFwiMHglMDh4XCIsIFJFQURfT05DRShicC1cdTAwM2VjcGxkX3VzZXJjb2RlKSk7XG4rXHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0X2V4dChyZXEsIFwiZncuY3BsZFwiLCBidWYsXG4rXHRcdFx0XHRcdFx0XHQgICB2ZXJfdHlwZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdGlmICghYnAtXHUwMDNlaGFzX2VlcHJvbV9kYXRhKSB7XG4gXHRcdHB0cF9vY3BfcmVhZF9lZXByb20oYnApO1xuIFx0XHRpZiAoIWJwLVx1MDAzZWhhc19lZXByb21fZGF0YSlcbkBAIC0zMTk5LDYgKzMyNzEsOCBAQCBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXHRwdHBfb2NwX3NtYV9pbml0KGJwKTtcbiBcbitcdGJwLVx1MDAzZWhhc19jcGxkID0gaW5mby1cdTAwM2VoYXNfY3BsZDtcbitcbiBcdHJldHVybiBwdHBfb2NwX2luaXRfY2xvY2soYnAsIFx1MDAyNmluZm8tXHUwMDNlc2Vydm8pO1xuIH1cbiBcbkBAIC00MjI2LDYgKzQzMDAsNjQ4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NwX2F0dHJfZ3JvdXAgYXJ0X3RpbWVjYXJkX2dyb3Vwc1tdID0ge1xuIFx0eyB9LFxuIH07XG4gXG4rLypcbisgKiBhZHZhX3gxIFRBUCBDUExEIChMYXR0aWNlIExDTVhPM0xGLTIxMDApIGhlbHBlcnMuXG4rICpcbisgKiBUaGUgY2FyZCBoYXMgdHdvIEkyQyBjb250cm9sbGVyczsgTGludXggcmVnaXN0ZXJzIG9ubHkgMHgwMDE1MDAwMC5cbisgKiBUaGUgaTJjX2J1c19jdHJsIGhhbmRzaGFrZSByZS1yb3V0ZXMgd2hhdCBlYWNoIGlzIHdpcmVkIHRvOlxuKyAqXG4rICogICBncmFudCAwOiAgMHgxNTAwMDAgLVx1MDAzZSBFRVBST01zICAgICAweDEyMDAwMCAtXHUwMDNlIFRNQyBvciBNLjIsIE1CJ3MgY2hvaWNlXG4rICogICBncmFudCAxOiAgMHgxNTAwMDAgLVx1MDAzZSBUTUMgYnVzICAgICAweDEyMDAwMCAtXHUwMDNlIE0uMlxuKyAqXG4rICogVGhlIFBDQTk1NDggYXQgMHg3NCBhbmQgdGhlIENQTEQgYXQgMHg0MCBiZWhpbmQgaXRzIGNoYW5uZWwgMCBhcmUgb24gdGhlXG4rICogVE1DIGJ1cywgcmVhY2hhYmxlIG9ubHkgd2hpbGUgdGhlIGdyYW50IGlzIGhlbGQuICBUaGUgRUVQUk9NcyBhcmUgbm90XG4rICogYmVoaW5kIHRoZSBhZGFwdGVyIGZvciB0aGF0IHdpbmRvdywgc28gYSBDUExEIG9wZXJhdGlvbiBob2xkcyBjcGxkX2xvY2tcbisgKiBhbmQgdGhlIGFkYXB0ZXIgbG9jayB0byBrZWVwIHRoZSBFRVBST00gYW5kIG52bWVtIHBhdGhzIG9mZiBpdC5cbisgKi9cbitcbisjZGVmaW5lIEFEVkFfTVVYX0FERFIgICAgIDB4NzRcbisjZGVmaW5lIEFEVkFfQ1BMRF9BRERSICAgIDB4NDBcbisjZGVmaW5lIEFEVkFfTVVYX0NIQU5ORUwgIDBcbitcbisvKiBMb25nZXN0IGNvbW1hbmQgb3IgcmVwbHk7IGJvdW5kcyBlYWNoIGhhbGYgb2YgdGhlIHBlci1jbGFpbSBzY3JhdGNoLiAqL1xuKyNkZWZpbmUgQURWQV9DUExEX1hGRVJfTUFYIDMyXG4rXG4rI2RlZmluZSBNQkxBWkVfUkVRVUVTVCAgICAweDAwMDBhYWFhVVxuKyNkZWZpbmUgTUJMQVpFX0dSQU5URUQgICAgMHg1NTU1YWFhYVVcbisjZGVmaW5lIE1CTEFaRV9SRUxFQVNFICAgIDB4NTU1NTAwMDBVXG4rI2RlZmluZSBNQkxBWkVfUkVUUklFUyAgICAyMDBcbisjZGVmaW5lIE1CTEFaRV9SRVRSWV9VUyAgIDEwMDAwXG4rXG4rLyogTGF0dGljZSBMQ01YTzNMRiBJU0MgY29tbWFuZCBjb2RlcyAqL1xuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9JRCAgICAgIDB4RTAwMDAwMDBVTFxuKyNkZWZpbmUgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSAweEMwMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX1JFQURfU1RBVFVTICAweDNDMDAwMDAwVUxcbisjZGVmaW5lIENQTERfQ01EX0VOX0NGR19UUCAgICAweDc0ICAgLyogZW5hYmxlIGNvbmZpZywgdHJhbnNwYXJlbnQgbW9kZSAqL1xuKyNkZWZpbmUgQ1BMRF9DTURfRElTX0NGRyAgICAgIDB4MjZcbisjZGVmaW5lIENQTERfQ01EX0VSQVNFICAgICAgICAweDBFXG4rI2RlZmluZSBDUExEX0NNRF9SRVNFVF9BRERSICAgMHg0NlxuKyNkZWZpbmUgQ1BMRF9DTURfV1JJVEVfUEFHRSAgIDB4NzBcbisjZGVmaW5lIENQTERfQ01EX1NFVF9ET05FICAgICAweDVFXG4rI2RlZmluZSBDUExEX0NNRF9SRUZSRVNIICAgICAgMHg3OVxuKyNkZWZpbmUgQ1BMRF9QQUdFX1NJWkUgICAgICAgIDE2XG4rI2RlZmluZSBDUExEX1BPTExfVVMgICAgICAgICAgMTAwMDAgIC8qIHN0YXR1cyBwb2xsIGludGVydmFsIHdoaWxlIGJ1c3kgKi9cbisjZGVmaW5lIENQTERfRVJBU0VfTVMgICAgICAgICAxNTAwMCAgLyogY29uZmlnIHNlY3RvciBlcmFzZSwgZGF0YXNoZWV0IG1heCAqL1xuKyNkZWZpbmUgQ1BMRF9JRF9NQVhfQVRURU1QVFMgIDEwICAgICAvKiBvbmUgcGVyIHN5bmNfd29yayB0aWNrICovXG4rXG4rLyogU3RhdHVzIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbnMgKExhdHRpY2UgTENNWE8zTEYgZGF0YXNoZWV0KSAqL1xuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfRE9ORSAgIEJJVCg4KVxuKyNkZWZpbmUgQ1BMRF9TVEFUVVNfQlVTWSAgIEJJVCgxMilcbisjZGVmaW5lIENQTERfU1RBVFVTX0ZBSUxFRCBCSVQoMTMpXG4rI2RlZmluZSBDUExEX1NUQVRVU19FUlIgICAgR0VOTUFTSygyNSwgMjMpXG4rXG4rLypcbisgKiBJc3N1ZSBvbmUgSTJDIHRyYW5zYWN0aW9uIG9uIHRoZSBUTUMgYnVzOiBAY21kIGlmIG5vdCBuZWdhdGl2ZSwgdGhlblxuKyAqIEB3bGVuIGJ5dGVzIG9mIEB3ZGF0YSAoTlVMTCBzZW5kcyB6ZXJvcyksIHRoZW4gQHJsZW4gYnl0ZXMgcmVhZCBiYWNrLlxuKyAqIFRoZSBtZXNzYWdlIGlzIGJ1aWx0IGluIHRoZSBzY3JhdGNoIGJ1ZmZlciBmcm9tIGFkdmFfeDFfYnVzX2NsYWltKCksIHNvXG4rICogYW4gdXBsb2FkIGNvc3RzIG9uZSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIG9uZSBwZXIgcGFnZS4gIEkyQ19NX0RNQV9TQUZFXG4rICogaXMgbm90IHNldDogdGhlIHR3byBoYWx2ZXMgYXJlIG5vdCBzZXBhcmF0ZWx5IGFsaWduZWQsIHNvIGxldCB0aGUgY29yZVxuKyAqIGJvdW5jZS4gIENhbGxlciBob2xkcyB0aGUgY2xhaW0sIGhlbmNlIF9faTJjX3RyYW5zZmVyKCkuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY194ZmVyKHN0cnVjdCBwdHBfb2NwICpicCwgdTggYWRkciwgaW50IGNtZCxcbitcdFx0XHQgICAgY29uc3Qgdm9pZCAqd2RhdGEsIHU4IHdsZW4sXG4rXHRcdFx0ICAgIHZvaWQgKnJkYXRhLCB1OCBybGVuKVxuK3tcbitcdHU4ICp3YnVmLCAqcmJ1ZjtcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbitcdHN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07XG4rXHRpbnQgbm1zZ3MgPSAwLCByZXQ7XG4rXHR1MTYgaGRyID0gY21kIFx1MDAzZT0gMDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGFkYXAgPSBicC1cdTAwM2VjcGxkX2FkYXA7XG4rXHRpZiAoIWFkYXAgfHwgIWJwLVx1MDAzZWNwbGRfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGlmIChoZHIgKyB3bGVuIFx1MDAzZSBBRFZBX0NQTERfWEZFUl9NQVggfHwgcmxlbiBcdTAwM2UgQURWQV9DUExEX1hGRVJfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHdidWYgPSBicC1cdTAwM2VjcGxkX2J1ZjtcbitcdHJidWYgPSBicC1cdTAwM2VjcGxkX2J1ZiArIEFEVkFfQ1BMRF9YRkVSX01BWDtcbitcbitcdGlmIChoZHIgKyB3bGVuKSB7XG4rXHRcdGlmIChoZHIpXG4rXHRcdFx0d2J1ZlswXSA9IGNtZDtcbitcdFx0aWYgKHdkYXRhKVxuK1x0XHRcdG1lbWNweSh3YnVmICsgaGRyLCB3ZGF0YSwgd2xlbik7XG4rXHRcdGVsc2VcbitcdFx0XHRtZW1zZXQod2J1ZiArIGhkciwgMCwgd2xlbik7XG4rXHRcdG1zZ3Nbbm1zZ3MrK10gPSAoc3RydWN0IGkyY19tc2cpe1xuK1x0XHRcdC5hZGRyICA9IGFkZHIsXG4rXHRcdFx0LmZsYWdzID0gMCxcbitcdFx0XHQubGVuICAgPSBoZHIgKyB3bGVuLFxuK1x0XHRcdC5idWYgICA9IHdidWYsXG4rXHRcdH07XG4rXHR9XG4rXHRpZiAocmxlbikge1xuK1x0XHRtc2dzW25tc2dzKytdID0gKHN0cnVjdCBpMmNfbXNnKXtcbitcdFx0XHQuYWRkciAgPSBhZGRyLFxuK1x0XHRcdC5mbGFncyA9IEkyQ19NX1JELFxuK1x0XHRcdC5sZW4gICA9IHJsZW4sXG4rXHRcdFx0LmJ1ZiAgID0gcmJ1ZixcbitcdFx0fTtcbitcdH1cbitcbitcdHJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZ3MsIG5tc2dzKTtcbitcdGlmIChyZXQgIT0gbm1zZ3MpXG4rXHRcdHJldHVybiAocmV0IFx1MDAzYyAwKSA/IHJldCA6IC1FSU87XG4rXG4rXHRpZiAocmRhdGEgXHUwMDI2XHUwMDI2IHJsZW4pXG4rXHRcdG1lbWNweShyZGF0YSwgcmJ1Ziwgcmxlbik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogSGFuZCB0aGUgc2VnbWVudCBiYWNrLCBhbmQgd2FpdCBmb3IgdGhlIGZpcm13YXJlIHRvIGRyb3AgdGhlIGdyYW50IGJlZm9yZVxuKyAqIHRoZSBjYWxsZXIgdW5sb2NrcyB0aGUgYWRhcHRlcjogYSB0cmFuc2ZlciBxdWV1ZWQgYmVoaW5kIHVzIHdvdWxkXG4rICogb3RoZXJ3aXNlIGJlIGNsb2NrZWQgb3V0IHdoaWxlIHRoZSBjb250cm9sbGVyIGlzIHN0aWxsIG9uIHRoZSBUTUMgYnVzLFxuKyAqIHdoaWNoIGlzIHdoYXQgaG9sZGluZyB0aGUgYWRhcHRlciBsb2NrIGFjcm9zcyB0aGUgZ3JhbnQgZXhpc3RzIHRvIHN0b3AuXG4rICovXG4rc3RhdGljIHZvaWQgYWR2YV94MV9tYmxhemVfcmVsZWFzZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIWJwLVx1MDAzZXBwc19zZWxlY3QpXG4rXHRcdHJldHVybjtcbitcbitcdGlvd3JpdGUzMihNQkxBWkVfUkVMRUFTRSwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0LyogRmx1c2ggdGhlIHBvc3RlZCB3cml0ZSwgYXMgdGhlIGFjcXVpcmUgcGF0aCBkb2VzLiAqL1xuK1x0aW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkrKykge1xuK1x0XHRpZiAoaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpICE9IE1CTEFaRV9HUkFOVEVEKVxuK1x0XHRcdHJldHVybjtcbitcdFx0dXNsZWVwX3JhbmdlKE1CTEFaRV9SRVRSWV9VUywgTUJMQVpFX1JFVFJZX1VTICsgMTAwMCk7XG4rXHR9XG4rXG4rXHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJUTUMgYnVzIHN0aWxsIGdyYW50ZWQgYWZ0ZXIgcmVsZWFzZVxcblwiKTtcbit9XG4rXG4rLyogQWNxdWlyZSB0aGUgc2hhcmVkIEkyQyBidXMgZnJvbSB0aGUgTWljcm9CbGF6ZSBmaXJtd2FyZS4gIFJldHVybnMgd2l0aCBub1xuKyAqIHJlcXVlc3Qgb3V0c3RhbmRpbmcgb24gZmFpbHVyZSwgc28gdGhlIGZpcm13YXJlIGlzIG5ldmVyIGxlZnQgZ3JhbnRpbmcgYVxuKyAqIHNlZ21lbnQgdG8gYSBob3N0IHRoYXQgaGFzIGdpdmVuIHVwIHdhaXRpbmcgZm9yIGl0LlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9tYmxhemVfYWNxdWlyZShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCBpO1xuK1xuK1x0aWYgKCFicC1cdTAwM2VwcHNfc2VsZWN0KVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdC8qIERyb3AgYSByZXF1ZXN0IGxlZnQgYnkgYSBjYWxsZXIgdGhhdCBkaWVkIG1pZC1zZXF1ZW5jZTsgY3BsZF9sb2NrXG4rXHQgKiBrZWVwcyBsaXZlIG9uZXMgb3V0LiAgVGhlIHJlYWQgYmFjayBvbmx5IGZsdXNoZXMgdGhlIHBvc3RlZCB3cml0ZS5cbitcdCAqL1xuK1x0aW93cml0ZTMyKDAsIFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbitcdGlvcmVhZDMyKFx1MDAyNmJwLVx1MDAzZXBwc19zZWxlY3QtXHUwMDNlaTJjX2J1c19jdHJsKTtcbitcbitcdGlvd3JpdGUzMihNQkxBWkVfUkVRVUVTVCwgXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUJMQVpFX1JFVFJJRVM7IGkrKykge1xuK1x0XHR1c2xlZXBfcmFuZ2UoTUJMQVpFX1JFVFJZX1VTLCBNQkxBWkVfUkVUUllfVVMgKyAxMDAwKTtcbitcdFx0dmFsID0gaW9yZWFkMzIoXHUwMDI2YnAtXHUwMDNlcHBzX3NlbGVjdC1cdTAwM2VpMmNfYnVzX2N0cmwpO1xuK1x0XHRpZiAodmFsID09IE1CTEFaRV9HUkFOVEVEKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rLyogUm91dGUgdGhlIGhvc3QgY29udHJvbGxlciBiYWNrIHRvIHRoZSBFRVBST01zIGFuZCByZWxlYXNlIHRoZSBhZGFwdGVyLlxuKyAqIFNhZmUgYWZ0ZXIgYSBmYWlsZWQgY2xhaW06IGl0IGFsc28gY2xlYXJzIGEgcmVxdWVzdCB0aGF0IHdhcyBuZXZlciBncmFudGVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFkdmFfeDFfYnVzX3JlbGVhc2Uoc3RydWN0IHB0cF9vY3AgKmJwKVxuK3tcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGJwLVx1MDAzZWNwbGRfYWRhcDtcbitcbitcdGlmICghYWRhcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWR2YV94MV9tYmxhemVfcmVsZWFzZShicCk7XG4rXHRicC1cdTAwM2VjcGxkX2FkYXAgPSBOVUxMO1xuK1x0a2ZyZWUoYnAtXHUwMDNlY3BsZF9idWYpO1xuK1x0YnAtXHUwMDNlY3BsZF9idWYgPSBOVUxMO1xuK1x0aTJjX3VubG9ja19idXMoYWRhcCwgSTJDX0xPQ0tfUk9PVF9BREFQVEVSKTtcbitcdGkyY19wdXRfYWRhcHRlcihhZGFwKTtcbit9XG4rXG4rc3RhdGljIGludCBhZHZhX3gxX2kyY19hZGFwX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbit7XG4rXHRyZXR1cm4gISFpMmNfdmVyaWZ5X2FkYXB0ZXIoZGV2KTtcbit9XG4rXG4rLypcbisgKiBDYWNoZSB0aGUgYWRhcHRlciB0aGUgQ1BMRCBoYW5ncyBvZmYuICBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKCkgbWlzc2VzXG4rICogaXQgd2hlbiB0aGUgaTJjIGNvbnRyb2xsZXIgZHJpdmVyIGlzIGFscmVhZHkgbG9hZGVkOiB0aGUgYWRhcHRlciBpcyB0aGVuXG4rICogYWRkZWQgZnJvbSBpbnNpZGUgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCksIGJlZm9yZSBicC1cdTAwM2VpMmNfY3RybCBpcyBzZXQuXG4rICogT25seSBkaXJlY3QgY2hpbGRyZW4gYXJlIHNlYXJjaGVkLCBzbyBhIG11eCBhZGFwdGVyIGNhbm5vdCBtYXRjaC5cbisgKi9cbitzdGF0aWMgdm9pZCBhZHZhX3gxX2NhY2hlX2kyY19hZGFwKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpjaGlsZDtcbitcbitcdGlmICghYnAtXHUwMDNlaGFzX2NwbGQgfHwgIWJwLVx1MDAzZWkyY19jdHJsIHx8XG4rXHQgICAgUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpIFx1MDAzZT0gMClcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y2hpbGQgPSBkZXZpY2VfZmluZF9jaGlsZChcdTAwMjZicC1cdTAwM2VpMmNfY3RybC1cdTAwM2VkZXYsIE5VTEwsXG4rXHRcdFx0XHQgIGFkdmFfeDFfaTJjX2FkYXBfbWF0Y2gpO1xuK1x0aWYgKCFjaGlsZClcbitcdFx0cmV0dXJuO1xuK1xuK1x0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yLCBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpLVx1MDAzZW5yKTtcbitcdHB1dF9kZXZpY2UoY2hpbGQpO1xuK31cbitcbisvKlxuKyAqIENsYWltIHRoZSBUTUMgYnVzLiAgVGhlIGFkYXB0ZXIgbG9jayBpcyBoZWxkIGFjcm9zcyB0aGUgaGFuZHNoYWtlIHRvIGtlZXBcbisgKiB0aGUgRUVQUk9NLCBudm1lbSBhbmQgYXQyNCBwYXRocyBvZmYgdGhlIGNvbnRyb2xsZXIgd2hpbGUgaXQgaXMgcm91dGVkXG4rICogYXdheSBmcm9tIHRoZSBFRVBST01zOyBhbiBFRVBST00gcmVhZCBibG9ja3MgdW50aWwgdGhlIGNsYWltIGlzIGRyb3BwZWQuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2J1c19jbGFpbShzdHJ1Y3QgcHRwX29jcCAqYnApXG4re1xuK1x0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGFkYXAgPSBpMmNfZ2V0X2FkYXB0ZXIoUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIpKTtcbitcdGlmICghYWRhcClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHQvKiBUaGUgbnVtYmVyIGlzIGZyZWVkIGJlZm9yZSB0aGUgbm90aWZpZXIgY2xlYXJzIGl0LCBzbyBpdCBjYW5cbitcdCAqIGFscmVhZHkgYmUgYW5vdGhlciBhZGFwdGVyJ3MuICBDaGVjayB0aGlzIGlzIHN0aWxsIG91cnMuXG4rXHQgKi9cbitcdGlmICghYnAtXHUwMDNlaTJjX2N0cmwgfHwgYWRhcC1cdTAwM2VkZXYucGFyZW50ICE9IFx1MDAyNmJwLVx1MDAzZWkyY19jdHJsLVx1MDAzZWRldikge1xuK1x0XHRpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0LyogT25lIHNjcmF0Y2ggYnVmZmVyIHBlciBjbGFpbSByYXRoZXIgdGhhbiBwZXIgdHJhbnNmZXI6IGFuIHVwbG9hZFxuK1x0ICogaG9sZHMgdGhlIGNsYWltIGZvciB0aGUgd2hvbGUgaW1hZ2UuXG4rXHQgKi9cbitcdGJwLVx1MDAzZWNwbGRfYnVmID0ga3phbGxvYygyICogQURWQV9DUExEX1hGRVJfTUFYLCBHRlBfS0VSTkVMKTtcbitcdGlmICghYnAtXHUwMDNlY3BsZF9idWYpIHtcbitcdFx0aTJjX3B1dF9hZGFwdGVyKGFkYXApO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGkyY19sb2NrX2J1cyhhZGFwLCBJMkNfTE9DS19ST09UX0FEQVBURVIpO1xuK1x0YnAtXHUwMDNlY3BsZF9hZGFwID0gYWRhcDtcbitcbitcdHJldCA9IGFkdmFfeDFfbWJsYXplX2FjcXVpcmUoYnApO1xuK1x0aWYgKHJldClcbitcdFx0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBTZWxlY3QgYSBtdXggY2hhbm5lbCwgb3IgZGVzZWxlY3QgYWxsIHdpdGggY2ggXHUwMDNjIDAgLSB0aGUgcG93ZXItb24gc3RhdGUuXG4rICogVGhlIG11eCBpcyBvbiB0aGUgVE1DIGJ1cywgc28gd2hhdCBpdCBpcyBsZWZ0IHNldCB0byBuZXZlciBhZmZlY3RzIHRoZVxuKyAqIEVFUFJPTSBwYXRocy5cbisgKi9cbitzdGF0aWMgaW50IGFkdmFfeDFfbXV4X3NlbGVjdChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBjaClcbit7XG4rXHR1OCB2YWwgPSAoY2ggXHUwMDNlPSAwKSA/IEJJVChjaCkgOiAwO1xuK1xuK1x0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfTVVYX0FERFIsIHZhbCwgTlVMTCwgMCwgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogQXJndW1lbnQgYnl0ZXMgdGhhdCBmb2xsb3cgYW4gSVNDIG9wY29kZS4gIFJldHVybnMgTlVMTCB3aXRoIEBuYXJncyBzZXRcbisgKiB3aGVuIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB6ZXJvOiBhZHZhX3gxX2kyY194ZmVyKCkgemVyb2VzIHRoZSBidWZmZXIuXG4rICovXG4rc3RhdGljIGNvbnN0IHU4ICphZHZhX3gxX2NwbGRfYXJncyh1OCBjbWQsIHU4ICpuYXJncylcbit7XG4rXHRzdGF0aWMgY29uc3QgdTggZW5fY2ZnX3RwW10gPSB7IDB4MDgsIDB4MDAgfTtcbitcdC8qIGNmZyBzZWN0b3Igb25seSAqL1xuK1x0c3RhdGljIGNvbnN0IHU4IGVyYXNlX2NmZ1tdID0geyAweDA0LCAweDAwLCAweDAwIH07XG4rXG4rXHRzd2l0Y2ggKGNtZCkge1xuK1x0Y2FzZSBDUExEX0NNRF9FTl9DRkdfVFA6XG4rXHRcdCpuYXJncyA9IHNpemVvZihlbl9jZmdfdHApO1xuK1x0XHRyZXR1cm4gZW5fY2ZnX3RwO1xuK1x0Y2FzZSBDUExEX0NNRF9FUkFTRTpcbitcdFx0Km5hcmdzID0gc2l6ZW9mKGVyYXNlX2NmZyk7XG4rXHRcdHJldHVybiBlcmFzZV9jZmc7XG4rXHRjYXNlIENQTERfQ01EX1JFU0VUX0FERFI6XG4rXHRjYXNlIENQTERfQ01EX1NFVF9ET05FOlxuK1x0XHQqbmFyZ3MgPSAzO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdGNhc2UgQ1BMRF9DTURfRElTX0NGRzpcbitcdGNhc2UgQ1BMRF9DTURfUkVGUkVTSDpcbitcdFx0Km5hcmdzID0gMjtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHRkZWZhdWx0OlxuK1x0XHQqbmFyZ3MgPSAwO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4rLyogU2VuZCBhbiBJU0MgY29tbWFuZCB3aXRoIHRoZSBmaXhlZCBhcmd1bWVudHMgdGhhdCBiZWxvbmcgdG8gaXQuICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd3JpdGUoc3RydWN0IHB0cF9vY3AgKmJwLCB1OCBjbWQpXG4re1xuK1x0Y29uc3QgdTggKmFyZ3M7XG4rXHR1OCBuYXJncztcbitcbitcdGFyZ3MgPSBhZHZhX3gxX2NwbGRfYXJncyhjbWQsIFx1MDAyNm5hcmdzKTtcbitcbitcdHJldHVybiBhZHZhX3gxX2kyY194ZmVyKGJwLCBBRFZBX0NQTERfQUREUiwgY21kLCBhcmdzLCBuYXJncywgTlVMTCwgMCk7XG4rfVxuK1xuKy8qXG4rICogU2VuZCBhIDQtYnl0ZSBjb21tYW5kIGFuZCByZWFkIGJhY2sgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgU1RPUDogdHdvXG4rICogbWVzc2FnZXMgaW4gb25lIHRyYW5zZmVyIGlzIHRoZSBMYXR0aWNlIHdyaXRlIC1cdTAwM2UgcmVwZWF0ZWQgU1RBUlQgLVx1MDAzZSByZWFkLFxuKyAqIHNvIG5vIHByb3RvY29sLW1hbmdsaW5nIGZsYWcgaXMgbmVlZGVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX2NtZF9yZWFkKHN0cnVjdCBwdHBfb2NwICpicCxcbitcdFx0XHRcdCB1MzIgY21kX2JlLCB1OCAqb3V0LCB1OCBvdXRfbGVuKVxuK3tcbitcdF9fYmUzMiBjbWQgPSBjcHVfdG9fYmUzMihjbWRfYmUpO1xuK1xuK1x0cmV0dXJuIGFkdmFfeDFfaTJjX3hmZXIoYnAsIEFEVkFfQ1BMRF9BRERSLCAtMSwgXHUwMDI2Y21kLCA0LCBvdXQsIG91dF9sZW4pO1xuK31cbitcbitzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcHRwX29jcCAqYnAsIHUzMiAqc3RhdHVzKVxuK3tcbitcdHU4IGJ1Zls0XTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhZHZhX3gxX2NwbGRfY21kX3JlYWQoYnAsIENQTERfQ01EX1JFQURfU1RBVFVTLCBidWYsIDQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdCpzdGF0dXMgPSBnZXRfdW5hbGlnbmVkX2JlMzIoYnVmKTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBQb2xsIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdW50aWwgdGhlIENQTEQgZ29lcyBpZGxlLCBvciBAbWF4X21zIGVsYXBzZXMuXG4rICogVGhlIGRlYWRsaW5lIGlzIG9uIHdhbGwgdGltZSwgc28gdGhlIEkyQyB0cmFuc2FjdGlvbnMgY291bnQgYWdhaW5zdCBpdCxcbisgKiBhbmQgdGhlIHN0YXR1cyBpcyByZWFkIG9uY2UgbW9yZSBhZnRlciBpdCBleHBpcmVzIGJlZm9yZSBnaXZpbmcgdXAuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfd2FpdF9yZWFkeShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4re1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHRpbnQgZXJyID0gMCwgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXG4rXHRcdFx0XHRlcnIgfHwgKHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKSB8fFxuK1x0XHRcdFx0IShzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxuK1x0XHRcdFx0Q1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcbitcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIEtlZXAgdGhlIHRyYW5zcG9ydCBlcnJubyBzbyBpdCByZWFjaGVzIHVzZXJzcGFjZSBhcy1pczsgLUVJTyBpc1xuK1x0ICogcmVzZXJ2ZWQgZm9yIHRoZSBDUExEIGl0c2VsZiByZXBvcnRpbmcgRkFJTEVELlxuK1x0ICovXG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBXYWl0IGZvciBCVVNZIHRvIGNsZWFyLCBpZ25vcmluZyBhIHBlbmRpbmcgY2FuY2VsLiAgQW4gSVNDIGNvbW1hbmQgaXNzdWVkXG4rICogd2hpbGUgdGhlIHBhcnQgaXMgc3RpbGwgZXJhc2luZyBvciBwcm9ncmFtbWluZyBtYXkgbm90IGxhdGNoLCBzbyBhbiBhYm9ydFxuKyAqIGhhcyB0byB3YWl0IHRoZSBvcGVyYXRpb24gb3V0IGJlZm9yZSBpdCBjYW4gbGVhdmUgY29uZmlndXJhdGlvbiBtb2RlLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3dhaXRfaWRsZShzdHJ1Y3QgcHRwX29jcCAqYnAsIHVuc2lnbmVkIGludCBtYXhfbXMpXG4re1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHRpbnQgZXJyID0gMCwgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzLCBlcnIsXG4rXHRcdFx0XHRlcnIgfHwgIShzdGF0dXMgXHUwMDI2IENQTERfU1RBVFVTX0JVU1kpLFxuK1x0XHRcdFx0Q1BMRF9QT0xMX1VTLCBtYXhfbXMgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSxcbitcdFx0XHRcdGJwLCBcdTAwMjZzdGF0dXMpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuKy8qIExlYXZlIHRyYW5zcGFyZW50IGNvbmZpZ3VyYXRpb24gbW9kZS4gIGNwbGRfaW5fY29uZmlnX21vZGUgc3RheXMgc2V0IHdoZW5cbisgKiBESVNfQ0ZHIGRvZXMgbm90IGdldCB0aHJvdWdoLCBzbyBhIGxhdGVyIGNsZWFudXAoKSB0cmllcyBhZ2FpbiByYXRoZXIgdGhhblxuKyAqIHJlY29yZGluZyBhbiBleGl0IHRoYXQgbmV2ZXIgaGFwcGVuZWQuXG4rICovXG4rc3RhdGljIHZvaWQgYWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKHN0cnVjdCBwdHBfb2NwICpicClcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCFicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRhZHZhX3gxX2NwbGRfd2FpdF9pZGxlKGJwLCBDUExEX0VSQVNFX01TKTtcbitcbitcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfRElTX0NGRyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfd2FybihcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJDUExEIGxlZnQgaW4gY29uZmlndXJhdGlvbiBtb2RlOiAlZFxcblwiLCBlcnIpO1xuK1x0ZWxzZVxuK1x0XHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogUmVhZCB0aGUgTGF0dGljZSBkZXZpY2UgSUQgYW5kIHRoZSBpbWFnZSBVU0VSQ09ERSB1bmRlciBvbmUgYnVzIGNsYWltLlxuKyAqIERvbmUgb25jZSwgb2ZmIHRoZSB1bnByaXZpbGVnZWQgZGV2bGluayBwYXRoLCB3aGljaCByZXBvcnRzIHRoZSBjYWNoZWRcbisgKiB2YWx1ZXMuICAtRUJVU1kgbWVhbnMgY3BsZF9sb2NrIGlzIGhlbGQsIHNvIHRoZSBjYWxsZXIgY2FuIHJldHJ5IHJhdGhlclxuKyAqIHRoYW4gd2FpdCBiZWhpbmQgYSBsb25nIENQTEQgb3BlcmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgYWR2YV94MV9jcGxkX3JlYWRfaWQoc3RydWN0IHB0cF9vY3AgKmJwKVxuK3tcbitcdHUzMiBpZCwgdXNlcmNvZGU7XG4rXHR1OCBkYXRhWzRdO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZWxlYXNlO1xuK1x0cmV0ID0gYWR2YV94MV9jcGxkX2NtZF9yZWFkKGJwLCBDUExEX0NNRF9SRUFEX0lELCBkYXRhLCA0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZGVzZWxlY3Q7XG4rXHRpZCA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhKTtcbitcbitcdHJldCA9IGFkdmFfeDFfY3BsZF9jbWRfcmVhZChicCwgQ1BMRF9DTURfUkVBRF9VU0VSQ09ERSwgZGF0YSwgNCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGRlc2VsZWN0O1xuK1x0dXNlcmNvZGUgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSk7XG4rXG4rXHQvKiBjcGxkX2lkIGlzIHRoZSB2YWxpZGl0eSBmbGFnIGZvciBib3RoLCBzbyBwdWJsaXNoIGl0IGxhc3QuICovXG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfdXNlcmNvZGUsIHVzZXJjb2RlKTtcbitcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCwgaWQpO1xuK2Rlc2VsZWN0OlxuK1x0YWR2YV94MV9tdXhfc2VsZWN0KGJwLCAtMSk7XG4rcmVsZWFzZTpcbitcdGFkdmFfeDFfYnVzX3JlbGVhc2UoYnApO1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2RiZyhcdTAwMjZicC1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIkNQTEQgZGV2aWNlIElEIHVuYXZhaWxhYmxlOiAlZFxcblwiLCByZXQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyogY3BsZF9zdGF0dXMgLSBzaG93IHRoZSBmbGFncyBzZXQgaW4gdGhlIFRBUCBDUExEIHN0YXR1cyByZWdpc3Rlci4gKi9cbitzdGF0aWMgc3NpemVfdFxuK2NwbGRfc3RhdHVzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbitcdFx0IGNoYXIgKmJ1Zilcbit7XG4rXHRzdHJ1Y3QgcHRwX29jcCAqYnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcdGludCBjb3VudCA9IDA7XG4rXHR1MzIgc3QgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdC8qIEEgQ1BMRCBvcGVyYXRpb24gY2FuIGhvbGQgY3BsZF9sb2NrIGEgbG9uZyB0aW1lOyBzdGF5IGtpbGxhYmxlLiAqL1xuK1x0cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gYWR2YV94MV9idXNfY2xhaW0oYnApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXHRyZXQgPSBhZHZhX3gxX211eF9zZWxlY3QoYnAsIEFEVkFfTVVYX0NIQU5ORUwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZWxlYXNlO1xuK1x0cmV0ID0gYWR2YV94MV9jcGxkX3JlYWRfc3RhdHVzKGJwLCBcdTAwMjZzdCk7XG4rXHRhZHZhX3gxX211eF9zZWxlY3QoYnAsIC0xKTtcbityZWxlYXNlOlxuK1x0YWR2YV94MV9idXNfcmVsZWFzZShicCk7XG4rb3V0OlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogRmxhZ3M6IHRoZSBuYW1lcyBvZiB0aGUgYml0cyB0aGF0IGFyZSBzZXQsIG5vdGhpbmcgd2hlbiBub25lIGlzLFxuK1x0ICogcmF0aGVyIHRoYW4gYSB2YWx1ZSBwZXIgYml0IGluIG9uZSBmaWxlLlxuK1x0ICovXG4rXHRpZiAoc3QgXHUwMDI2IENQTERfU1RBVFVTX0RPTkUpXG4rXHRcdGNvdW50ICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBjb3VudCwgXCJkb25lXCIpO1xuK1x0aWYgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKVxuK1x0XHRjb3VudCArPSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFwiJXNidXN5XCIsIGNvdW50ID8gXCIgXCIgOiBcIlwiKTtcbitcdGlmIChzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRkFJTEVEKVxuK1x0XHRjb3VudCArPSBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFwiJXNmYWlsZWRcIixcbitcdFx0XHRcdCAgICAgICBjb3VudCA/IFwiIFwiIDogXCJcIik7XG4rXG4rXHRyZXR1cm4gY291bnQgKyBzeXNmc19lbWl0X2F0KGJ1ZiwgY291bnQsIFwiXFxuXCIpO1xuK31cbitzdGF0aWMgREVWSUNFX0FUVFJfQURNSU5fUk8oY3BsZF9zdGF0dXMpO1xuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgQ1BMRCBjb25maWd1cmF0aW9uIGZsYXNoIGZyb20gQGZ3IGFuZCBhY3RpdmF0ZSBpdC4gIFNlbGVjdGVkXG4rICogYnkgdGhlIFwiZncuY3BsZFwiIGZsYXNoIGNvbXBvbmVudDsgdGhlIFNQSSBmbGFzaCBrZWVwcyB0aGUgZGVmYXVsdCBwYXRoLlxuKyAqIFJ1bnMgdW5kZXIgY3BsZF9sb2NrIHdpdGggdGhlIGkyYyBhZGFwdGVyIGxvY2sgaGVsZCwgc28gYW4gRUVQUk9NIHJlYWRcbisgKiBibG9ja3MgZm9yIGFzIGxvbmcgYXMgcHJvZ3JhbW1pbmcgdGFrZXMuXG4rICovXG4rc3RhdGljIGludCBhZHZhX3gxX2NwbGRfZmxhc2goc3RydWN0IHB0cF9vY3AgKmJwLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbitcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzaXplX3Qgb2Zmc2V0O1xuK1x0aW50IGVycjtcbitcdHUzMiBzdDtcbitcbitcdGlmICghZnctXHUwMDNlc2l6ZSB8fCBmdy1cdTAwM2VzaXplICUgQ1BMRF9QQUdFX1NJWkUpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiaW1hZ2UgbXVzdCBiZSBhIHdob2xlIG51bWJlciBvZiAxNi1ieXRlIHBhZ2VzXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdGVyciA9IGFkdmFfeDFfYnVzX2NsYWltKGJwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0ZXJyID0gYWR2YV94MV9tdXhfc2VsZWN0KGJwLCBBRFZBX01VWF9DSEFOTkVMKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gcmVsZWFzZTtcbitcbitcdC8qIFNldCBiZWZvcmUgRU5fQ0ZHX1RQLCBub3QgYWZ0ZXI6IHRoZSBDUExEIG1heSBoYXZlIGVudGVyZWQgY29uZmlnXG4rXHQgKiBtb2RlIGV2ZW4gaWYgdGhlIHdyaXRlIGVycm9ycyBvciB0aGUgd2FpdCB0aW1lcyBvdXQsIGFuZCBvbmx5IHRoaXNcbitcdCAqIG1ha2VzIHRoZSBleGl0IHBhdGggc2VuZCBESVNfQ0ZHLiAgQSBzdHJheSBESVNfQ0ZHIGlzIGhhcm1sZXNzO1xuK1x0ICogbGVhdmluZyBjb25maWcgbW9kZSBlbmFibGVkIGlzIG5vdC5cbitcdCAqL1xuK1x0YnAtXHUwMDNlY3BsZF9pbl9jb25maWdfbW9kZSA9IHRydWU7XG4rXG4rXHRlcnIgPSBhZHZhX3gxX2NwbGRfd3JpdGUoYnAsIENQTERfQ01EX0VOX0NGR19UUCk7XG4rXHRpZiAoIWVycilcbitcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDUwMDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2NvbmZpZztcbitcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCJFcmFzaW5nXCIsXG4rXHRcdFx0XHRcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xuK1x0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9FUkFTRSk7XG4rXHRpZiAoIWVycilcbitcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIENQTERfRVJBU0VfTVMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBleGl0X2NvbmZpZztcbitcbitcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfUkVTRVRfQUREUik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGV4aXRfY29uZmlnO1xuK1xuK1x0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIGZ3LVx1MDAzZXNpemU7IG9mZnNldCArPSBDUExEX1BBR0VfU0laRSkge1xuK1x0XHR1OCBhcmdzWzMgKyBDUExEX1BBR0VfU0laRV0gPSB7IDB4MDAsIDB4MDAsIDB4MDEgfTtcbitcbitcdFx0bWVtY3B5KFx1MDAyNmFyZ3NbM10sIGZ3LVx1MDAzZWRhdGEgKyBvZmZzZXQsIENQTERfUEFHRV9TSVpFKTtcbitcdFx0ZXJyID0gYWR2YV94MV9pMmNfeGZlcihicCwgQURWQV9DUExEX0FERFIsIENQTERfQ01EX1dSSVRFX1BBR0UsXG4rXHRcdFx0XHQgICAgICAgYXJncywgc2l6ZW9mKGFyZ3MpLCBOVUxMLCAwKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDEwMCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBleGl0X2NvbmZpZztcbitcbitcdFx0aWYgKCEob2Zmc2V0ICUgKENQTERfUEFHRV9TSVpFICogNjQpKSlcbitcdFx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssXG4rXHRcdFx0XHRcdFx0XHQgICBcIlByb2dyYW1taW5nXCIsXG4rXHRcdFx0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuK1x0XHRcdFx0XHRcdFx0ICAgb2Zmc2V0LCBmdy1cdTAwM2VzaXplKTtcbitcdH1cbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCJQcm9ncmFtbWluZ1wiLFxuK1x0XHRcdFx0XHQgICBBRFZBX0NQTERfQ09NUE9ORU5ULFxuK1x0XHRcdFx0XHQgICBmdy1cdTAwM2VzaXplLCBmdy1cdTAwM2VzaXplKTtcbitcbitcdGVyciA9IGFkdmFfeDFfY3BsZF93cml0ZShicCwgQ1BMRF9DTURfU0VUX0RPTkUpO1xuK1x0aWYgKCFlcnIpXG4rXHRcdGVyciA9IGFkdmFfeDFfY3BsZF93YWl0X3JlYWR5KGJwLCAxMDAwKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9jb25maWc7XG4rXG4rXHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9jb25maWc7XG4rXHRpZiAoIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkpIHtcbitcdFx0ZXJyID0gLUVJTztcbitcdFx0Z290byBleGl0X2NvbmZpZztcbitcdH1cbitcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCJBY3RpdmF0aW5nXCIsXG4rXHRcdFx0XHRcdCAgIEFEVkFfQ1BMRF9DT01QT05FTlQsIDAsIDApO1xuK1x0ZXJyID0gYWR2YV94MV9jcGxkX3dyaXRlKGJwLCBDUExEX0NNRF9SRUZSRVNIKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXhpdF9jb25maWc7XG4rXG4rXHQvKiBSRUZSRVNIIHJlYm9vdHMgdGhlIENQTEQgb3V0IG9mIGNvbmZpZ3VyYXRpb24gbW9kZSwgc28gdGhlIGV4aXRcbitcdCAqIHBhdGggbXVzdCBub3Qgc2VuZCBESVNfQ0ZHIGFmdGVyd2FyZHMgZXZlbiBpZiBhIGNoZWNrIGJlbG93IGZhaWxzLlxuK1x0ICovXG4rXHRicC1cdTAwM2VjcGxkX2luX2NvbmZpZ19tb2RlID0gZmFsc2U7XG4rXG4rXHQvKiBUaGUgbmV3IGltYWdlIGlzIGFscmVhZHkgcnVubmluZywgc28gYSBzZWdtZW50IHRoYXQgaXMgbm90IGJhY2tcbitcdCAqIHlldCBtdXN0IG5vdCBiZSByZXBvcnRlZCBhcyBhIGZhaWxlZCB1cGRhdGU6IHJldHJ5IHRoZSByZXNlbGVjdFxuK1x0ICogcmF0aGVyIHRoYW4gc2FtcGxpbmcgdGhlIG11eCBvbmNlIGF0IGEgZml4ZWQgZGVsYXkuXG4rXHQgKi9cbitcdG1zbGVlcCgxNTAwKTtcbitcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFkdmFfeDFfbXV4X3NlbGVjdCwgZXJyLCAhZXJyLCBDUExEX1BPTExfVVMsXG4rXHRcdFx0XHQzMDAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsXG4rXHRcdFx0XHRicCwgQURWQV9NVVhfQ0hBTk5FTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGRlc2VsZWN0O1xuK1xuK1x0ZXJyID0gYWR2YV94MV9jcGxkX3dhaXRfcmVhZHkoYnAsIDMwMDApO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBkZXNlbGVjdDtcbitcbitcdC8qIFJlcXVpcmUgRE9ORSBzZXQsIG5vdCBidXN5IGFuZCBubyBlcnJvciBjb2RlLCBhcyBtYWNoeG8yLXNwaS5jIGRvZXNcbitcdCAqIGFmdGVyIGEgcmVmcmVzaDogd2l0aG91dCBpdCBhIENSQyBvciBwcmVhbWJsZSBlcnJvciByZWFkcyBiYWNrIGFzIGFcbitcdCAqIHN1Y2Nlc3NmdWwgdXBkYXRlLlxuK1x0ICovXG4rXHRlcnIgPSBhZHZhX3gxX2NwbGRfcmVhZF9zdGF0dXMoYnAsIFx1MDAyNnN0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZGVzZWxlY3Q7XG4rXHRpZiAoIShzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRE9ORSkgfHwgKHN0IFx1MDAyNiBDUExEX1NUQVRVU19CVVNZKSB8fFxuK1x0ICAgIChzdCBcdTAwMjYgQ1BMRF9TVEFUVVNfRVJSKSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiQ1BMRCByZWZyZXNoIGxlZnQgc3RhdHVzIDB4JTA4eFxcblwiLCBzdCk7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiQ1BMRCBkaWQgbm90IGNvbWUgYmFjayBjb25maWd1cmVkXCIpO1xuK1x0XHRlcnIgPSAtRUlPO1xuK1x0XHRnb3RvIGRlc2VsZWN0O1xuK1x0fVxuK1xuK1x0LyogVGhlIGltYWdlIG9uIHRoZSBwYXJ0IGNoYW5nZWQsIHNvIHRoZSBjYWNoZWQgVVNFUkNPREUgaGFzIHRvby4gKi9cbitcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pZCwgMCk7XG4rXHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaWRfdHJpZWQsIGZhbHNlKTtcbitcdGJwLVx1MDAzZWNwbGRfaWRfYXR0ZW1wdHMgPSAwO1xuK1xuK2V4aXRfY29uZmlnOlxuK1x0YWR2YV94MV9jcGxkX2V4aXRfY29uZmlnKGJwKTtcbitkZXNlbGVjdDpcbitcdGFkdmFfeDFfbXV4X3NlbGVjdChicCwgLTEpO1xuK3JlbGVhc2U6XG4rXHRhZHZhX3gxX2J1c19yZWxlYXNlKGJwKTtcbit1bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlY3BsZF9sb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl9zZXJpYWxudW0uYXR0cixcbiBcdFx1MDAyNmRldl9hdHRyX2duc3Nfc3luYy5hdHRyLFxuQEAgLTQyNzQsNiArNDk5MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHZhX3RpbWVjYXJkX3gxX2F0dHJzW10gPSB7XG4gXHRcdTAwMjZkZXZfYXR0cl90c193aW5kb3dfYWRqdXN0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl91dGNfdGFpX29mZnNldC5hdHRyLFxuIFx0XHUwMDI2ZGV2X2F0dHJfdG9kX2NvcnJlY3Rpb24uYXR0cixcbitcdFx1MDAyNmRldl9hdHRyX2NwbGRfc3RhdHVzLmF0dHIsXG4gXHROVUxMLFxuIH07XG4gXG5AQCAtNDkwNCw2ICs1NjIxLDcgQEAgcHRwX29jcF9kZXRhY2goc3RydWN0IHB0cF9vY3AgKmJwKVxuIFx0XHRjbGtfaHdfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKGJwLVx1MDAzZWkyY19jbGspO1xuIFx0aWYgKGJwLVx1MDAzZW5faXJxcylcbiBcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoYnAtXHUwMDNlcGRldik7XG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNmJwLVx1MDAzZWNwbGRfbG9jayk7XG4gXHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZicC1cdTAwM2VkZXYpO1xuIH1cbiBcbkBAIC01MDUyLDYgKzU3NzAsMjAgQEAgcHRwX29jcF9zeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0YnAtXHUwMDNlc3luYyA9IHN5bmM7XG4gXG4rXHQvKiBUaGUgYWRhcHRlciBjYW4gYXBwZWFyIGFmdGVyIHByb2JlLCBzbyByZWFkIHRoZSBJRCBmcm9tIGhlcmUgb25jZVxuK1x0ICogaXQgaGFzLiAgQSBjbGFpbSBjYW4gZmFpbCB0cmFuc2llbnRseSAtIHRoZSBmaXJtd2FyZSBtYXkgbm90IGdyYW50XG4rXHQgKiB0aGUgc2VnbWVudCBzdHJhaWdodCBhZnRlciBwb3dlci11cCAtIHNvIHJldHJ5IGEgYm91bmRlZCBudW1iZXIgb2ZcbitcdCAqIHRpbWVzLiAgLUVCVVNZIG1lYW5zIGNwbGRfbG9jayBpcyBoZWxkIGFuZCBkb2VzIG5vdCBjb3VudC5cbitcdCAqL1xuK1x0aWYgKGJwLVx1MDAzZWhhc19jcGxkIFx1MDAyNlx1MDAyNiAhUkVBRF9PTkNFKGJwLVx1MDAzZWNwbGRfaWRfdHJpZWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShicC1cdTAwM2VjcGxkX2kyY19hZGFwX25yKSBcdTAwM2U9IDApIHtcbitcdFx0aW50IGVyciA9IGFkdmFfeDFfY3BsZF9yZWFkX2lkKGJwKTtcbitcbitcdFx0aWYgKGVyciAhPSAtRUJVU1kgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoIWVyciB8fCArK2JwLVx1MDAzZWNwbGRfaWRfYXR0ZW1wdHMgXHUwMDNlPSBDUExEX0lEX01BWF9BVFRFTVBUUykpXG4rXHRcdFx0V1JJVEVfT05DRShicC1cdTAwM2VjcGxkX2lkX3RyaWVkLCB0cnVlKTtcbitcdH1cbitcbiBcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCBcdTAwMjZicC1cdTAwM2VzeW5jX3dvcmssIEhaKTtcbiB9XG4gXG5AQCAtNTA4MCw2ICs1ODEyLDE0IEBAIHB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGU7XG4gXG4rXHQvKiBCZWZvcmUgdGhlIGZpcnN0IGVycm9yIHBhdGggdGhhdCBjYWxscyBwdHBfb2NwX2RldGFjaCgpLCBzb1xuK1x0ICogbXV0ZXhfZGVzdHJveSgpIHJ1bnMgb24gYW4gaW5pdGlhbGlzZWQgbXV0ZXgsIGFuZCBiZWZvcmVcbitcdCAqIHB0cF9vY3BfcmVnaXN0ZXJfcmVzb3VyY2VzKCksIHNvIHRoaXMgc2VudGluZWwgY2Fubm90IG92ZXJ3cml0ZSBhblxuK1x0ICogYWRhcHRlciBudW1iZXIgdGhlIGkyYyBub3RpZmllciBzdG9yZXMgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cbitcdCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZicC1cdTAwM2VjcGxkX2xvY2spO1xuK1x0YnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciA9IC0xO1xuK1xuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnAtXHUwMDNlc3luY193b3JrLCBwdHBfb2NwX3N5bmNfd29yayk7XG4gXG4gXHQvKiBjb21wYXQgbW9kZS5cbkBAIC01MDk5LDYgKzU4MzksOCBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGFkdmFfeDFfY2FjaGVfaTJjX2FkYXAoYnApO1xuK1xuIFx0YnAtXHUwMDNlcHRwID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKFx1MDAyNmJwLVx1MDAzZXB0cF9pbmZvLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAoSVNfRVJSKGJwLVx1MDAzZXB0cCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihicC1cdTAwM2VwdHApO1xuQEAgLTUxMTksMTIgKzU4NjEsMTIgQEAgcHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuIFx0aWYgKElTX0VSUihicC1cdTAwM2VkcGxsKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJwLVx1MDAzZWRwbGwpO1xuIFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcImRwbGxfZGV2aWNlX2FsbG9jIGZhaWxlZFxcblwiKTtcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X2Rldmxpbms7XG4gXHR9XG4gXG4gXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcdTAwMjZkcGxsX29wcywgYnApO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X2RwbGxfcHV0O1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgT0NQX1NNQV9OVU07IGkrKykge1xuIFx0XHRicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLFxuQEAgLTUxNTAsNyArNTg5MiwxNiBAQCBwdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gXHRcdGRwbGxfcGluX3VucmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgYnAtXHUwMDNlc21hW2ldLmRwbGxfcGluLCBcdTAwMjZkcGxsX3BpbnNfb3BzLCBcdTAwMjZicC1cdTAwM2VzbWFbaV0pO1xuIFx0XHRkcGxsX3Bpbl9wdXQoYnAtXHUwMDNlc21hW2ldLmRwbGxfcGluLCBcdTAwMjZicC1cdTAwM2VzbWFbaV0udHJhY2tlcik7XG4gXHR9XG4rXHQvKiBkcGxsX2RldmljZV9yZWdpc3RlcigpIHRha2VzIGEgc2Vjb25kIHJlZmVyZW5jZSBhbmQgc3RvcmVzIGJwOyBvbmx5XG4rXHQgKiBkcGxsX2RldmljZV91bnJlZ2lzdGVyKCkgZHJvcHMgaXQuICBXaXRob3V0IHRoaXMgdGhlIGRldmljZSBzdGF5c1xuK1x0ICogdmlzaWJsZSB3aXRoIGEgcHJpdiBwb2ludGVyIGludG8gc3RvcmFnZSBkZXZsaW5rX2ZyZWUoKSB3aWxsIHJlbGVhc2UuXG4rXHQgKi9cbitcdGRwbGxfZGV2aWNlX3VucmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbitvdXRfZHBsbF9wdXQ6XG4gXHRkcGxsX2RldmljZV9wdXQoYnAtXHUwMDNlZHBsbCwgXHUwMDI2YnAtXHUwMDNldHJhY2tlcik7XG4rb3V0X2Rldmxpbms6XG4rXHQvKiBkZXRhY2goKSBkZXN0cm95cyBjcGxkX2xvY2s7IG5vIGRldmxpbmsgb3AgbWF5IHN0aWxsIHJlYWNoIGl0ICovXG4rXHRkZXZsaW5rX3VucmVnaXN0ZXIoZGV2bGluayk7XG4gb3V0OlxuIFx0cHRwX29jcF9kZXRhY2goYnApO1xuIG91dF9kaXNhYmxlOlxuQEAgLTUxOTYsNiArNTk0Nyw3IEBAIHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiwgKmNoaWxkID0gZGF0YTtcbitcdHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDtcbiBcdHN0cnVjdCBwdHBfb2NwICpicDtcbiBcdGJvb2wgYWRkO1xuIFxuQEAgLTUyMTksMTEgKzU5NzEsMjEgQEAgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuIFxuIGZvdW5kOlxuIFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbi1cdGlmIChhZGQpXG4rXHRhZGFwID0gaTJjX3ZlcmlmeV9hZGFwdGVyKGNoaWxkKTtcbitcdGlmIChhZGQpIHtcbiBcdFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXCJpMmNcIik7XG4tXHRlbHNlXG4rXHRcdC8qIE9ubHkgdGhlIGNhcmQncyBvd24gY29udHJvbGxlcjogYSBtdXggY2hpbGQgYWRkZWQgb24gaXRcbitcdFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXG4rXHRcdCAqIHJlY3ljbGVkLCBzbyB0aGUgY2xhaW0gcmUtY2hlY2tzIHRoZSBwYXJlbnQgaXRzZWxmLlxuK1x0XHQgKi9cbitcdFx0aWYgKGJwLVx1MDAzZWkyY19jdHJsIFx1MDAyNlx1MDAyNiBhZGFwLVx1MDAzZWRldi5wYXJlbnQgPT0gXHUwMDI2YnAtXHUwMDNlaTJjX2N0cmwtXHUwMDNlZGV2KVxuK1x0XHRcdFdSSVRFX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9uciwgYWRhcC1cdTAwM2Vucik7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXG4rXHRcdGlmIChSRUFEX09OQ0UoYnAtXHUwMDNlY3BsZF9pMmNfYWRhcF9ucikgPT0gYWRhcC1cdTAwM2VucilcbitcdFx0XHRXUklURV9PTkNFKGJwLVx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIC0xKTtcbiBcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2YnAtXHUwMDNlZGV2LmtvYmosIFwiaTJjXCIpO1xuLVxuK1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjc6MjIuMTkzNjIxMjE5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTI2MDY1OTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGRvaW5nLiBJIHNlZSBpdCB0b3VjaGVzIHNldmVyYWwgZmlsZXM6IGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkYCwgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdGAsIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9wdHBfb2NwLnJzdGAsIGBNQUlOVEFJTkVSU2AsIGFuZCBjcnVjaWFsbHksIGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgLiBTZWVtcyBsaWtlIGEgZG9jdW1lbnRhdGlvbiB1cGRhdGUsIGEgbGlrZWx5IEFCSSBjaGFuZ2UsIHNvbWUgbmV0d29ya2luZyByZWxhdGVkIGNoYW5nZXMgYW5kIGEgZHJpdmVyIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgZWFjaCwgYnV0IGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGlzIHdoZXJlIHRoZSBtZWF0IG9mIHRoZSB3b3JrIGlzIHByb2JhYmx5LlxuXG5SaWdodCwgc28gd2hhdCdzIGBwdHBfb2NwLmNgPyBBIHF1aWNrIHNjYW4gdGVsbHMgbWUgaXQncyBhbiBPcGVuQ29tcHV0ZSBQVFAgY2xvY2sgZHJpdmVyLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJIHNob3VsZCBjaGVjayB3aGF0IGRldmljZXMgdGhpcyBkcml2ZXIgYWN0dWFsbHkgc3VwcG9ydHM7IGJpbmRpbmcgdG8gUENJIGRldmljZXMgc2VlbXMgdGhlIG1vc3QgbGlrZWx5LCBsZXQncyBxdWlja2x5IGdyZXAgaW4gdGhlIGBwdHBfb2NwLmNgIGZvciBhbnkgYHBjaV9kZXZpY2VfaWRgIGVudHJpZXMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgZHJpdmVyIGlzIHVzZWQsIGFuZCB3aGF0IGRldmljZXMgaXQgaW50ZXJmYWNlcyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjI3OjMxLjQ1NDI4MzU1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwNDUyOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTU9EVUxFX0RFVklDRV9UQUJMRVxcXFwocGNpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcHRwL3B0cF9vY3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmM9MTMxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMzI0LX07XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMjU6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHB0cF9vY3BfcGNpZGV2X2lkKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjc6MzEuNTcyMzMzNDk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4OTk1ODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFBUUE9DUCBEZXZpY2UgSUQgVGFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBQVFBPQ1AgZHJpdmVyIChgZHJpdmVycy9wdHAvcHRwX29jcC5jYCkgaWRlbnRpZmllcyBhbmQgaGFuZGxlcyBzcGVjaWZpYyBoYXJkd2FyZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIGNyaXRpY2FsIHN0ZXAgaW4gZGVidWdnaW5nL3VuZGVyc3RhbmRpbmcsIGlzIHRvIGV4YW1pbmUgdGhlIGBwY2lfZGV2aWNlX2lkYCB0YWJsZS4gVGhhdCB0YWJsZSBpcyB0aGUgaG9seSBncmFpbCBmb3IgYSBQQ0kgZGV2aWNlIGRyaXZlci4gSXQgY29udGFpbnMgdGhlIGFsbC1pbXBvcnRhbnQgdmVuZG9yIElEcywgZGV2aWNlIElEcywgYW5kIHNvbWV0aW1lcyBzdWJzeXN0ZW0gSURzLCB0aGF0IHRoZSBkcml2ZXIgdXNlcyB0byBjbGFpbSBkZXZpY2VzIGR1cmluZyBwcm9iZS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRldmljZSBJRHMgbWF0Y2ggdGhlIGRldmljZXMgSSdtIGV4YW1pbmluZywgb3IgdW5kZXJzdGFuZCB3aHkgdGhleSBkb24ndC4gSXQgd2lsbCBnaXZlIG1lIGEgZmlyc3QgY2x1ZSBvbiB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk0NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjI3OjM0LjI2MjI5NDAyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxMDpcXHRcXHRcXHRcXHQuYXR0cl9ncm91cHMgID0gYWR2YV90aW1lY2FyZF94MV9ncm91cHMsXFxuMTMxMTpcXHRcXHRcXHRcXHQuaGFzX2NwbGQgICAgID0gdHJ1ZSxcXG4xMzEyOlxcdFxcdFxcdH0sXFxuMTMxMzpcXHRcXHR9LFxcbjEzMTQ6XFx0XFx0eyB9XFxuMTMxNTpcXHR9O1xcbjEzMTY6XFx0XFxuMTMxNzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHRwX29jcF9wY2lkZXZfaWRbXSA9IHtcXG4xMzE4OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIFRJTUVDQVJELCBcXHUwMDI2b2NwX2ZiX3Jlc291cmNlKSB9LFxcbjEzMTk6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQ0VMRVNUSUNBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9mYl9yZXNvdXJjZSkgfSxcXG4xMzIwOlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKE9ST0xJQSwgQVJUQ0FSRCwgXFx1MDAyNm9jcF9hcnRfcmVzb3VyY2UpIH0sXFxuMTMyMTpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRCwgXFx1MDAyNm9jcF9hZHZhX3Jlc291cmNlKSB9LFxcbjEzMjI6XFx0XFx0eyBQQ0lfREVWSUNFX0RBVEEoQURWQSwgVElNRUNBUkRfWDEsIFxcdTAwMjZvY3BfYWR2YV94MV9yZXNvdXJjZSkgfSxcXG4xMzIzOlxcdFxcdHsgfVxcbjEzMjQ6XFx0fTtcXG4xMzI1OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XFxuMTMyNjpcXHRcXG4xMzI3OlxcdHN0YXRpYyBERUZJTkVfTVVURVgocHRwX29jcF9sb2NrKTtcXG4xMzI4OlxcdHN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcXG4xMzI5OlxcdFxcbjEzMzA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc2VsZWN0b3IgcHRwX29jcF9jbG9ja1tdID0ge1xcbjEzMzE6XFx0XFx0eyAubmFtZSA9IFxcXCJOT05FXFxcIixcXHQudmFsdWUgPSAwIH0sXFxuMTMzMjpcXHRcXHR7IC5uYW1lID0gXFxcIlRPRFxcXCIsXFx0LnZhbHVlID0gMSB9LFxcbjEzMzM6XFx0XFx0eyAubmFtZSA9IFxcXCJJUklHXFxcIixcXHQudmFsdWUgPSAyIH0sXFxuMTMzNDpcXHRcXHR7IC5uYW1lID0gXFxcIlBQU1xcXCIsXFx0LnZhbHVlID0gMyB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzozNC4yNjI1ODQ3NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDgxNTE3NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgQ3JpdGVyaWEqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBiYXNlZCBvbiBzb21lIG5lZ2F0aXZlIGNyaXRlcmlhLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHJldHVybiBgZmFsc2VgIE9OTFkgaWYgYWxsIHRoZSBjaGFuZ2VkIGNvZGUgZmFsbHMgaW50byBzcGVjaWZpYyBjYXRlZ29yaWVzLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBuZWdhdGl2ZSBjb25kaXRpb25zOiBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsIGFuZCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXG5cbkhtbSwgdGhpcyBgcHRwX29jcGAgZHJpdmVyLi4uIGRvZXMgaXQgZmFsbCB1bmRlciB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjYXRlZ29yeT8gVGhhdCBzZWN0aW9uIHNwZWNpZmljYWxseSBtZW50aW9ucyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhlIGtpbmQgdGhhdCBuZWVkIGFjdHVhbCBoYXJkd2FyZSwgbm90IFFFTVUgZW11bGF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBhcHBseSB0byBgcHRwX29jcGA/XG5cbkkgbmVlZCBtb3JlIGluZm9ybWF0aW9uLiBMZXQgbWUgc2VlLi4uIEkgaGF2ZSBzb21lIFBDSSBJRHMgaGVyZTogYFBDSV9WRU5ET1JfSURfTUVUQWAsIGBQQ0lfREVWSUNFX0lEX01FVEFfVElNRUNBUkRgLCBhbmQgb3RoZXJzIGxpa2UgQ2VsZXN0aWNhLCBPcm9saWEsIGFuZCBBRFZBLiBUaGVzZSAqbG9vayogbGlrZSB0aW1lIGNhcmRzLiBUaGV5J3JlIGFsbCBmb3Igc3BlY2lhbGl6ZWQgUFRQIHRpbWUgY2FyZCBQQ0llIGNhcmRzLCByZWxhdGVkIHRvIHRoZSBPcGVuQ29tcHV0ZSBUaW1lIEFwcGxpYW5jZSBQcm9qZWN0LCB0aGUgXCJUaW1lIENhcmRcIi5cblxuUmlnaHQsIHRoaXMgaGFyZHdhcmUgaXNuJ3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVhc2lseSBlbXVsYXRlZCBpbiBRRU1VLiBUaGV5IHJlcXVpcmUgZGVkaWNhdGVkIGhhcmR3YXJlLiBNeSBuZXh0IGNoZWNrIHdvdWxkIGJlIHRvIGNvbmZpcm0gdGhpcy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYW55IHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiByZWxhdGVkIHRvIGBwdHBfb2NwYC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCBmaWxlIGFuZCBvdGhlciByZWxldmFudCBrZXJuZWwgY29kZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCBjYW4gYmUgaW5zdGFudGlhdGVkIHZpYSBzb21lIG1vY2ssIHZpcnR1YWwsIG9yIG90aGVyIHNvZnR3YXJlLWJhc2VkIG1ldGhvZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2ODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyNzo1OS4wNzc3NjI2NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNzc0MzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdHBfb2NwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjEwMSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9wdHAvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1BUUF8xNTg4X0NMT0NLX1ZNVylcXHQrPSBwdHBfdm13Lm9cXG5kcml2ZXJzL3B0cC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfT0NQKVxcdCs9IHB0cF9vY3Aub1xcbmRyaXZlcnMvcHRwL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19QVFBfREZMX1RPRClcXHRcXHQrPSBwdHBfZGZsX3RvZC5vXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NDg9c3RydWN0IG9jcF9yZWcge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTcyLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo3MzpzdHJ1Y3QgcHRwX29jcF9zZXJ2b19jb25mIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzQtXFx0dTMyXFx0c2Vydm9fb2Zmc2V0X3A7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODEtICogQ29tYmluZWQgc2Vydm8gKyBib2FyZC12YXJpYW50IHBhcmFtZXRlcnMgZm9yIEFEVkEgYm9hcmRzLlxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4MjogKiBFbWJlZGRlZCBpbiB0aGUgcmVzb3VyY2UgdGFibGUgLmV4dHJhIHNvIGEgc2luZ2xlIHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KClcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODMtICogY2FuIGhhbmRsZSBib3RoIEFEVkEgYW5kIEFEVkEtWDEgd2l0aG91dCBwZXItdmFyaWFudCBpbml0IGZ1bmN0aW9ucy5cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODQtICovXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1OnN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbyB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg2OlxcdHN0cnVjdCBwdHBfb2NwX3NlcnZvX2NvbmZcXHRzZXJ2bztcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODctXFx0dTMyXFx0XFx0XFx0XFx0Zmxhc2hfc3RhcnQ7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjQzPXN0cnVjdCBib2FyZF9jb25maWdfcmVnIHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yNTEtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI1MjpzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjUzLVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjU4LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNTk6c3RydWN0IHB0cF9vY3BfZmlybXdhcmVfaGVhZGVyIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjYwLVxcdGNoYXIgbWFnaWNbNF07XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjY5LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyNzA6c3RydWN0IHB0cF9vY3BfaTJjX2luZm8ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yNzEtXFx0Y29uc3QgY2hhciAqbmFtZTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yNzYtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI3NzpzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbyB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI3OC1cXHRpbnQgaW5kZXg7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjgyLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyODM6c3RydWN0IHB0cF9vY3BfZXh0X3NyYyB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTI4NC1cXHR2b2lkIF9faW9tZW1cXHRcXHQqbWVtO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyODU6XFx0c3RydWN0IHB0cF9vY3BcXHRcXHQqYnA7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI4NjpcXHRzdHJ1Y3QgcHRwX29jcF9leHRfaW5mb1xcdCppbmZvO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yODctXFx0aW50XFx0XFx0XFx0aXJxX3ZlYztcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yODktXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjI5MDplbnVtIHB0cF9vY3Bfc21hX21vZGUge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTEtXFx0U01BX01PREVfSU4sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjk0LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyOTU6c3RhdGljIHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgcHRwX29jcF9zbWFfZnJlcVtdID0ge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0yOTYtXFx0RFBMTF9QSU5fRlJFUVVFTkNZXzFQUFMsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzAxLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMDI6c3RydWN0IHB0cF9vY3Bfc21hX2Nvbm5lY3RvciB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMwMzpcXHRlbnVtXFx0cHRwX29jcF9zbWFfbW9kZSBtb2RlO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMDQtXFx0Ym9vbFxcdGZpeGVkX2ZjbjtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0zMjQ9c3RydWN0IG9jcF9zbWFfb3Age1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zMjUtXFx0Y29uc3Qgc3RydWN0IG9jcF9zZWxlY3RvciAqdGJsWzJdO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMjY6XFx0dm9pZCAoKmluaXQpKHN0cnVjdCBwdHBfb2NwICpicCk7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMyNzpcXHR1MzIgKCpnZXQpKHN0cnVjdCBwdHBfb2NwICpicCwgaW50IHNtYV9ucik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjMyODpcXHRpbnQgKCpzZXRfaW5wdXRzKShzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBzbWFfbnIsIHUzMiB2YWwpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMjk6XFx0aW50ICgqc2V0X291dHB1dCkoc3RydWN0IHB0cF9vY3AgKmJwLCBpbnQgc21hX25yLCB1MzIgdmFsKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzMwLX07XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzM1LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozMzY6c3RydWN0IHB0cF9vY3Bfc2lnbmFsIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzM3LVxcdGt0aW1lX3RcXHRcXHRwZXJpb2Q7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzQ1LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozNDY6c3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0zNDctXFx0aW50IGxpbmU7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9MzU3PWVudW0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTM2NS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MzY2OnN0cnVjdCBwdHBfb2NwIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzY3LVxcdHN0cnVjdCBwY2lfZGV2XFx0XFx0KnBkZXY7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzgzLVxcdHN0cnVjdCBmcmVxdWVuY3lfcmVnXFx0X19pb21lbSAqZnJlcV9pbltPQ1BfRlJFUV9OVU1dO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODQ6XFx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1xcdCpzaWduYWxfb3V0W09DUF9TSUdOQUxfTlVNXTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg1OlxcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcXHQqcHBzO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODY6XFx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1xcdCp0czA7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM4NzpcXHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXFx0KnRzMTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Mzg4OlxcdHN0cnVjdCBwdHBfb2NwX2V4dF9zcmNcXHQqdHMyO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzozODk6XFx0c3RydWN0IHB0cF9vY3BfZXh0X3NyY1xcdCp0czM7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjM5MDpcXHRzdHJ1Y3QgcHRwX29jcF9leHRfc3JjXFx0KnRzNDtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzkxLVxcdHN0cnVjdCBvY3BfYXJ0X2dwaW9fcmVnIF9faW9tZW0gKmFydF9zbWE7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMzk5LVxcdGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKiphdHRyX2dyb3VwO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MDA6XFx0Y29uc3Qgc3RydWN0IHB0cF9vY3BfZWVwcm9tX21hcCAqZWVwcm9tX21hcDtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDAxLVxcdHN0cnVjdCBkZW50cnlcXHRcXHQqZGVidWdfcm9vdDtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MDYtXFx0aW50XFx0XFx0XFx0bl9pcnFzO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MDc6XFx0c3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnRcXHRwb3J0W19fUE9SVF9DT1VOVF07XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQwOC1cXHRib29sXFx0XFx0XFx0ZndfbG9hZGVyO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQxOC1cXHR1NjRcXHRcXHRcXHRmd19jYXA7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQxOTpcXHRzdHJ1Y3QgcHRwX29jcF9zaWduYWxcXHRzaWduYWxbT0NQX1NJR05BTF9OVU1dO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0MjA6XFx0c3RydWN0IHB0cF9vY3Bfc21hX2Nvbm5lY3RvciBzbWFbT0NQX1NNQV9OVU1dO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00MjEtXFx0Y29uc3Qgc3RydWN0IG9jcF9zbWFfb3AgKnNtYV9vcDtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00NTI9c3RydWN0IG9jcF9yZXNvdXJjZSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDU1LVxcdGludCBpcnFfdmVjO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NTY6XFx0aW50ICgqc2V0dXApKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ1Ny1cXHR2b2lkICpleHRyYTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NjEtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2MjpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfbWVtKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2MzpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfaTJjKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NDpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfc3BpKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NTpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfc2VyaWFsKHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NjpzdGF0aWMgaW50IHB0cF9vY3BfcmVnaXN0ZXJfZXh0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ2NzpzdGF0aWMgaW50IHB0cF9vY3BfZmJfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0Njg6c3RhdGljIGlycXJldHVybl90IHB0cF9vY3BfdHNfaXJxKGludCBpcnEsIHZvaWQgKnByaXYpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0Njk6c3RhdGljIGlycXJldHVybl90IHB0cF9vY3Bfc2lnbmFsX2lycShpbnQgaXJxLCB2b2lkICpwcml2KTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDcwOnN0YXRpYyBpbnQgcHRwX29jcF90c19lbmFibGUodm9pZCAqcHJpdiwgdTMyIHJlcSwgYm9vbCBlbmFibGUpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzE6c3RhdGljIGludCBwdHBfb2NwX3NpZ25hbF9mcm9tX3Blcm91dChzdHJ1Y3QgcHRwX29jcCAqYnAsIGludCBnZW4sXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3Mi1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXEpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzM6c3RhdGljIGludCBwdHBfb2NwX3NpZ25hbF9lbmFibGUodm9pZCAqcHJpdiwgdTMyIHJlcSwgYm9vbCBlbmFibGUpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo0NzQ6c3RhdGljIGludCBwdHBfb2NwX3NtYV9zdG9yZShzdHJ1Y3QgcHRwX29jcCAqYnAsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IHNtYV9ucik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3NS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NDc2OnN0YXRpYyBpbnQgcHRwX29jcF9hcnRfYm9hcmRfaW5pdChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBvY3BfcmVzb3VyY2UgKnIpO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00NzctXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ3ODpzdGF0aWMgaW50IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0KHN0cnVjdCBwdHBfb2NwICpicCwgc3RydWN0IG9jcF9yZXNvdXJjZSAqcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTQ3OS1cXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00ODE9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3Bfc21hX29wIG9jcF9hZHZhX3gxX3NtYV9vcDtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00ODUtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ4NjpzdGF0aWMgaW50IGFkdmFfeDFfY3BsZF9mbGFzaChzdHJ1Y3QgcHRwX29jcCAqYnAsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00ODctXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz00OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvY3BfYXR0cl9ncm91cCBhZHZhX3RpbWVjYXJkX3gxX2dyb3Vwc1tdO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy00OTctXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjQ5ODpzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNDk5LVxcdHUxNlxcdG9mZjtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MDYtXFx0Lm9mZiA9IGFkZHIsXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MDc6XFx0LmxlbiA9IHNpemVvZl9maWVsZChzdHJ1Y3QgcHRwX29jcCwgbWVtYmVyKSxcXHRcXHRcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUwODpcXHQuYnBfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHB0cF9vY3AsIG1lbWJlcilcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTA5LVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMy1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTE0OnN0YXRpYyBzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIGZiX2VlcHJvbV9tYXBbXSA9IHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTE1LVxcdHsgRUVQUk9NX0VOVFJZKDB4NDMsIGJvYXJkX2lkKSB9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxOS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTIwOnN0YXRpYyBzdHJ1Y3QgcHRwX29jcF9lZXByb21fbWFwIGFydF9lZXByb21fbWFwW10gPSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUyMS1cXHR7IEVFUFJPTV9FTlRSWSgweDIwMCArIDB4NDMsIGJvYXJkX2lkKSB9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzMS0jZGVmaW5lIE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSBcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzMjpcXHQubmFtZSA9ICNtZW1iZXIsIC5icF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcHRwX29jcCwgbWVtYmVyKVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MzMtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzNC0jZGVmaW5lIE9DUF9NRU1fUkVTT1VSQ0UobWVtYmVyKSBcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUzNTpcXHRPQ1BfUkVTX0xPQ0FUSU9OKG1lbWJlciksIC5zZXR1cCA9IHB0cF9vY3BfcmVnaXN0ZXJfbWVtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUzNi1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTM3LSNkZWZpbmUgT0NQX1NFUklBTF9SRVNPVVJDRShtZW1iZXIpIFxcXFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTM4OlxcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9zZXJpYWxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTM5LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDAtI2RlZmluZSBPQ1BfSTJDX1JFU09VUkNFKG1lbWJlcikgXFxcXFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1NDE6XFx0T0NQX1JFU19MT0NBVElPTihtZW1iZXIpLCAuc2V0dXAgPSBwdHBfb2NwX3JlZ2lzdGVyX2kyY1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01NDItXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0My0jZGVmaW5lIE9DUF9TUElfUkVTT1VSQ0UobWVtYmVyKSBcXFxcXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU0NDpcXHRPQ1BfUkVTX0xPQ0FUSU9OKG1lbWJlciksIC5zZXR1cCA9IHB0cF9vY3BfcmVnaXN0ZXJfc3BpXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU0NS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQ2LSNkZWZpbmUgT0NQX0VYVF9SRVNPVVJDRShtZW1iZXIpIFxcXFxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTQ3OlxcdE9DUF9SRVNfTE9DQVRJT04obWVtYmVyKSwgLnNldHVwID0gcHRwX29jcF9yZWdpc3Rlcl9leHRcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTQ4LVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTU3Nj1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfZmJfcmVzb3VyY2VbXSA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01ODMtXFx0XFx0Lm9mZnNldCA9IDB4MDEwMTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1ODQ6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01ODUtXFx0XFx0XFx0LmluZGV4ID0gMCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTg2OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU4NzpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU4OC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU5Mi1cXHRcXHQub2Zmc2V0ID0gMHgwMTAyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjU5MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTU5NC1cXHRcXHRcXHQuaW5kZXggPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1OTU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTk2OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTk3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxLVxcdFxcdC5vZmZzZXQgPSAweDAxMDYwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjAyOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAzLVxcdFxcdFxcdC5pbmRleCA9IDIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYwNDpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MDU6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MDYtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTAtXFx0XFx0Lm9mZnNldCA9IDB4MDExMTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjExOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjEyLVxcdFxcdFxcdC5pbmRleCA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYxMzpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MTQ6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTUtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MTktXFx0XFx0Lm9mZnNldCA9IDB4MDExMjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxNixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjIwOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjIxLVxcdFxcdFxcdC5pbmRleCA9IDQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYyMjpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MjM6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MjQtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MjktXFx0XFx0Lm9mZnNldCA9IDB4MDEwQzAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2MzA6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02MzEtXFx0XFx0XFx0LmluZGV4ID0gNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjMyOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjYzMzpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYzNC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYzOC1cXHRcXHQub2Zmc2V0ID0gMHgwMTBEMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDExLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Mzk6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NDAtXFx0XFx0XFx0LmluZGV4ID0gMSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjQxOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NDI6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjQzLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjQ3LVxcdFxcdC5vZmZzZXQgPSAweDAxMEUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY0ODpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY0OS1cXHRcXHRcXHQuaW5kZXggPSAyLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NTA6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1MTpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF9zaWduYWxfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NTItXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NTYtXFx0XFx0Lm9mZnNldCA9IDB4MDEwRjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjU3OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjU4LVxcdFxcdFxcdC5pbmRleCA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjY1OTpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjYwOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2MS1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTY2NS1cXHRcXHQub2Zmc2V0ID0gMHgwMTEwMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2NjY6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy02NjctXFx0XFx0XFx0LmluZGV4ID0gNCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjY4OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo2Njk6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjcwLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzIyLVxcdFxcdC5vZmZzZXQgPSAweDAwMTUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzIzOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfaTJjX2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzI0LVxcdFxcdFxcdC5uYW1lID0gXFxcInhpaWMtaTJjXFxcIixcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03MzktXFx0XFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NzQwOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzQxLVxcdFxcdFxcdC5iYXVkID0gMTE1MjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc0Ni1cXHRcXHQub2Zmc2V0ID0gMHgwMDE3MDAwMCArIDB4MTAwMCwgLmlycV92ZWMgPSA0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo3NDc6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9zZXJpYWxfcG9ydCkge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03NDgtXFx0XFx0XFx0LmJhdWQgPSAxMTUyMDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzUzLVxcdFxcdC5vZmZzZXQgPSAweDAwMTgwMDAwICsgMHgxMDAwLCAuaXJxX3ZlYyA9IDUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc1NDpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc1NS1cXHRcXHRcXHQuYmF1ZCA9IDU3NjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTc2NC1cXHRcXHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjc2NTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2ZsYXNoX2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzY2LVxcdFxcdFxcdC5uYW1lID0gXFxcInhpbGlueF9zcGlcXFwiLCAucGNpX29mZnNldCA9IDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNzk1LVxcdHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Nzk2OlxcdFxcdC5zZXR1cCA9IHB0cF9vY3BfZmJfYm9hcmRfaW5pdCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6Nzk3OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2Vydm9fY29uZikge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy03OTgtXFx0XFx0XFx0LnNlcnZvX29mZnNldF9wID0gMHgyMDAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTgxNz1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYXJ0X3Jlc291cmNlW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODI0LVxcdFxcdC5vZmZzZXQgPSAweDAwMTYwMDAwICsgMHgxMDAwLCAuaXJxX3ZlYyA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgyNTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTgyNi1cXHRcXHRcXHQuYmF1ZCA9IDExNTIwMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04MzYtXFx0XFx0Lm9mZnNldCA9IDB4MzYwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjgzNzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTgzOC1cXHRcXHRcXHQuaW5kZXggPSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4Mzk6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODQwOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODQxLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODQ1LVxcdFxcdC5vZmZzZXQgPSAweDM4MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDgsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg0NjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg0Ny1cXHRcXHRcXHQuaW5kZXggPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NDg6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODQ5OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODUwLVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODU0LVxcdFxcdC5vZmZzZXQgPSAweDM5MDAwMCwgLnNpemUgPSAweDIwLCAuaXJxX3ZlYyA9IDEwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NTU6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NTYtXFx0XFx0XFx0LmluZGV4ID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODU3OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg1ODpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg1OS1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg2My1cXHRcXHQub2Zmc2V0ID0gMHgzQTAwMDAsIC5zaXplID0gMHgyMCwgLmlycV92ZWMgPSAxNCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODY0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODY1LVxcdFxcdFxcdC5pbmRleCA9IDMsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg2NjpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4Njc6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NjgtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04NzItXFx0XFx0Lm9mZnNldCA9IDB4M0IwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg3MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg3NC1cXHRcXHRcXHQuaW5kZXggPSA0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4NzU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODc2OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODc3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODgyLVxcdFxcdC5vZmZzZXQgPSAweDAwMzMwMDAwLCAuc2l6ZSA9IDB4MjAsIC5pcnFfdmVjID0gMTEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjg4MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTg4NC1cXHRcXHRcXHQuaW5kZXggPSA1LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo4ODU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODg2OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODg3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtODkxLVxcdFxcdC5vZmZzZXQgPSAweDAwMzEwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gOSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6ODkyOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZmxhc2hfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy04OTMtXFx0XFx0XFx0Lm5hbWUgPSBcXFwic3BpX2FsdGVyYVxcXCIsIC5wY2lfb2Zmc2V0ID0gMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MDYtXFx0XFx0Lm9mZnNldCA9IDB4MzUwMDAwLCAuc2l6ZSA9IDB4MTAwLCAuaXJxX3ZlYyA9IDQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjkwNzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTkwOC1cXHRcXHRcXHQubmFtZSA9IFxcXCJvY29yZXMtaTJjXFxcIixcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MjMtXFx0XFx0Lm9mZnNldCA9IDB4MDAxOTAwMDAsIC5pcnFfdmVjID0gNyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTI0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2VyaWFsX3BvcnQpIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTI1LVxcdFxcdFxcdC5iYXVkID0gOTYwMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MzItXFx0e1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5MzM6XFx0XFx0LnNldHVwID0gcHRwX29jcF9hcnRfYm9hcmRfaW5pdCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTM0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3Bfc2Vydm9fY29uZikge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05MzUtXFx0XFx0XFx0LnNlcnZvX29mZnNldF9wID0gMHgyMDAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTk0ND1zdGF0aWMgc3RydWN0IG9jcF9yZXNvdXJjZSBvY3BfYWR2YV9yZXNvdXJjZVtdID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk1MS1cXHRcXHQub2Zmc2V0ID0gMHgwMTAxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk1MjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk1My1cXHRcXHRcXHQuaW5kZXggPSAwLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NTQ6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTU1OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTU2LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTYwLVxcdFxcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTYxOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTYyLVxcdFxcdFxcdC5pbmRleCA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk2MzpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NjQ6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjUtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NjktXFx0XFx0Lm9mZnNldCA9IDB4MDEwNjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA2LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5NzA6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05NzEtXFx0XFx0XFx0LmluZGV4ID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTcyOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk3MzpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk3NC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk3OS1cXHRcXHQub2Zmc2V0ID0gMHgwMTBDMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDAsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4MDpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk4MS1cXHRcXHRcXHQuaW5kZXggPSA1LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5ODI6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTgzOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTg0LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTg4LVxcdFxcdC5vZmZzZXQgPSAweDAxMEQwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk4OTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTk5MC1cXHRcXHRcXHQuaW5kZXggPSAxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo5OTE6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjk5MjpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF9zaWduYWxfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTMtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy05OTctXFx0XFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6OTk4OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtOTk5LVxcdFxcdFxcdC5pbmRleCA9IDIsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwMDA6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwMDE6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTAwMi1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwMzQtXFx0XFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTAzNTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwMzYtXFx0XFx0XFx0LmJhdWQgPSA5NjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNDEtXFx0XFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA0MjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNDMtXFx0XFx0XFx0LmJhdWQgPSAxMTUyMDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA1Ni1cXHRcXHQub2Zmc2V0ID0gMHgwMDMxMDQwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEwNTc6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEwNTgtXFx0XFx0XFx0Lm5hbWUgPSBcXFwic3BpX2FsdGVyYVxcXCIsIC5wY2lfb2Zmc2V0ID0gMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDcxLVxcdFxcdC5vZmZzZXQgPSAweDE1MDAwMCwgLnNpemUgPSAweDEwMCwgLmlycV92ZWMgPSA3LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMDcyOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfaTJjX2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTA3My1cXHRcXHRcXHQubmFtZSA9IFxcXCJvY29yZXMtaTJjXFxcIixcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDkwLVxcdHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MTpcXHRcXHQuc2V0dXAgPSBwdHBfb2NwX2FkdmFfYm9hcmRfaW5pdCxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTA5MjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2FkdmFfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMDkzLVxcdFxcdFxcdC5zZXJ2byA9IHtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz0xMTA5PXN0YXRpYyBzdHJ1Y3Qgb2NwX3Jlc291cmNlIG9jcF9hZHZhX3gxX3Jlc291cmNlW10gPSB7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTExNi1cXHRcXHQub2Zmc2V0ID0gMHgwMTAxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMTc6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTE4LVxcdFxcdFxcdC5pbmRleCA9IDAsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMTk6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyMDpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjEtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTI1LVxcdFxcdC5vZmZzZXQgPSAweDAxMDIwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyNjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMjctXFx0XFx0XFx0LmluZGV4ID0gMSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTEyODpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3BfdHNfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTI5OlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3RzX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTEzMC1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExMzQtXFx0XFx0Lm9mZnNldCA9IDB4MDEwNjAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSA2LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTM1OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTEzNi1cXHRcXHRcXHQuaW5kZXggPSAyLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTM3OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExMzg6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTM5LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE0My1cXHRcXHQub2Zmc2V0ID0gMHgwMTExMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE1LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTQ0OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE0NS1cXHRcXHRcXHQuaW5kZXggPSAzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTQ2OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNDc6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTQ4LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE1Mi1cXHRcXHQub2Zmc2V0ID0gMHgwMTEyMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDE2LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTUzOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE1NC1cXHRcXHRcXHQuaW5kZXggPSA0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTU1OlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF90c19pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNTY6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3BfdHNfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTU3LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE2Mi1cXHRcXHQub2Zmc2V0ID0gMHgwMTBDMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDAsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNjM6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTY0LVxcdFxcdFxcdC5pbmRleCA9IDUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNjU6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3RzX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE2NjpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF90c19lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExNjctXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTcxLVxcdFxcdC5vZmZzZXQgPSAweDAxMEQwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNzI6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTczLVxcdFxcdFxcdC5pbmRleCA9IDEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNzQ6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExNzU6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE3Ni1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExODAtXFx0XFx0Lm9mZnNldCA9IDB4MDEwRTAwMDAsIC5zaXplID0gMHgxMDAwMCwgLmlycV92ZWMgPSAxMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4MTpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2V4dF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExODItXFx0XFx0XFx0LmluZGV4ID0gMixcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4MzpcXHRcXHRcXHQuaXJxX2ZjbiA9IHB0cF9vY3Bfc2lnbmFsX2lycSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTE4NDpcXHRcXHRcXHQuZW5hYmxlID0gcHRwX29jcF9zaWduYWxfZW5hYmxlLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTg1LVxcdFxcdH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE4OS1cXHRcXHQub2Zmc2V0ID0gMHgwMTBGMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDEzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkwOlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfZXh0X2luZm8pIHtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTE5MS1cXHRcXHRcXHQuaW5kZXggPSAzLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkyOlxcdFxcdFxcdC5pcnFfZmNuID0gcHRwX29jcF9zaWduYWxfaXJxLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMTkzOlxcdFxcdFxcdC5lbmFibGUgPSBwdHBfb2NwX3NpZ25hbF9lbmFibGUsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTExOTQtXFx0XFx0fSxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMTk4LVxcdFxcdC5vZmZzZXQgPSAweDAxMTAwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gMTQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjExOTk6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9leHRfaW5mbykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjAwLVxcdFxcdFxcdC5pbmRleCA9IDQsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyMDE6XFx0XFx0XFx0LmlycV9mY24gPSBwdHBfb2NwX3NpZ25hbF9pcnEsXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyMDI6XFx0XFx0XFx0LmVuYWJsZSA9IHB0cF9vY3Bfc2lnbmFsX2VuYWJsZSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTIwMy1cXHRcXHR9LFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyMzUtXFx0XFx0Lm9mZnNldCA9IDB4MDAxNjAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gMyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTIzNjpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyMzctXFx0XFx0XFx0LmJhdWQgPSA5NjAwLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDItXFx0XFx0Lm9mZnNldCA9IDB4MDAxODAwMDAgKyAweDEwMDAsIC5pcnFfdmVjID0gNSxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI0MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX3NlcmlhbF9wb3J0KSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNDQtXFx0XFx0XFx0LmJhdWQgPSAxMTUyMDAsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTI2NS1cXHRcXHQub2Zmc2V0ID0gMHgwMDMxMDAwMCwgLnNpemUgPSAweDEwMDAwLCAuaXJxX3ZlYyA9IDksXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEyNjY6XFx0XFx0LmV4dHJhID0gXFx1MDAyNihzdHJ1Y3QgcHRwX29jcF9mbGFzaF9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyNjctXFx0XFx0XFx0Lm5hbWUgPSBcXFwieGlsaW54X3NwaVxcXCIsIC5wY2lfb2Zmc2V0ID0gMCxcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy0xMjgyLVxcdFxcdC5vZmZzZXQgPSAweDAwMTUwMDAwLCAuc2l6ZSA9IDB4MTAwMDAsIC5pcnFfdmVjID0gNyxcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6MTI4MzpcXHRcXHQuZXh0cmEgPSBcXHUwMDI2KHN0cnVjdCBwdHBfb2NwX2kyY19pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyODQtXFx0XFx0XFx0Lm5hbWUgPSBcXFwieGlpYy1pMmNcXFwiLFxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEyOTctXFx0e1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjk4OlxcdFxcdC5zZXR1cCA9IHB0cF9vY3BfYWR2YV9ib2FyZF9pbml0LFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMjk5OlxcdFxcdC5leHRyYSA9IFxcdTAwMjYoc3RydWN0IHB0cF9vY3BfYWR2YV9pbmZvKSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMDAtXFx0XFx0XFx0LnNlcnZvID0ge1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMTYtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMTc6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9vY3BfcGNpZGV2X2lkW10gPSB7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMTgtXFx0eyBQQ0lfREVWSUNFX0RBVEEoTUVUQSwgVElNRUNBUkQsIFxcdTAwMjZvY3BfZmJfcmVzb3VyY2UpIH0sXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyNC19O1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI1Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwdHBfb2NwX3BjaWRldl9pZCk7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTEzMjYtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjEzMjc6c3RhdGljIERFRklORV9NVVRFWChwdHBfb2NwX2xvY2spO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoxMzI4OnN0YXRpYyBERUZJTkVfSURSKHB0cF9vY3BfaWRyKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMTMyOS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MDAuMjA1NTEzMjcyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODA1ODQ0NzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgV29ydGhGdXp6aW5nIENyaXRlcmlhKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biBTZWN0aW9uIDIgb2YgdGhlIHByb21wdC4gSXQncyBlc3NlbnRpYWxseSBvdXRsaW5pbmcgdGhlICpuZWdhdGl2ZSogY3JpdGVyaWEg4oCTIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSBuby1nbyB6b25lcy4gSXQncyB0ZWxsaW5nIG1lLCBkb24ndCB3YXN0ZSB0aW1lIGZ1enppbmcgdGhpcyBjb2RlLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY2F0ZWdvcmllcyBoZXJlOlxuXG4qICAgKipOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOioqIFRoaXMgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgZG9jcywgY29tbWVudHMsIHVzZXItc3BhY2UgdG9vbHMsIGxvZ2dpbmcgdGhhdCdzIHB1cmVseSBkZWNvcmF0aXZlLCBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gVGhpcyBpcyBiYXNpY2FsbHkgc3R1ZmYgdGhhdCB3b24ndCBjaGFuZ2UgdGhlIGNvbXBpbGVkIGtlcm5lbC4gTWFrZXMgc2Vuc2UuXG4qICAgKipTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6KiogQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVmVuZG9yLXNwZWNpZmljIHN0dWZmIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhpbmdzIGxpa2Ugc3BlY2lmaWMgUENJZSBjYXJkcywgU21hcnROSUNzLCBHUFUgZHJpdmVycy4gVGhpcyBpcyB3aGF0IEkgaGF2ZSB0byBmb2N1cyBvbi5cbiogICAqKlVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoqKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIG9ubHkgdXNlZCBkdXJpbmcgaG90LXVucGx1Zywgb3IgY29kZSBleGNsdXNpdmUgdG8gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMsIHNvIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgaGFyZHdhcmUgb3Igc2V0dXAuXG5cbk5vdywgd2FpdCBhIG1pbnV0ZSwgbGV0J3MgZm9jdXMgb24gYHB0cF9vY3BgLiBUaGlzIGlzIGFuIE9wZW4gQ29tcHV0ZSBQcm9qZWN0IChPQ1ApIFRpbWUgQ2FyZCBkcml2ZXIuIFNvLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIOKAkyBpcyB0aGlzIGEgZHJpdmVyIGZvciBwaHlzaWNhbCBQQ0llIGNhcmRzPyBPa2F5LCB5ZXMsIGl0J3MgdGhlIGRyaXZlciBmb3IgdGhlIE9DUCBUaW1lQ2FyZCwgd2hpY2ggaXMgYSBwaHlzaWNhbCBQQ0llIGNhcmQgdGhhdCBwcm92aWRlcyBhdG9taWMgY2xvY2ssIEdOU1MsIGFuZCBQVFAgdGltaW5nIHJlZmVyZW5jZSBmb3Igc2VydmVycyBpbiBkYXRhY2VudGVycy4gTWV0YSBpbml0aWF0ZWQgdGhpcywgSSByZWNhbGwuIEkga25vdyB0aGUgVGltZUNhcmQgZGV2aWNlcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgUENJIGRldmljZXM6IE1ldGEgVGltZUNhcmQsIENlbGVzdGljYSBUaW1lQ2FyZCwgT3JvbGlhIEFydENhcmQsIEFEVkEgVGltZUNhcmQgYW5kIEFEVkEgVGltZUNhcmQgWDEuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgTWV0YSBUaW1lQ2FyZCBvciBBRFZBIFRpbWVDYXJkPyBObyEgUUVNVSAqZG9lc24ndCogZW11bGF0ZSB0aGlzIGhhcmR3YXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludCEgU28sIHNpbmNlIHRoZSBUaW1lQ2FyZCByZWxpZXMgb24gcGh5c2ljYWwgaGFyZHdhcmUsIGl0IGZhbGxzIHVuZGVyIHRoYXQgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogY2F0ZWdvcnkuXG5cbk5vdywgYmVmb3JlIEkgbWFrZSBhIGZpbmFsIGRldGVybWluYXRpb24sIEkgbmVlZCB0byB2ZXJpZnk6IGNhbiBgcHRwX29jcGAgYmUgcHJvYmVkIG9yIGluc3RhbnRpYXRlZCAqd2l0aG91dCogdGhlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmU/IExldCBtZSBjaGVjayBob3cgdGhlIGRyaXZlciBpcyByZWdpc3RlcmVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGhhdmUgYW4gYWx0ZXJuYXRpdmUgcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0NDksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MDguMjYzOTYyMzczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ2OTg4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wdHAvcHRwX29jcC5jPTU5OTc9cHRwX29jcF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNjAxNC1cXHR3aGF0ID0gXFxcInB0cF9vY3AgZHJpdmVyXFxcIjtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NjAxNTpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZwdHBfb2NwX2RyaXZlcik7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTYwMTYtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MDguMzY4NjY4MjU2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1ODQ3MTI5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFBUUCBJbml0aWFsaXphdGlvbiBhbmQgRHJpdmVyIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgUFRQIGNvbXBvbmVudHMgYXJlIGludGVyYWN0aW5nLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBwdHBfb2NwX2luaXRgLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCdzIHNldHRpbmcgdXAgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBjbG9ja3MsIGFuZCBlc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgc3luY2hyb25pemF0aW9uIHN0YXRlLiBBcmUgdGhlcmUgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgcGVyaGFwcyBkdXJpbmcgZWFybHkgYm9vdD8gQXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgc2V0IHVwIGNvcnJlY3RseT8gQW55IGlzc3VlcyBhcm91bmQgY2xvY2sgc291cmNlIHNlbGVjdGlvbj8gQW5kIHRoZW4gSSdsbCBtb3ZlIHRvIHRoZSBgcHRwX29jcF9kcml2ZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBob3cgaXQncyBoYW5kbGluZyB0aGUgUFRQIHRpbWVzdGFtcHMsIGFuZCBob3cgaXQncyBleHBvc2VkIHRvIHRoZSB1c2VyIHNwYWNlLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcz8gQW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIG9yIGRhdGEgdHJhbnNmZXI/IEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYm90aCBvZiB0aGVzZSBtb2R1bGVzLCBlc3BlY2lhbGx5IHRoZSBjYXNlcyB3aGVyZSB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbHMuIEkgYW0gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGlzc3VlcyBhcm91bmQgZGF0YSByYWNlcyBvciBob3cgdGhleSBhcmUgaGFuZGxlZCwgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIGluIGVkZ2UgY2FzZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgZW5kLXRvLWVuZCBQVFAgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNjU0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MTMuOTUzMzgzOTk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk5MDpcXHR9XFxuNTk5MTpcXHRcXG41OTkyOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHRwX29jcF9pMmNfbm90aWZpZXIgPSB7XFxuNTk5MzpcXHRcXHQubm90aWZpZXJfY2FsbCA9IHB0cF9vY3BfaTJjX25vdGlmaWVyX2NhbGwsXFxuNTk5NDpcXHR9O1xcbjU5OTU6XFx0XFxuNTk5NjpcXHRzdGF0aWMgaW50IF9faW5pdFxcbjU5OTc6XFx0cHRwX29jcF9pbml0KHZvaWQpXFxuNTk5ODpcXHR7XFxuNTk5OTpcXHRcXHRjb25zdCBjaGFyICp3aGF0O1xcbjYwMDA6XFx0XFx0aW50IGVycjtcXG42MDAxOlxcdFxcbjYwMDI6XFx0XFx0cHRwX29jcF9kZWJ1Z2ZzX2luaXQoKTtcXG42MDAzOlxcdFxcbjYwMDQ6XFx0XFx0d2hhdCA9IFxcXCJ0aW1lY2FyZCBjbGFzc1xcXCI7XFxuNjAwNTpcXHRcXHRlcnIgPSBjbGFzc19yZWdpc3RlcihcXHUwMDI2dGltZWNhcmRfY2xhc3MpO1xcbjYwMDY6XFx0XFx0aWYgKGVycilcXG42MDA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjYwMDg6XFx0XFxuNjAwOTpcXHRcXHR3aGF0ID0gXFxcImkyYyBub3RpZmllclxcXCI7XFxuNjAxMDpcXHRcXHRlcnIgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmkyY19idXNfdHlwZSwgXFx1MDAyNnB0cF9vY3BfaTJjX25vdGlmaWVyKTtcXG42MDExOlxcdFxcdGlmIChlcnIpXFxuNjAxMjpcXHRcXHRcXHRnb3RvIG91dF9ub3RpZmllcjtcXG42MDEzOlxcdFxcbjYwMTQ6XFx0XFx0d2hhdCA9IFxcXCJwdHBfb2NwIGRyaXZlclxcXCI7XFxuNjAxNTpcXHRcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZwdHBfb2NwX2RyaXZlcik7XFxuNjAxNjpcXHRcXHRpZiAoZXJyKVxcbjYwMTc6XFx0XFx0XFx0Z290byBvdXRfcmVnaXN0ZXI7XFxuNjAxODpcXHRcXG42MDE5OlxcdFxcdHJldHVybiAwO1xcbjYwMjA6XFx0XFxuNjAyMTpcXHRvdXRfcmVnaXN0ZXI6XFxuNjAyMjpcXHRcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2aTJjX2J1c190eXBlLCBcXHUwMDI2cHRwX29jcF9pMmNfbm90aWZpZXIpO1xcbjYwMjM6XFx0b3V0X25vdGlmaWVyOlxcbjYwMjQ6XFx0XFx0Y2xhc3NfdW5yZWdpc3RlcihcXHUwMDI2dGltZWNhcmRfY2xhc3MpO1xcbjYwMjU6XFx0b3V0OlxcbjYwMjY6XFx0XFx0cHRwX29jcF9kZWJ1Z2ZzX2ZpbmkoKTtcXG42MDI3OlxcdFxcdHByX2VycihLQlVJTERfTU9ETkFNRSBcXFwiOiBmYWlsZWQgdG8gcmVnaXN0ZXIgJXM6ICVkXFxcXG5cXFwiLCB3aGF0LCBlcnIpO1xcbjYwMjg6XFx0XFx0cmV0dXJuIGVycjtcXG42MDI5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MTMuOTUzNTg5NjI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNzUwOTUwNzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQURWQSB4MSBUQVAgQm9hcmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBwdHBfb2NwX2RyaXZlcmAuIEl0J3MgZGVmaW5lZCBhcyBhIHN0YW5kYXJkIGBzdHJ1Y3QgcGNpX2RyaXZlcmAsIG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuIFRoZSBpbnRlcmVzdGluZyBiaXQsIGFzIGFsd2F5cywgaXMgaG93IGl0IHByb2Jlcy4gSXQncyB0cmlnZ2VyZWQgYnkgc3BlY2lmaWMgUENJIGRldmljZSBJRHMsIHJpZ2h0PyBBbmQgSSBzZWUgdGhlIHRhYmxlOiBgcHRwX29jcF9wY2lkZXZfaWRgLlxuXG5SaWdodCwgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIEFEVkEgeDEgVEFQIGJvYXJkcyAoYFBDSV9ERVZJQ0VfREFUQShBRFZBLCBUSU1FQ0FSRF9YMSwgXHUwMDI2b2NwX2FkdmFfeDFfcmVzb3VyY2UpYCkuIFRoZXNlIGFyZSBhY3R1YWwgUENJZSBjYXJkcyB3aXRoIHRoZSBQQ0kgSUQgMHhhZDVhOjB4MDQxMC4gVGhlIHBhdGNoJ3MgY29yZSBmdW5jdGlvbnMgcmVsYXRlIHRvIENQTEQgZmxhc2ggdXBkYXRlcyBhbmQgcmVhZGluZyBpdHMgc3RhdHVzIG9uICp0aG9zZSogYm9hcmRzOiBgYWR2YV94MV9jcGxkX2ZsYXNoYCwgYGFkdmFfeDFfY3BsZF9yZWFkX2lkYCwgcGx1cyB0aGUgc3lzZnMgYXR0cmlidXRlIGBjcGxkX3N0YXR1c2AuIEl0J3MgYWRkaW5nIGRldmxpbmsgc3VwcG9ydCBmb3IgZmxhc2hpbmcgYW5kIGluZm9ybWF0aW9uIHJldHJpZXZhbCwgaW5jbHVkaW5nIGBwdHBfb2NwX2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgYHB0cF9vY3BfZGV2bGlua19pbmZvX2dldGAsIGFuZCBgcHRwX29jcF9zeW5jX3dvcmtgLiBUaGVyZSBhcmUgYWxzbyBzb21lIGVycm9yIGZpeGVzIGluIGBwdHBfb2NwX3Byb2JlYCAvIGBwdHBfb2NwX2RldGFjaGAsIGFzIHdlbGwgYXMgbXV0ZXggaW5pdGlhbGl6YXRpb24uXG5cbk5vdywgaG9sZCBvbi4uLiB0aGF0IGBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsYCBmdW5jdGlvbi4gSXQgKnJlZ2lzdGVycyogYW4gSTJDIGFkYXB0ZXIuIEkgd29uZGVyLCBkb2VzIGl0IG1hdGNoIGFuIEkyQyBhZGFwdGVyIGp1c3QgZm9yIHRoZXNlIFRBUCBib2FyZHMsIG9yIGNvdWxkIGl0IHBvdGVudGlhbGx5IGJlIGludm9rZWQgb24gb3RoZXIgSTJDIGJ1cyBldmVudHM/IEkgc2hvdWxkIGNoZWNrIHRoZSBjb2RlIGZvciB0aGF0LiBCZXR0ZXIgbG9vayBhdCB0aGUgbGluZXMgNTk0Ni01OTg5IG9mIGBwdHBfb2NwLmNgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBicm9hZCBidXMgbWF0Y2hpbmcgZ29pbmcgb24uIEknbGwgbmVlZCB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoaXMgSTJDIG5vdGlmaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU0NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA3OjI4OjM1LjcwNDU0MzAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk0NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk0NTpcXHRzdGF0aWMgaW50XFxuNTk0NjpcXHRwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuNTk0NzpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxcbjU5NDg6XFx0e1xcbjU5NDk6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2LCAqY2hpbGQgPSBkYXRhO1xcbjU5NTA6XFx0XFx0c3RydWN0IGkyY19hZGFwdGVyICphZGFwO1xcbjU5NTE6XFx0XFx0c3RydWN0IHB0cF9vY3AgKmJwO1xcbjU5NTI6XFx0XFx0Ym9vbCBhZGQ7XFxuNTk1MzpcXHRcXG41OTU0OlxcdFxcdHN3aXRjaCAoYWN0aW9uKSB7XFxuNTk1NTpcXHRcXHRjYXNlIEJVU19OT1RJRllfQUREX0RFVklDRTpcXG41OTU2OlxcdFxcdGNhc2UgQlVTX05PVElGWV9ERUxfREVWSUNFOlxcbjU5NTc6XFx0XFx0XFx0YWRkID0gYWN0aW9uID09IEJVU19OT1RJRllfQUREX0RFVklDRTtcXG41OTU4OlxcdFxcdFxcdGJyZWFrO1xcbjU5NTk6XFx0XFx0ZGVmYXVsdDpcXG41OTYwOlxcdFxcdFxcdHJldHVybiAwO1xcbjU5NjE6XFx0XFx0fVxcbjU5NjI6XFx0XFxuNTk2MzpcXHRcXHRpZiAoIWkyY192ZXJpZnlfYWRhcHRlcihjaGlsZCkpXFxuNTk2NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG41OTY1OlxcdFxcbjU5NjY6XFx0XFx0ZGV2ID0gY2hpbGQ7XFxuNTk2NzpcXHRcXHR3aGlsZSAoKGRldiA9IGRldi1cXHUwMDNlcGFyZW50KSlcXG41OTY4OlxcdFxcdFxcdGlmIChkZXYtXFx1MDAzZWRyaXZlciBcXHUwMDI2XFx1MDAyNiAhc3RyY21wKGRldi1cXHUwMDNlZHJpdmVyLVxcdTAwM2VuYW1lLCBLQlVJTERfTU9ETkFNRSkpXFxuNTk2OTpcXHRcXHRcXHRcXHRnb3RvIGZvdW5kO1xcbjU5NzA6XFx0XFx0cmV0dXJuIDA7XFxuNTk3MTpcXHRcXG41OTcyOlxcdGZvdW5kOlxcbjU5NzM6XFx0XFx0YnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG41OTc0OlxcdFxcdGFkYXAgPSBpMmNfdmVyaWZ5X2FkYXB0ZXIoY2hpbGQpO1xcbjU5NzU6XFx0XFx0aWYgKGFkZCkge1xcbjU5NzY6XFx0XFx0XFx0cHRwX29jcF9zeW1saW5rKGJwLCBjaGlsZCwgXFxcImkyY1xcXCIpO1xcbjU5Nzc6XFx0XFx0XFx0LyogT25seSB0aGUgY2FyZCdzIG93biBjb250cm9sbGVyOiBhIG11eCBjaGlsZCBhZGRlZCBvbiBpdFxcbjU5Nzg6XFx0XFx0XFx0ICogcmVhY2hlcyBwdHBfb2NwIHRocm91Z2ggdGhlIHNhbWUgd2Fsay4gIE51bWJlcnMgYXJlXFxuNTk3OTpcXHRcXHRcXHQgKiByZWN5Y2xlZCwgc28gdGhlIGNsYWltIHJlLWNoZWNrcyB0aGUgcGFyZW50IGl0c2VsZi5cXG41OTgwOlxcdFxcdFxcdCAqL1xcbjU5ODE6XFx0XFx0XFx0aWYgKGJwLVxcdTAwM2VpMmNfY3RybCBcXHUwMDI2XFx1MDAyNiBhZGFwLVxcdTAwM2VkZXYucGFyZW50ID09IFxcdTAwMjZicC1cXHUwMDNlaTJjX2N0cmwtXFx1MDAzZWRldilcXG41OTgyOlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIGFkYXAtXFx1MDAzZW5yKTtcXG41OTgzOlxcdFxcdH0gZWxzZSB7XFxuNTk4NDpcXHRcXHRcXHQvKiBpbnZhbGlkYXRlIGJlZm9yZSBmcmVlLCBidXQgb25seSBmb3IgdGhlIGNhY2hlZCBhZGFwdGVyICovXFxuNTk4NTpcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKGJwLVxcdTAwM2VjcGxkX2kyY19hZGFwX25yKSA9PSBhZGFwLVxcdTAwM2VucilcXG41OTg2OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UoYnAtXFx1MDAzZWNwbGRfaTJjX2FkYXBfbnIsIC0xKTtcXG41OTg3OlxcdFxcdFxcdHN5c2ZzX3JlbW92ZV9saW5rKFxcdTAwMjZicC1cXHUwMDNlZGV2LmtvYmosIFxcXCJpMmNcXFwiKTtcXG41OTg4OlxcdFxcdH1cXG41OTg5OlxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwNzoyODozNS43MDQ4NzE3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTc0NzUxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGBwdHBfb2NwX2kyY19ub3RpZmllcl9jYWxsYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgcHRwX29jcF9pMmNfbm90aWZpZXJfY2FsbGAgZnVuY3Rpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBUaGUgY29tbWVudCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aGVuIGFuIEkyQyBkZXZpY2UgaXMgYWRkZWQgb3IgcmVtb3ZlZC4gSW50ZXJlc3RpbmcuIFNvLCBpdCdzIGEgaG90cGx1ZyBub3RpZmljYXRpb24uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29kZSBibG9jay4gSXQgc3RhcnRzIGJ5IHRyYXZlcnNpbmcgdGhlIGRldmljZSBoaWVyYXJjaHkgdXB3YXJkcyBmcm9tIHRoZSBjaGlsZCBkZXZpY2UgKGBkZXYgPSBjaGlsZGApIGFuZCBsb29rcyBmb3IgYSBwYXJlbnQgdGhhdCBoYXMgYSBkcml2ZXIgbmFtZWQgXCJwdHBfb2NwLlwiIFRoZSBsb29wIG1ha2VzIHBlcmZlY3Qgc2Vuc2Ug4oCTIHdlJ3JlIHRyYWNpbmcgYmFjayB0aGUgZGV2aWNlJ3MgYW5jZXN0cnkgdG8gc2VlIGlmIGl0J3MgY29ubmVjdGVkIHRvIHNvbWV0aGluZyByZWxldmFudC4gVGhlIGBzdHJjbXBgIGlzIGhvdyBpdCdzIGNoZWNraW5nIHRoZSBuYW1lLCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBzbyB0aGUgY29kZSBqdW1wcyB0byBgZm91bmRgIGlmIHRoYXQgZHJpdmVyIGV4aXN0cy4gQW5kIGlmIGl0IGRvZXNuJ3QgZmluZCBhIGBwdHBfb2NwYCBkcml2ZXIgYXR0YWNoZWQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIDAuXG5cbldhaXQgYSBzZWNvbmTigKYgSWYgbm8gYHB0cF9vY3BgIHBhcmVudCBpcyBmb3VuZCwgaXQgcmV0dXJucyB3aXRob3V0IGRvaW5nIGFueXRoaW5nPyBUaGF0IHNlZW1z4oCmIHJlc3RyaWN0aXZlLiBJdCBzZWVtcyB0byBzdWdnZXN0IHRoaXMgd2hvbGUgZnVuY3Rpb24gaXMgb25seSByZWxldmFudCBpZiBhIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gYSBgcHRwX29jcGAgZGV2aWNlLiBBbmQgSSdtIHByZXR0eSBzdXJlIHRoYXQgYHB0cF9vY3BgIGlzIG9ubHkgaW5zdGFudGlhdGVkIGlmIGl0IHByb2JlcyB3aXRoIGEgUENJIElEIGluIHRoYXQgYHB0cF9vY3BfcGNpZGV2X2lkYCBhcnJheS5cblxuU28gaGVyZSdzIHRoZSBxdWVzdGlvbjogaW4gYSBRRU1VIGVudmlyb25tZW50LCBpcyB0aGVyZSAqYW55KiB2aXJ0dWFsIGJ1cyBvciBlbXVsYXRpb24gdGhhdCAqY2FuKiBhY3R1YWxseSBpbnN0YW50aWF0ZSB0aGUgYHB0cF9vY3BgIGRldmljZT8gSSdtIGRyYXdpbmcgYSBibGFuayByaWdodCBub3cuIEl0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgYmxpbmQgc3BvdCBpbiBteSBzZXR1cC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlcmUncyBldmVuIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBub3RpZmljYXRpb24gaW4gYSBjb250cm9sbGVkIGVudmlyb25tZW50LiBJIHRoaW5rIEknbGwgbG9vayBhcm91bmQgaW4gdGhlIGtlcm5lbCB0cmVlIGZvciBvdGhlciBpbnN0YW5jZXMgd2hlcmUgYHB0cF9vY3BgIGRldmljZXMgYXJlIGNyZWF0ZWQuIEl0IG1pZ2h0IG9mZmVyIHNvbWUgaW5zaWdodCBpbnRvIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIG9yIGFsdGVybmF0ZSBpbnN0YW50aWF0aW9uIG1ldGhvZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6MzkuNjc5NjI2MTk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAyMDM5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXCJwdHBfb2NwXFxcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3B0cC9wdHBfb2NwLmM9MjI2OT1fX3B0cF9vY3BfZ2V0X21lbShzdHJ1Y3QgcHRwX29jcCAqYnAsIHJlc291cmNlX3NpemVfdCBzdGFydCwgaW50IHNpemUpXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTIyNzAte1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzoyMjcxOlxcdHN0cnVjdCByZXNvdXJjZSByZXMgPSBERUZJTkVfUkVTX01FTV9OQU1FRChzdGFydCwgc2l6ZSwgXFxcInB0cF9vY3BcXFwiKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtMjI3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6NDEuOTgxNjcwNjE4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MTgyNjQ3NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgXCJwdHBfb2NwXCIgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGRpZG4ndCBpbW1lZGlhdGVseSByZXZlYWwgYW55IHJlZCBmbGFncy4gQnV0LCBJIG5lZWQgdG8gYmUgcHJlY2lzZS4gIFwicHRwX29jcFwiIGlzbid0IGJpbmRpbmcgYW55dGhpbmcgc3BlY2lmaWMgaW4gbXkgbWVudGFsIG1vZGVsLCBzbyBJIHdlbnQgZGVlcGVyLiAgSSBxdWlja2x5IHJlZmVyZW5jZWQgdGhlIFBDSSB2ZW5kb3IgSURzLCB0aGUgTUVUQSwgQURWQSwgQ0VMRVNUSUNBLCBhbmQgT1JPTElBIElEcywgYWxsIG9mIHdoaWNoIGFyZSBhIG5vbi1lbXVsYXRlZCBieSBRRU1VIGFuZCBHQ0UsIGEgY29tbW9uIGluZGljYXRvciBvZiBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXG5cblRoZSBkZWNpc2l2ZSBmYWN0b3IgaXMgdGhlIGNyaXRpY2FsIHNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGlzIHNlY3Rpb24gZGVmaW5lcyB3aGVuIGEgcGF0Y2ggc2hvdWxkICpub3QqIGJlIGZ1enplZCAoV29ydGhGdXp6aW5nPWZhbHNlKS4gSSBtZXRpY3Vsb3VzbHkgcmVhZCB0aHJvdWdoIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIEl0IGNsZWFybHkgc3RhdGVzIHRoYXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGFyZSBleGNsdWRlZC4gIFRoaXMgZGlyZWN0bHkgaGl0cyBob21lOiBzcGVjaWZpY2FsbHkgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuIEkga25vdyB0aGlzIHZlcnkgd2VsbCFcblxuU2VjdGlvbiAxIHJlaW5mb3JjZXMgdGhpcy4gUmVhY2hhYmlsaXR5IGlzIHBhcmFtb3VudC4gSWYgY29kZSBjYW4ndCBleGVjdXRlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGl0J3MgYSBuby1nbyBmb3IgZnV6emluZy4gTm8gbWF0dGVyIGhvdyBjbGV2ZXIgb3IgY29tcGxleCwgaWYgaXQncyBub3QgKnJlYWNoYWJsZSosIGl0J3Mgbm90IGZ1enplZC5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBwYXRjaCBjb250ZW50LiBJIG5lZWQgdG8gYmUgZXhhY3QuIEknbSBzZWVpbmcgY2hhbmdlcyBpbjpcblxuMS4gIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXRpbWVjYXJkYFxuMi4gIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RgXG4zLiAgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL3B0cF9vY3AucnN0YFxuNC4gIGBNQUlOVEFJTkVSU2BcbjUuICBgZHJpdmVycy9wdHAvcHRwX29jcC5jYFxuXG5UaGUgZG9jdW1lbnRhdGlvbiBhbmQgYE1BSU5UQUlORVJTYCBjaGFuZ2VzIGFyZSBwdXJlIGRvY3VtZW50YXRpb24uIE5vdCBleGVjdXRhYmxlLiBUaGF0J3MgYSBnaXZlbi4gQnV0IGBkcml2ZXJzL3B0cC9wdHBfb2NwLmNgIGlzIHRoZSBjb3JlIG9mIHRoaXMgbWF0dGVyLiAgVGhpcyBpcyB0aGUgT3BlbkNvbXB1dGUgUFRQIGNsb2NrIFBDSWUgZHJpdmVyLiAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoaXMgZGVwZW5kcyBvbiBzcGVjaWZpYywgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgdGhlIEFEVkEgVGltZUNhcmQgWDEgUENJZSBjYXJkLiBUaGlzIGlzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIFFFTVUgb3IgR0NFLlxuXG5UaHVzLCB3aXRob3V0IHRoZSAqcGh5c2ljYWwqIFBDSWUgZGV2aWNlLCB0aGUgYHB0cF9vY3BfcHJvYmUoKWAgZnVuY3Rpb24gd2lsbCBub3QgYmUgY2FsbGVkLiBObyBgcHRwX29jcGAgaW5zdGFuY2UgaXMgY3JlYXRlZCwgbm8gZGV2bGluayBvciBzeXNmcyBkZXZpY2UgaXMgcmVnaXN0ZXJlZC4gQWxsIHRoZSBtb2RpZmllZCBjb2RlIGluIHRoaXMgZHJpdmVyLCB0aGUgbmV3IGFuZCBvbGQsIGlzIHVucmVhY2hhYmxlIGJ5IHN5emthbGxlci5cblxuSSBjb25maXJtIHRoZXJlIHdlcmUgbm8gdG91Y2hlcyB0byBjb3JlIG9yIGdlbmVyaWMgc3Vic3lzdGVtIGNvZGUuIEp1c3QgdGhlIGRyaXZlciBhbmQgZG9jdW1lbnRhdGlvbi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBpcyBmdW5kYW1lbnRhbGx5ICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLlxuXG5IZW5jZSwgaXQncyBhIGNsZWFyOlxuXG4qICAgKipXb3J0aEZ1enppbmc6IGZhbHNlKipcbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcWyBdKipcbiogICAqKkZvY3VzU3ltYm9sczogXFxbIF0qKlxuXG5UaGUgcmVhc29uaW5nIGlzIHNpbXBsZSBhbmQgcHJlY2lzZTogdGhlIGNoYW5nZXMgaW52b2x2ZSBEb2N1bWVudGF0aW9uIGFuZCBgZHJpdmVycy9wdHAvcHRwX29jcC5jYCwgYSBzcGVjaWFsaXplZCBQQ0llIHRpbWVjYXJkIGRyaXZlciAoTWV0YSAvIEFEVkEgVGltZUNhcmQgWDEpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoaXMgbWFrZXMgdGhlIGFmZmVjdGVkIGNvZGUgaW5hY2Nlc3NpYmxlIHRvIHN5emthbGxlciwgd2hpY2ggZGVwZW5kcyBvbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzIzMCwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6NTkuMTY0MzIwNzE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHB0cF9vY3AgZHJpdmVyIChkcml2ZXJzL3B0cC9wdHBfb2NwLmMpLCBhZGRpbmcgQ1BMRCBmbGFzaCBhbmQgc3RhdHVzIHN1cHBvcnQgZm9yIEFEVkEgVGltZUNhcmQgWDEgZGV2aWNlcy4gVGhpcyBkcml2ZXIgYmluZHMgc3BlY2lmaWNhbGx5IHRvIHZlbmRvci1zcGVjaWZpYyBQQ0llIHRpbWVjYXJkIGhhcmR3YXJlIChzdWNoIGFzIEFEVkEgVGltZUNhcmQgWDEsIE1ldGEgVGltZWNhcmQpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cy4gQXMgc3VjaCwgdGhlIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDc6Mjg6NTkuMTY0MzQ1MTA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowslw8d[1] Phase: Running StartedAt: 2026-09-14 07:29:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowslw8d[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 07:29:10 +0000 UTC FinishedAt: 2026-09-14 07:29:15 +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,}