Name: series-workflow78d7m Phase: Failed StartedAt: 2026-09-07 19:35:04 +0000 UTC FinishedAt: 2026-09-07 19:56:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78d7m[0] Phase: Succeeded StartedAt: 2026-09-07 19:35:04 +0000 UTC FinishedAt: 2026-09-07 19:56:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78d7m[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 19:35:04 +0000 UTC FinishedAt: 2026-09-07 19:56:37 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWwgQ29kaW5nIFN1YmxheWVyIChYUENTKSBvbiBSb2NrY2hpcCBSSzM1NjggU29DcywgaW5jbHVkaW5nIGEgbmV3IHBsYXRmb3JtIGRyaXZlciAocGNzLXhwY3MtcmspLCBjb21icGh5IHVwZGF0ZXMsIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBEVFMgbm9kZXMsIGFuZCByZWxhdGVkIHN0bW1hYy9wY3MteHBjcyBwbHVtYmluZyBhY3Jvc3MgZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLWdiZXRoLCBkd21hYy1yem4xLCBhbmQgZHdtYWMtc29jZnBnYS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiBkcml2ZXJzIGZvciBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBhbmQgdmVuZG9yLXNwZWNpZmljIE1BQ3MvUEhZcyAoUm9ja2NoaXAgUkszNTY4LCBJbnRlbCBTb0MgTUFDcywgUmVuZXNhcywgU29DIEZQR0EpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVSAvIEdDRSBvbiBhbWQ2NCkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUwMDdjNzBlNzE0MzYyOGRlOWM1ZmQ4YzYzMzJhMDg3NGZkODEwYWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE5OjU1OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wODUyZDBiY2I2NmEyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTEwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogUm9ja2NoaXAgUkszNTY4IFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUENTXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIENvaWEgUHJhbnQgXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBSb2NrY2hpcCBSSzM1NjggU29DIGludGVncmF0ZXMgYSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBoeXNpY2FsXG4mIzQzOyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS5cbiYjNDM7ICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKVxuJiM0MzsgIGFuZCB0aGUgUGh5c2ljYWwgTWVkaXVtIEF0dGFjaG1lbnQgKFBNQSkgc3VibGF5ZXIgdGhyb3VnaCBhIE1lZGlhXG4mIzQzOyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS5cbiYjNDM7XG4mIzQzOyAgVGhlIFhQQ1MgaXMgYWNjZXNzZWQgb3ZlciB0aGUgQVBCMyBidXMgYW5kIGludGVybmFsbHkgY29ubmVjdGVkIHRvIGFcbiYjNDM7ICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS5cbiYjNDM7ICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLlxuJiM0MztcbiYjNDM7ICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kXG4mIzQzOyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGVcbiYjNDM7ICBwcm9wZXJ0eSBpbiB0aGUgTUFDIGRldmljZSB0cmVlIG5vZGUuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3NcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgXCYjMzQ7I2FkZHJlc3MtY2VsbHNcJiMzNDs6XG4mIzQzOyAgICBjb25zdDogMVxuJiM0MztcbiYjNDM7ICBcJiMzNDsjc2l6ZS1jZWxsc1wmIzM0OzpcbiYjNDM7ICAgIGNvbnN0OiAwXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBUEIzIGJ1cyBpbnRlcmZhY2UgY2xvY2sgKGNsa19jc3JfaSksIHJlcXVpcmVkIGZvciByZWdpc3RlciBhY2Nlc3NcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogRUVFIGNsb2NrIChjbGtfZWVlX2kpLCByZXF1aXJlZCBmb3IgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBvcGVyYXRpb25cbiYjNDM7XG4mIzQzOyAgY2xvY2stbmFtZXM6XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgLSBjb25zdDogY3NyXG4mIzQzOyAgICAgIC0gY29uc3Q6IGVlZVxuJiM0MztcbiYjNDM7ICBwaHlzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgcGh5LW5hbWVzOlxuJiM0MzsgICAgY29uc3Q6IHNlcmRlc1xuJiM0MztcbiYjNDM7ICBwb3dlci1kb21haW5zOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIFwmIzM0O15wY3MtbWlpQFswLTNdJFwmIzM0OzpcbiYjNDM7ICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhblxuJiM0MzsgICAgICBFdGhlcm5ldCBNQUMgY29udHJvbGxlciB2aWEgdGhlIHBjcy1oYW5kbGUgcHJvcGVydHkgaW4gdGhlIE1BQyYjMzk7c1xuJiM0MzsgICAgICBkZXZpY2UgdHJlZSBub2RlLlxuJiM0MztcbiYjNDM7ICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgIHJlZzpcbiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjogTUlJIHBvcnQgbnVtYmVyLlxuJiM0MzsgICAgICAgIGVudW06IFswLCAxLCAyLCAzXVxuJiM0MztcbiYjNDM7ICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAtIHJlZ1xuJiM0MztcbiYjNDM7ICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSByZWdcbiYjNDM7ICAtIFwmIzM0OyNhZGRyZXNzLWNlbGxzXCYjMzQ7XG4mIzQzOyAgLSBcJiMzNDsjc2l6ZS1jZWxsc1wmIzM0O1xuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0gcGh5c1xuJiM0MzsgIC0gcGh5LW5hbWVzXG4mIzQzOyAgLSBwb3dlci1kb21haW5zXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvY2xvY2svcmszNTY4LWNydS5oXHUwMDNlXG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9wb3dlci9yazM1NjgtcG93ZXIuaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcGh5L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgcGNzQGZkYTAwMDAwIHtcbiYjNDM7ICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzXCYjMzQ7O1xuJiM0MzsgICAgICByZWcgPSBcdTAwM2MweGZkYTAwMDAwIDB4MjAwMDAwXHUwMDNlO1xuJiM0MzsgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbiYjNDM7ICAgICAgY2xvY2stbmFtZXMgPSBcJiMzNDtjc3JcJiMzNDssIFwmIzM0O2VlZVwmIzM0OztcbiYjNDM7ICAgICAgcGh5cyA9IFx1MDAzY1x1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXHUwMDNlO1xuJiM0MzsgICAgICBwaHktbmFtZXMgPSBcJiMzNDtzZXJkZXNcJiMzNDs7XG4mIzQzOyAgICAgIHBvd2VyLWRvbWFpbnMgPSBcdTAwM2NcdTAwMjZwb3dlciBSSzM1NjhfUERfUElQRVx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgIHBjcy1taWlAMCB7XG4mIzQzOyAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgfTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG5AQCAtODAsNiAmIzQzOzgwLDE1IEBAIHByb3BlcnRpZXM6XG4gICAgIGRlc2NyaXB0aW9uOlxuICAgICAgIFNvbWUgYWRkaXRpb25hbCBwaXBlIHNldHRpbmdzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIEdSRiByZWdzLlxuIFxuJiM0MzsgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcbiYjNDM7ICAgIGVudW06IFswLCAxXVxuJiM0MzsgICAgZGVmYXVsdDogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuXG4mIzQzOyAgICAgIFRoZSBoYXJkd2FyZSByZXNldCB2YWx1ZSBpcyBHTUFDMSAoMSkuIFNldCB0aGlzIHRvIDAgdG8gcm91dGVcbiYjNDM7ICAgICAgU0dNSUkgdG8gR01BQzAuXG4mIzQzO1xuICAgXCYjMzQ7I3BoeS1jZWxsc1wmIzM0OzpcbiAgICAgY29uc3Q6IDFcbiBcbkBAIC0xMDUsNiAmIzQzOzExNCwxMCBAQCBhbGxPZjpcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcbiAgICAgICAgIHJlc2V0LW5hbWVzOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IHRydWVcbiYjNDM7ICAgIGVsc2U6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogZmFsc2VcbiAgIC0gaWY6XG4gICAgICAgcHJvcGVydGllczpcbiAgICAgICAgIGNvbXBhdGlibGU6XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZmMzMjBiMzczNjU2Zi4uZGRhNGQyMTFiN2RiNCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTIzNzM4LDYgJiM0MzsyMzczOCwxNSBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sXG4gRjpcdHNvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9zYWkuKlxuIFxuJiM0MztST0NLQ0hJUCBYUENTIERSSVZFUlxuJiM0MztNOlx0Q29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO0w6XHRsaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcbiYjNDM7RjpcdGluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbiYjNDM7XG4gUk9DS0VSIERSSVZFUlxuIE06XHRKaXJpIFBpcmtvIFx1MDAzY2ppcmlAcmVzbnVsbGkudXNcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAvZHRzLXYxLztcbiBcbiAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcGluY3RybC9yb2NrY2hpcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3Mvc29jL3JvY2tjaGlwLHZvcDIuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3JrMzU2OC5kdHNpXCYjMzQ7XG5AQCAtMjQyLDYgJiM0MzsyNDMsNyBAQCBcdTAwMjZjb21icGh5MSB7XG4gXG4gXHUwMDI2Y29tYnBoeTIge1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XHRyb2NrY2hpcCxzZ21paS1tYWMtc2VsID0gXHUwMDNjMFx1MDAzZTtcbiB9O1xuIFxuIFx1MDAyNmNwdTAge1xuQEAgLTI2MCw5ICYjNDM7MjYyLDE4IEBAIFx1MDAyNmNwdTMge1xuIFx0Y3B1LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZkZF9jcHVcdTAwM2U7XG4gfTtcbiBcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXG4mIzQzOy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqL1xuIFx1MDAyNmdtYWMwIHtcbi1cdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrcyA9IFx1MDAzY1x1MDAyNmNydSBTQ0xLX0dNQUMwX1JYX1RYXHUwMDNlO1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSBcdTAwM2NcdTAwMjZ4cGNzX2dtYWMwX2Nsa1x1MDAzZTtcbiYjNDM7XHRwY3MtaGFuZGxlID0gXHUwMDNjXHUwMDI2eHBjc19taWkwXHUwMDNlO1xuJiM0MztcdG1hbmFnZWQgPSBcJiMzNDtpbi1iYW5kLXN0YXR1c1wmIzM0OztcbiYjNDM7XHRwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c2dtaWlfcGh5XHUwMDNlO1xuJiM0MztcdHBoeS1tb2RlID0gXCYjMzQ7c2dtaWlcJiMzNDs7XG4mIzQzO1x0cGh5LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZjY18zdjNcdTAwM2U7XG4mIzQzO1x0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4mIzQzO1x0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Z21hYzBfbWlpbVx1MDAzZTtcbiYjNDM7XHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuIH07XG4gXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXG5AQCAtMzQxLDYgJiM0MzszNTIsMzYgQEAgXHUwMDI2aTJzMF84Y2gge1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiB9O1xuIFxuJiM0MztcdTAwMjZtZGlvMCB7XG4mIzQzO1x0c2dtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcJiMzNDs7XG4mIzQzO1x0XHRyZWcgPSBcdTAwM2MweDNcdTAwM2U7XG4mIzQzO1x0XHRtYXgtc3BlZWQgPSBcdTAwM2MxMDAwXHUwMDNlO1xuJiM0MztcdFx0cmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMjAwMDBcdTAwM2U7XG4mIzQzO1x0XHRyZXNldC1kZWFzc2VydC11cyA9IFx1MDAzYzEwMDAwMFx1MDAzZTtcbiYjNDM7XHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzMgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRsZWRzIHtcbiYjNDM7XHRcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0XHRsZWRAMSB7XG4mIzQzO1x0XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlx1MDAzZTtcbiYjNDM7XHRcdFx0XHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzO1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0XHRsZWRAMiB7XG4mIzQzO1x0XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbiYjNDM7XHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlx1MDAzZTtcbiYjNDM7XHRcdFx0XHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzO1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO307XG4mIzQzO1xuIFx1MDAyNm1kaW8xIHtcbiBcdHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcJiMzNDs7XG5AQCAtMzUwLDYgJiM0MzszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4gXHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEMwIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiBcdFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuIFx0XHR0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzE1MDBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0bGVkcyB7XG4mIzQzO1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDEge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDIge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0fTtcbiBcdH07XG4gfTtcbiBcbkBAIC01ODYsMyAmIzQzOzY0NiwxMyBAQCBcdTAwMjZ4aW4zMmsge1xuIFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4gXHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZjbGszMmtfb3V0MVx1MDAzZTtcbiB9O1xuJiM0MztcbiYjNDM7XHUwMDI2eHBjcyB7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XHRwaHlzID0gXHUwMDNjXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcdTAwM2U7XG4mIzQzO1x0cGh5LW5hbWVzID0gXCYjMzQ7c2VyZGVzXCYjMzQ7O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7XHUwMDI2eHBjc19taWkwIHtcbiYjNDM7XHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXG5pbmRleCAzYmM2NTNmMDI3ZjFmLi45ODllMTY0YzBlYjM5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuQEAgLTExMCw2ICYjNDM7MTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHtcbiBcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4gXHR9O1xuIFxuJiM0MztcdHhwY3M6IHBjc0BmZGEwMDAwMCB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3NcJiMzNDs7XG4mIzQzO1x0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1x0XHRyZWcgPSBcdTAwM2MweDAgMHhmZGEwMDAwMCAweDAgMHgyMDAwMDBcdTAwM2U7XG4mIzQzO1x0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgUENMS19YUENTXHUwMDNlLCBcdTAwM2NcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stbmFtZXMgPSBcJiMzNDtjc3JcJiMzNDssIFwmIzM0O2VlZVwmIzM0OztcbiYjNDM7XHRcdHBvd2VyLWRvbWFpbnMgPSBcdTAwM2NcdTAwMjZwb3dlciBSSzM1NjhfUERfUElQRVx1MDAzZTtcbiYjNDM7XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMDogcGNzLW1paUAwIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMTogcGNzLW1paUAxIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMjogcGNzLW1paUAyIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMzogcGNzLW1paUAzIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjM1x1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHhwY3NfZ21hYzBfY2xrOiB4cGNzLWdtYWMwLWNsb2NrIHtcbiYjNDM7XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1jbG9ja1wmIzM0OztcbiYjNDM7XHRcdGNsb2NrLWZyZXF1ZW5jeSA9IFx1MDAzYzEyNTAwMDAwMFx1MDAzZTtcbiYjNDM7XHRcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFwmIzM0O2Nsa19nbWFjMF94cGNzX21paVwmIzM0OztcbiYjNDM7XHRcdCNjbG9jay1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0eHBjc19nbWFjMV9jbGs6IHhwY3MtZ21hYzEtY2xvY2sge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZpeGVkLWNsb2NrXCYjMzQ7O1xuJiM0MztcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7Y2xrX2dtYWMxX3hwY3NfbWlpXCYjMzQ7O1xuJiM0MztcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHR9O1xuJiM0MztcbiBcdHBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7XG4gXHRcdGNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmXCYjMzQ7LCBcJiMzNDtzeXNjb25cJiMzNDs7XG4gXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDBcdTAwM2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG5AQCAtMTcwLDYgJiM0MzsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcbiBcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxuIFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuIFx0c2VsZWN0IE1GRF9TWVNDT05cbiYjNDM7XHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcbiBcdGhlbHBcbiBcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li5mZDVmMDFjODk0MWMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuQEAgLTYwMywxMyAmIzQzOzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbiBcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDtcbiYjNDM7XHRpbnQgYWRkcjtcbiYjNDM7XG4mIzQzO1x0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OykpIHtcbiYjNDM7XHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OywgMCk7XG4mIzQzO1x0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuJiM0MztcdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbiYjNDM7XHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXHUwMDNlbWlpLCBhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChJU19FUlIoeHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbiYjNDM7XG4mIzQzO1x0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW50ZWxfbWdiZV9wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eHBjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIHtcbi1cdC8qIHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmVcbi1cdCAqIHNob3VsZCBhbHdheXMgYmUgYW4gWFBDUy4gVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgYWx3YXlzXG4tXHQgKiByZXR1cm4gdGhpcyBpZiBwcmVzZW50LlxuLVx0ICovXG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuIH1cbiBcbkBAIC03MzMsNiAmIzQzOzc2Nyw4IEBAIHN0YXRpYyBpbnQgaW50ZWxfbWdiZV9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdCAgICBwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuIFx0XHRwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2sgPSBCSVRfVTMyKElOVEVMX01HQkVfWFBDU19BRERSKTtcbiBcdFx0cGxhdC1cdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4mIzQzO1x0XHRwbGF0LVx1MDAzZXBjc19pbml0ID0gaW50ZWxfbWdiZV9wY3NfaW5pdDtcbiYjNDM7XHRcdHBsYXQtXHUwMDNlcGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0O1xuIFx0XHRwbGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBpbnRlbF9tZ2JlX3NlbGVjdF9wY3M7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG5pbmRleCAxOWYzNGUxOGJmZWYyLi45YWYzMmMyNmY5YzE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbkBAIC04MSw4ICYjNDM7ODEsMTEgQEAgc3RhdGljIGludCByZW5lc2FzX2dtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5pbmRleCA4ZDcwNDJlNjg5MjYxLi5lNDdjYTFiZWM1YjhiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7c3RtbWFjX3BsYXRmb3JtLmhcJiMzNDtcbkBAIC00Nyw2ICYjNDM7NDgsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xuIFx0dm9pZCAoKnNldF90b19yZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0ICAgICBpbnQgdHhfZGVsYXksIGludCByeF9kZWxheSk7XG4gXHR2b2lkICgqc2V0X3RvX3JtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbiYjNDM7XHR2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XG4gXHRpbnQgKCpzZXRfc3BlZWQpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpO1xuIFx0dm9pZCAoKmludGVncmF0ZWRfcGh5X3Bvd2VydXApKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbkBAIC02Myw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xuIFx0Ym9vbCBjbG9ja19ncmZfcmVnX2luX3BocDtcbiBcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XG4gXHRib29sIHN1cHBvcnRzX3JtaWk7XG4mIzQzO1x0Ym9vbCBzdXBwb3J0c19zZ21paTtcbiBcdGJvb2wgcGhwX2dyZl9yZXF1aXJlZDtcbiBcdGJvb2wgcmVnc192YWxpZDtcbiBcdHUzMiByZWdzW107XG5AQCAtOTgsNiAmIzQzOzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEge1xuIFx0Ym9vbCBpbnRlZ3JhdGVkX3BoeTtcbiBcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XG4gXHRib29sIHN1cHBvcnRzX3JtaWk7XG4mIzQzO1x0Ym9vbCBzdXBwb3J0c19zZ21paTtcbiBcbiBcdHN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzO1xuIFx0aW50IG51bV9jbGtzO1xuQEAgLTgwOSw2ICYjNDM7ODEzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Mjhfb3BzID0ge1xuICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xXHRcdDB4MDM4Y1xuIFxuIC8qIFJLMzU2OF9HUkZfR01BQzBfQ09OMSBcdTAwMjZcdTAwMjYgUkszNTY4X0dSRl9HTUFDMV9DT04xICovXG4mIzQzOyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJXHRcdEdSRl9DTFJfQklUKDcpXG4mIzQzOyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9TR01JSV9RU0dNSUlcdFx0R1JGX0JJVCg3KVxuICNkZWZpbmUgUkszNTY4X0dNQUNfRkxPV19DVFJMXHRcdFx0R1JGX0JJVCgzKVxuICNkZWZpbmUgUkszNTY4X0dNQUNfRkxPV19DVFJMX0NMUlx0XHRHUkZfQ0xSX0JJVCgzKVxuICNkZWZpbmUgUkszNTY4X0dNQUNfUlhDTEtfRExZX0VOQUJMRVx0XHRHUkZfQklUKDEpXG5AQCAtODUxLDE4ICYjNDM7ODU3LDMyIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbiYjNDM7XHRcdCAgICAgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19UWENMS19ETFlfRU5BQkxFKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgY29uMTtcbiYjNDM7XG4mIzQzO1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4mIzQzO1x0XHRcdFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzU2OF9vcHMgPSB7XG4gXHQuaW5pdCA9IHJrMzU2OF9pbml0LFxuIFx0LnNldF90b19yZ21paSA9IHJrMzU2OF9zZXRfdG9fcmdtaWksXG4mIzQzO1x0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXG4mIzQzO1xuIFx0LnNldF9zcGVlZCA9IHJrX3NldF9jbGtfbWFjX3NwZWVkLFxuIFxuIFx0LmdtYWNfcGh5X2ludGZfc2VsX21hc2sgPSBHRU5NQVNLX1UxNig2LCA0KSxcbiBcbiBcdC5zdXBwb3J0c19ybWlpID0gdHJ1ZSxcbiYjNDM7XHQuc3VwcG9ydHNfc2dtaWkgPSB0cnVlLFxuIFxuIFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxuIFx0LnJlZ3MgPSB7XG5AQCAtMTIwOCw2ICYjNDM7MTIyOCw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRkZXZfZXJyKGJzcF9wcml2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCB0byBkaXNhYmxlIHBoeS1zdXBwbHlcXG5cJiMzNDspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi1cdTAwM2VkZXZpY2UtXHUwMDNlb2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ub2RlO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcbiYjNDM7XHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFwmIzM0O3Bjcy1oYW5kbGVcJiMzNDssIDApO1xuJiM0MztcdGlmICghcGNzX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGNzX25vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoeHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhwY3NfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuJiM0MztcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJrX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuJiM0MztcdFx0XHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKVxuQEAgLTEzMzAsNiAmIzQzOzEzODcsNyBAQCBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuIFxuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcmdtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JnbWlpO1xuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcm1paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19ybWlpIHx8ICEhb3BzLVx1MDAzZXNldF90b19ybWlpO1xuJiM0MztcdGJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3NnbWlpID0gb3BzLVx1MDAzZXN1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLVx1MDAzZXNldF90b19zZ21paTtcbiBcbiBcdGlmIChvcHMtXHUwMDNlaW5pdCkge1xuIFx0XHRyZXQgPSBvcHMtXHUwMDNlaW5pdChic3BfcHJpdik7XG5AQCAtMTM2MSw2ICYjNDM7MTQxOSwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuJiM0MztcdFx0aWYgKCFic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19zZ21paSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwmIzM0O3Vuc3VwcG9ydGVkIGludGVyZmFjZSAlZFwmIzM0OywgYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKTtcbkBAIC0xMzc5LDE2ICYjNDM7MTQ0MSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4mIzQzO1x0cmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXG4mIzQzO1x0XHRnb3RvIHNldF9tb2RlO1xuJiM0MztcbiBcdHJldCA9IHJrX2dldF9waHlfaW50Zl9zZWwoYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFxuIFx0aW50ZiA9IHJldDtcbiBcbi1cdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWdtYWNfcGh5X2ludGZfc2VsX21hc2sgfHxcbiBcdCAgICBic3BfcHJpdi1cdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKSB7XG4gXHRcdC8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovXG5AQCAtMTM5OSwxMCAmIzQzOzE0NjQsOCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgIGJzcF9wcml2LVx1MDAzZWdtYWNfcm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKSB7XG5AQCAtMTQxMCwxMyAmIzQzOzE0NzMsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdFx0XHQgICAgIGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKTtcbiBcbiBcdFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXHR9XG4gXG4tXHQvKnJtaWkgb3IgcmdtaWkqL1xuJiM0MztzZXRfbW9kZTpcbiYjNDM7XHQvKiBybWlpLCByZ21paSwgc2dtaWkgKi9cbiBcdHN3aXRjaCAoYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKSB7XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbiBcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtpbml0IGZvciBSR01JSVxcblwmIzM0Oyk7XG5AQCAtMTQ0NywxNSAmIzQzOzE1MDksMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGlmIChic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3JtaWkpXG4gXHRcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZXNldF90b19ybWlpKGJzcF9wcml2KTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4mIzQzO1x0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2luaXQgZm9yIFNHTUlJXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3NnbWlpKVxuJiM0MztcdFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3NnbWlpKGJzcF9wcml2KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O05PIGludGVyZmFjZSBkZWZpbmVkIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbiBcdHJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XG4gXG5AQCAtMTQ2Myw2ICYjNDM7MTUzMCwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGtfZGlzYWJsZTpcbiYjNDM7XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBya19nbWFjX3Bvd2VyZG93bihzdHJ1Y3QgcmtfcHJpdl9kYXRhICpnbWFjKVxuQEAgLTE0ODYsNiAmIzQzOzE1NTcsOSBAQCBzdGF0aWMgdm9pZCBya19nZXRfaW50ZXJmYWNlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgKmJzcF9wcml2LFxuIFxuIFx0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChyay1cdTAwM2VzdXBwb3J0c19zZ21paSlcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksIGludGVyZmFjZXMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJrX3NldF9jbGtfdHhfcmF0ZSh2b2lkICpic3BfcHJpdl8sIHN0cnVjdCBjbGsgKmNsa190eF9pLFxuQEAgLTE2MDIsNiAmIzQzOzE2NzYsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbGF0X2RhdC1cdTAwM2VzdXNwZW5kID0gcmtfZ21hY19zdXNwZW5kO1xuIFx0cGxhdF9kYXQtXHUwMDNlcmVzdW1lID0gcmtfZ21hY19yZXN1bWU7XG4gXG4mIzQzO1x0aWYgKHBsYXRfZGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4mIzQzO1x0XHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNHTUlJIHJlcXVpcmVzIGEgUENTICovXG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VwY3NfaW5pdCA9IHJrX3Bjc19pbml0O1xuJiM0MztcdFx0cGxhdF9kYXQtXHUwMDNlcGNzX2V4aXQgPSBya19wY3NfZXhpdDtcbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xuIFx0aWYgKElTX0VSUihwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuQEAgLTM1LDggJiM0MzszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHJ6bjFfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ6bjFfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbkBAIC01MzksOCAmIzQzOzUzOSwxMSBAQCBzdGF0aWMgaW50IHNvY2ZwZ2FfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bHlueF9wY3NfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuaW5kZXggYWZlOThmZjViZGNiMC4uZDJmNzdmMGMyMjNhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbkBAIC00MjYsMzYgJiM0Mzs0MjYsMTUgQEAgaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZGV2bm9kZSwgKnBjc25vZGU7XG4tXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7XG4tXHRpbnQgYWRkciwgcmV0O1xuLVxuLVx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpO1xuLVxuLVx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdCkge1xuLVx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQocHJpdik7XG4tXHR9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsIFwmIzM0O3Bjcy1oYW5kbGVcJiMzNDspKSB7XG4tXHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OywgMCk7XG4tXHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG4tXHRcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xuLVx0XHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oeHBjcyk7XG4tXHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhIFx1MDAyNlx1MDAyNlxuLVx0XHQgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykge1xuLVx0XHRhZGRyID0gZmZzKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSAtIDE7XG4tXHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXHUwMDNlbWlpLCBhZGRyKTtcbi1cdFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdClcbiBcdFx0cmV0dXJuIDA7XG4tXHR9XG4gXG4mIzQzO1x0cmV0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KHByaXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXZpY2UsIHJldCwgXCYjMzQ7Tm8geFBDUyBmb3VuZFxcblwmIzM0Oyk7XG4gXG4tXHRpZiAoeHBjcylcbi1cdFx0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcbi1cbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IHhwY3M7XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDYzLDE0ICYjNDM7NDQyLDEwIEBAIHZvaWQgc3RtbWFjX3Bjc19jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQpXG4tXHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfZXhpdChwcml2KTtcbi1cbi1cdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4mIzQzO1x0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KHByaXYpO1xuIH1cbiBcbiBzdHJ1Y3Qgc3RtbWFjX2Nsa19yYXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5pbmRleCBlNDE3ZmQ2NmY2NjBhLi44OGJjNDA3OTFlNjlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5AQCAtMTIsNiAmIzQzOzEyLDI5IEBAIGNvbmZpZyBQQ1NfWFBDU1xuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXNcbiBcdCAgRGVzaWduV2FyZSBYUENTIGNvbnRyb2xsZXJzLlxuIFxuJiM0MztpZiBQQ1NfWFBDU1xuJiM0MztcbiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGRlZmF1bHQgUENTX1hQQ1NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBHZW5lcmljIERXWFBDUyBkcml2ZXIgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbiYjMzk7dCByZXF1aXJlIGFueVxuJiM0MztcdCAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybVxuJiM0MztcdCAgZGF0YSBmb3Igc2V0dXAuXG4mIzQzO1xuJiM0MztcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JvY2tjaGlwIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBBUkNIX1JPQ0tDSElQXG4mIzQzO1x0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLlxuJiM0MztcbiYjNDM7XHQgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiYjNDM7XG4mIzQzO2VuZGlmICMgUENTX1hQQ1NcbiYjNDM7XG4gY29uZmlnIFBDU19MWU5YXG4gXHR0cmlzdGF0ZVxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuaW5kZXggNGY3OTIwNjE4YjkwMC4uZjlmNmNmMjU3OGQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG5AQCAtMSwxMCAmIzQzOzEsMTEgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnNcbiBcbi1wY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFxcXG4tXHRcdFx0XHQgICBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXG4mIzQzO3Bjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXG4gXG4gb2JqLSQoQ09ORklHX1BDU19YUENTKVx0XHQmIzQzOz0gcGNzX3hwY3Mub1xuJiM0MztvYmotJChDT05GSUdfUENTX1hQQ1NfUExBVEZPUk0pICYjNDM7PSBwY3MteHBjcy1wbGF0Lm9cbiYjNDM7b2JqLSQoQ09ORklHX1BDU19YUENTX1JPQ0tDSElQKSAmIzQzOz0gcGNzLXhwY3Mtcmsub1xuIG9iai0kKENPTkZJR19QQ1NfTFlOWClcdFx0JiM0Mzs9IHBjcy1seW54Lm9cbiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSlcdCYjNDM7PSBwY3MtbXRrLWx5bnhpLm9cbiBvYmotJChDT05GSUdfUENTX1JaTjFfTUlJQylcdCYjNDM7PSBwY3MtcnpuMS1taWljLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjhiY2FhMWE1Y2JiZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcbkBAIC0wLDAgJiM0MzsxLDU0MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQmFzZWQgb24gdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBwbGF0Zm9ybSBkcml2ZXIuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pblxuJiM0MzsgKlxuJiM0MzsgKiBBZGFwdGVkIGZvciBSb2NrY2hpcCBTb0NzLCB3aXRoIHJlZmVyZW5jZSB0byB0aGUgUm9ja2NoaXAgT0VNIGRyaXZlci5cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG1fZG9tYWluLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGNzLXhwY3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3Nfcmsge1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnJlZ19iYXNlO1xuJiM0MztcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XG4mIzQzO1x0c3RydWN0IGNsayAqY3NyX2NsaztcbiYjNDM7XHRzdHJ1Y3QgY2xrICplZWVfY2xrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHB0cmRpZmZfdCB4cGNzX3JrX2FkZHJfZm9ybWF0KGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRwdHJkaWZmX3QgY3NyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZGwocHhwY3MtXHUwMDNlcmVnX2Jhc2UgJiM0MzsgKGNzciBcdTAwM2NcdTAwM2MgMikpIFx1MDAyNiAweGZmZmY7XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfcHV0KFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHB0cmRpZmZfdCBjc3I7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR3cml0ZWwodmFsLCBweHBjcy1cdTAwM2VyZWdfYmFzZSAmIzQzOyAoY3NyIFx1MDAzY1x1MDAzYyAyKSk7XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfcHV0KFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMVx0MlxuJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkyXHQzXG4mIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTNcdDRcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfUE1BUE1EXHQ2XG4mIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSVx0N1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIShhZGRyIFx1MDAzYyAwIHx8IGFkZHIgXHUwMDNlIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoZGV2KSB7XG4mIzQzO1x0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbiYjNDM7XHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiByZWFkIHJlbWFwcGluZyB0byBNSUkgaXMgcGVyZm9ybWVkIGJ5IEhXICovXG4mIzQzO1x0c3dpdGNoIChhZGRyKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbiYjNDM7XHRjYXNlIDM6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChkZXYpIHtcbiYjNDM7XHRjYXNlIE1ESU9fTU1EX1BNQVBNRDpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xuJiM0MztcdGNhc2UgTURJT19NTURfVkVORDI6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTlhJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRhYmxlIG9ubHkgb24gTUlJICovXG4mIzQzO1x0c3dpdGNoIChyZWcpIHtcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9BTl9DVFJMOlxuJiM0MztcdGNhc2UgRFdfVlJfTUlJX0FOX0lOVFJfU1RTOlxuJiM0MztcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XG4mIzQzO1x0Y2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMTpcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9ESUdfQ1RSTDI6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGFkZHIpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbiYjNDM7XHRpZiAoZGV2IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDB4ZmZmZjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZywgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBkZXY7XG4mIzQzO1xuJiM0MztcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbiYjNDM7XHRpZiAoZGV2IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3dyaXRlX3JlZyhweHBjcywgZGV2LCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAweGZmZmY7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTtcbiYjNDM7XHRpZiAoZGV2IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3dyaXRlX3JlZyhweHBjcywgZGV2LCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZHdfeHBjc19yayAqeHBjc19ya19jcmVhdGVfZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuJiM0MztcbiYjNDM7XHRweHBjcyA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHhwY3MpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlcGRldiA9IHBkZXY7XG4mIzQzO1xuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcHhwY3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHhwY3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHB4cGNzLVx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcJiMzNDtzZXJkZXNcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSkpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSksXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZ2V0IFNlckRlcyBQSFlcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRwaHlfcG93ZXJfb2ZmKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuJiM0MztcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuJiM0MztcbiYjNDM7XHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwb3dlciBkb21haW4gaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgZW5hYmxlZCwgd2hpY2ggYWxsb3dzIHVzIHRvXG4mIzQzO1x0ICogZHluYW1pY2FsbHkgdHVybiB0aGUgQ1NSIGNsb2NrIG9uL29mZiB1c2luZyBQTSB3aGlsZSBrZWVwaW5nIHRoZSBQQ1NcbiYjNDM7XHQgKiBwb3dlcmVkIG9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfaW5pdChweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIHBtX2RvbWFpbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9wb3dlcl9vbihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBzZXJkZXNfcGh5O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmLCBweHBjcyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBTZXJEZXMgUEhZOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3NlcmRlc19waHk6XG4mIzQzO1x0cGh5X2V4aXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4mIzQzO3BtX2RvbWFpbjpcbiYjNDM7XHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9yZXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHB4cGNzLVx1MDAzZXBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJlc291cmNlICpyZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XG4mIzQzO1x0aWYgKCFyZXMpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtObyByZWctc3BhY2UgZm91bmRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVzb3VyY2Vfc2l6ZShyZXMpIFx1MDAzYyBTWl8yTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgcmVnLXNwYWNlIHNpemVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2VyZWdfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VyZWdfYmFzZSkpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcy1cdTAwM2VyZWdfYmFzZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19leGl0X2Nsayh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVx1MDAzZWVlZV9jbGspO1xuJiM0MztcbiYjNDM7XHRwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHB4cGNzLVx1MDAzZWNzcl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBcJiMzNDtjc3JcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlY3NyX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlY3NyX2NsayksXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIGdldCBDU1IgY2xvY2tcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2VlZWVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCYjMzQ7ZWVlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspLFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBnZXQgRUVFIGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLVx1MDAzZWVlZV9jbGspO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEVFRSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7XG4mIzQzO1x0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19leGl0X2NsaywgcHhwY3MpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgRUVFIGNsb2NrOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgMCk7XG4mIzQzO1x0aWYgKCFidXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0YnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzXCYjMzQ7O1xuJiM0MztcdGJ1cy1cdTAwM2VyZWFkID0geHBjc19ya19yZWFkX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xuJiM0MztcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSB4cGNzX3JrX3dyaXRlX2M0NTtcbiYjNDM7XHRidXMtXHUwMDNlcGh5X21hc2sgPSB+MDtcbiYjNDM7XHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vwcml2ID0gcHhwY3M7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxuJiM0MztcdFx0IFwmIzM0O3JvY2tjaGlwX2R3eHBjcy0leFwmIzM0OywgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aWQpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dFxuJiM0MztcdCAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnNcbiYjNDM7XHQgKiBhY2Nlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlYnVzID0gYnVzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXG4mIzQzO1x0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXG4mIzQzO1x0ICogdHJpZ2dlciBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChTRXJyb3IpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxuJiM0MztcdCAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIHNvZnQgcmVzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geHBjc19ya19pbml0X2J1cyhweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgteHBjc1wmIzM0OyB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfSxcbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwY3NfbnA7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcdHUzMiBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwb3J0KSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiYjNDM7XHRwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTtcbiYjNDM7XHRpZiAoIXBjc19ucClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwY3NfbnApO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4mIzQzO1x0aWYgKCFwZGV2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4mIzQzO1xuJiM0MztcdGRldmljZV9sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdGlmICghcHhwY3MgfHwgIXB4cGNzLVx1MDAzZWJ1cykge1xuJiM0MztcdFx0ZGV2aWNlX3VubG9jayhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXHUwMDNlYnVzLCAoaW50KXBvcnQpO1xuJiM0MztcdGRldmljZV91bmxvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChJU19FUlIoeHBjcykpIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cmV0dXJuIHhwY3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV9saW5rX2FkZChkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XG4mIzQzO1x0XHR4cGNzX2Rlc3Ryb3koeHBjcyk7XG4mIzQzO1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0cmV0dXJuIHhwY3M7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19ya19jcmVhdGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVx1MDAzZWNzcl9jbGspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLVx1MDAzZWNzcl9jbGspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcyxcbiYjNDM7XHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQsXG4mIzQzO1x0XHRcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUsXG4mIzQzO1x0XHRcdCAgIE5VTEwpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHBjc19ya19kcml2ZXIgPSB7XG4mIzQzO1x0LnByb2JlID0geHBjc19ya19wcm9iZSxcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtya194cGNzLWR3eHBjc1wmIzM0OyxcbiYjNDM7XHRcdC5wbSA9IHBtX3B0cihcdTAwMjZ4cGNzX3JrX3BtX29wcyksXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGUgPSB4cGNzX3JrX29mX2lkcyxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHhwY3NfcmtfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NvaWEgUHJhbnQgXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuaW5kZXggMDMzN2UyYmNjMDEyNS4uNTBiOWNkZjk0ZmRhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuQEAgLTgxNiw5ICYjNDM7ODE2LDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdC8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovXG4mIzQzO1x0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRpZiAobmVnX21vZGUgPT0gUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEKVxuIFx0XHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUixcbi1cdFx0XHRcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRcdFx0XHQgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEwOTMsMTAgJiM0MzsxMDk4LDE1IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbi1cdGlmIChzdGF0ZS1cdTAwM2Vhbl9jb21wbGV0ZSlcbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpIHtcbiYjNDM7XHRcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbiBcdFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbiBcbiYjNDM7XHRcdC8qIEluaXRpYXRlIHRoZSBuZXh0IHJvdW5kIG9mIEFOICovXG4mIzQzO1x0XHR4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTlJFU1RBUlQpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3hwY3NfcGh5X3JlYWR5O1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDtcbiYjNDM7XHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMF9wb3J0X2VuO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuO1xuIH07XG5AQCAtMjEyLDYgJiM0MzsyMTMsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2IHtcbiBcdGJvb2wgZW5hYmxlX3NzYztcbiBcdGJvb2wgZXh0X3JlZmNsaztcbiBcdHN0cnVjdCBjbGsgKnJlZmNsaztcbiYjNDM7XHR1MzIgc2dtaWlfbWFjX3NlbDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxuQEAgLTM3NSw2ICYjNDM7Mzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcbiBcbiBcdHByaXYtXHUwMDNlZXh0X3JlZmNsayA9IGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgXCYjMzQ7cm9ja2NoaXAsZXh0LXJlZmNsa1wmIzM0Oyk7XG4gXG4mIzQzO1x0cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyb2NrY2hpcCxzZ21paS1tYWMtc2VsXCYjMzQ7LCBcdTAwMjZwcml2LVx1MDAzZXNnbWlpX21hY19zZWwpO1xuJiM0MztcbiBcdHByaXYtXHUwMDNlcGh5X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgXCYjMzQ7cGh5XCYjMzQ7KTtcbiBcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cbiBcdGlmIChQVFJfRVJSKHByaXYtXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcbkBAIC04NzMsNiAmIzQzOzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcbiYjNDM7XHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaXBlX2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfc2dtaWlfbWFjX3NlbCxcbiYjNDM7XHRcdFx0XHRcdHByaXYtXHUwMDNlc2dtaWlfbWFjX3NlbCBcdTAwM2UgMCk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaXBlX2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfeHBjc19waHlfcmVhZHksIHRydWUpO1xuIFx0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGh5X2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfcGh5bW9kZV9zZWwsIHRydWUpO1xuIFx0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGh5X2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfc2VsX3FzZ21paSwgdHJ1ZSk7XG5AQCAtOTg0LDYgJiM0Mzs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7XG4gXHQuY29uM19mb3Jfc2F0YVx0XHQ9IHsgMHgwMDBjLCAxNSwgMCwgMHgwMCwgMHg0NDA3IH0sXG4gXHQvKiBwaXBlLWdyZiAqL1xuIFx0LnBpcGVfY29uMF9mb3Jfc2F0YVx0PSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LFxuJiM0MztcdC5waXBlX3NnbWlpX21hY19zZWxcdD0geyAweDAwNDAsIDEsIDEsIDB4MDAsIDB4MDEgfSxcbiBcdC5waXBlX3hwY3NfcGh5X3JlYWR5XHQ9IHsgMHgwMDQwLCAyLCAyLCAweDAwLCAweDAxIH0sXG4gXHQudTNvdGcwX3BvcnRfZW5cdFx0PSB7IDB4MDEwNCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG4gXHQudTNvdGcxX3BvcnRfZW5cdFx0PSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaCBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG5AQCAtMCwwICYjNDM7MSwxMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxuJiM0MzsjZGVmaW5lIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWwgQ29kaW5nIFN1YmxheWVyIChYUENTKSBvbiBSb2NrY2hpcCBSSzM1NjggU29DcywgaW5jbHVkaW5nIGEgbmV3IHBsYXRmb3JtIGRyaXZlciAocGNzLXhwY3MtcmspLCBjb21icGh5IHVwZGF0ZXMsIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBEVFMgbm9kZXMsIGFuZCByZWxhdGVkIHN0bW1hYy9wY3MteHBjcyBwbHVtYmluZyBhY3Jvc3MgZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLWdiZXRoLCBkd21hYy1yem4xLCBhbmQgZHdtYWMtc29jZnBnYS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiBkcml2ZXJzIGZvciBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBhbmQgdmVuZG9yLXNwZWNpZmljIE1BQ3MvUEhZcyAoUm9ja2NoaXAgUkszNTY4LCBJbnRlbCBTb0MgTUFDcywgUmVuZXNhcywgU29DIEZQR0EpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVSAvIEdDRSBvbiBhbWQ2NCkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUwMDdjNzBlNzE0MzYyOGRlOWM1ZmQ4YzYzMzJhMDg3NGZkODEwYWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjU1OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4wODUyZDBiY2I2NmEyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWwKQEAgLTAsMCAmIzQzOzEsMTEwIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gQ29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgUm9ja2NoaXAgUkszNTY4IFNvQyBpbnRlZ3JhdGVzIGEgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbAomIzQzOyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS4KJiM0MzsgIFRoZSBQQ1MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIChNQUMpCiYjNDM7ICBhbmQgdGhlIFBoeXNpY2FsIE1lZGl1bSBBdHRhY2htZW50IChQTUEpIHN1YmxheWVyIHRocm91Z2ggYSBNZWRpYQomIzQzOyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS4KJiM0MzsKJiM0MzsgIFRoZSBYUENTIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIEFQQjMgYnVzIGFuZCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBhCiYjNDM7ICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS4KJiM0MzsgIEl0IHN1cHBvcnRzIDEwMDBCQVNFLVgsIFNHTUlJIGFuZCBRU0dNSUkgbW9kZXMuCiYjNDM7CiYjNDM7ICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kCiYjNDM7ICByb3V0ZWQgdG8gb25lIG9mIHRoZSBFdGhlcm5ldCBHTUFDIGNvbnRyb2xsZXJzIHZpYSB0aGUgcGNzLWhhbmRsZQomIzQzOyAgcHJvcGVydHkgaW4gdGhlIE1BQyBkZXZpY2UgdHJlZSBub2RlLgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3MKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgICYjMzQ7I2FkZHJlc3MtY2VsbHMmIzM0OzoKJiM0MzsgICAgY29uc3Q6IDEKJiM0MzsKJiM0MzsgICYjMzQ7I3NpemUtY2VsbHMmIzM0OzoKJiM0MzsgICAgY29uc3Q6IDAKJiM0MzsKJiM0MzsgIGNsb2NrczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogQVBCMyBidXMgaW50ZXJmYWNlIGNsb2NrIChjbGtfY3NyX2kpLCByZXF1aXJlZCBmb3IgcmVnaXN0ZXIgYWNjZXNzCiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogRUVFIGNsb2NrIChjbGtfZWVlX2kpLCByZXF1aXJlZCBmb3IgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBvcGVyYXRpb24KJiM0MzsKJiM0MzsgIGNsb2NrLW5hbWVzOgomIzQzOyAgICBpdGVtczoKJiM0MzsgICAgICAtIGNvbnN0OiBjc3IKJiM0MzsgICAgICAtIGNvbnN0OiBlZWUKJiM0MzsKJiM0MzsgIHBoeXM6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICBwaHktbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBzZXJkZXMKJiM0MzsKJiM0MzsgIHBvd2VyLWRvbWFpbnM6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7cGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAmIzM0O15wY3MtbWlpQFswLTNdJCYjMzQ7OgomIzQzOyAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgT25lIG9mIHRoZSBmb3VyIE1JSSBwb3J0cyBvZiB0aGUgWFBDUy4gVGhlIHBvcnQgaXMgbGlua2VkIHRvIGFuCiYjNDM7ICAgICAgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIgdmlhIHRoZSBwY3MtaGFuZGxlIHByb3BlcnR5IGluIHRoZSBNQUMmIzM5O3MKJiM0MzsgICAgICBkZXZpY2UgdHJlZSBub2RlLgomIzQzOwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIHJlZzoKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuCiYjNDM7ICAgICAgICBlbnVtOiBbMCwgMSwgMiwgM10KJiM0MzsKJiM0MzsgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgLSByZWcKJiM0MzsKJiM0MzsgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtICYjMzQ7I2FkZHJlc3MtY2VsbHMmIzM0OwomIzQzOyAgLSAmIzM0OyNzaXplLWNlbGxzJiMzNDsKJiM0MzsgIC0gY2xvY2tzCiYjNDM7ICAtIGNsb2NrLW5hbWVzCiYjNDM7ICAtIHBoeXMKJiM0MzsgIC0gcGh5LW5hbWVzCiYjNDM7ICAtIHBvd2VyLWRvbWFpbnMKJiM0MzsKJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvY2xvY2svcmszNTY4LWNydS5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvcG93ZXIvcmszNTY4LXBvd2VyLmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9waHkvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIHBjc0BmZGEwMDAwMCB7CiYjNDM7ICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3MmIzM0OzsKJiM0MzsgICAgICByZWcgPSAmbHQ7MHhmZGEwMDAwMCAweDIwMDAwMCZndDs7CiYjNDM7ICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgY2xvY2tzID0gJmx0OyZhbXA7Y3J1IFBDTEtfWFBDUyZndDssICZsdDsmYW1wO2NydSBDTEtfWFBDU19FRUUmZ3Q7OwomIzQzOyAgICAgIGNsb2NrLW5hbWVzID0gJiMzNDtjc3ImIzM0OywgJiMzNDtlZWUmIzM0OzsKJiM0MzsgICAgICBwaHlzID0gJmx0OyZhbXA7Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUkmZ3Q7OwomIzQzOyAgICAgIHBoeS1uYW1lcyA9ICYjMzQ7c2VyZGVzJiMzNDs7CiYjNDM7ICAgICAgcG93ZXItZG9tYWlucyA9ICZsdDsmYW1wO3Bvd2VyIFJLMzU2OF9QRF9QSVBFJmd0OzsKJiM0MzsKJiM0MzsgICAgICBwY3MtbWlpQDAgewomIzQzOyAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbAppbmRleCAzNzliMDhiZDllOTdhLi44ZTg5OGJjZTlhZjczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwKQEAgLTgwLDYgJiM0Mzs4MCwxNSBAQCBwcm9wZXJ0aWVzOgogICAgIGRlc2NyaXB0aW9uOgogICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuCiAKJiM0MzsgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMgomIzQzOyAgICBlbnVtOiBbMCwgMV0KJiM0MzsgICAgZGVmYXVsdDogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBTZWxlY3QgZ21hYzAgb3IgZ21hYzEgdG8gYmUgdXNlZCBhcyBTR01JSSBjb250cm9sbGVyLgomIzQzOyAgICAgIFRoZSBoYXJkd2FyZSByZXNldCB2YWx1ZSBpcyBHTUFDMSAoMSkuIFNldCB0aGlzIHRvIDAgdG8gcm91dGUKJiM0MzsgICAgICBTR01JSSB0byBHTUFDMC4KJiM0MzsKICAgJiMzNDsjcGh5LWNlbGxzJiMzNDs6CiAgICAgY29uc3Q6IDEKIApAQCAtMTA1LDYgJiM0MzsxMTQsMTAgQEAgYWxsT2Y6CiAgICAgICAgICAgbWF4SXRlbXM6IDEKICAgICAgICAgcmVzZXQtbmFtZXM6CiAgICAgICAgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IHRydWUKJiM0MzsgICAgZWxzZToKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogZmFsc2UKICAgLSBpZjoKICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgIGNvbXBhdGlibGU6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGZjMzIwYjM3MzY1NmYuLmRkYTRkMjExYjdkYjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yMzczOCw2ICYjNDM7MjM3MzgsMTUgQEAgUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JvY2tjaGlwLHJrMzU3Ni1zYWkueWFtbAogRjoJc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX3NhaS4qCiAKJiM0MztST0NLQ0hJUCBYUENTIERSSVZFUgomIzQzO006CUNvaWEgUHJhbnQgJmx0O2NvaWFwcmFudEBnbWFpbC5jb20mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO0w6CWxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYwomIzQzO0Y6CWluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmgKJiM0MzsKIFJPQ0tFUiBEUklWRVIKIE06CUppcmkgUGlya28gJmx0O2ppcmlAcmVzbnVsbGkudXMmZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzCmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzCkBAIC0zLDYgJiM0MzszLDcgQEAKIC9kdHMtdjEvOwogCiAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvcGluY3RybC9yb2NrY2hpcC5oJmd0OwogI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3JrMzU2OC5kdHNpJiMzNDsKQEAgLTI0Miw2ICYjNDM7MjQzLDcgQEAgJmFtcDtjb21icGh5MSB7CiAKICZhbXA7Y29tYnBoeTIgewogCXN0YXR1cyA9ICYjMzQ7b2theSYjMzQ7OwomIzQzOwlyb2NrY2hpcCxzZ21paS1tYWMtc2VsID0gJmx0OzAmZ3Q7OwogfTsKIAogJmFtcDtjcHUwIHsKQEAgLTI2MCw5ICYjNDM7MjYyLDE4IEBAICZhbXA7Y3B1MyB7CiAJY3B1LXN1cHBseSA9ICZsdDsmYW1wO3ZkZF9jcHUmZ3Q7OwogfTsKIAotLyogTW90b3Jjb21tIFlUODUyMVNDIExBTiBwb3J0IChyZXF1aXJlIFNHTUlJKSAqLwomIzQzOy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqLwogJmFtcDtnbWFjMCB7Ci0Jc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwomIzQzOwlhc3NpZ25lZC1jbG9ja3MgPSAmbHQ7JmFtcDtjcnUgU0NMS19HTUFDMF9SWF9UWCZndDs7CiYjNDM7CWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSAmbHQ7JmFtcDt4cGNzX2dtYWMwX2NsayZndDs7CiYjNDM7CXBjcy1oYW5kbGUgPSAmbHQ7JmFtcDt4cGNzX21paTAmZ3Q7OwomIzQzOwltYW5hZ2VkID0gJiMzNDtpbi1iYW5kLXN0YXR1cyYjMzQ7OwomIzQzOwlwaHktaGFuZGxlID0gJmx0OyZhbXA7c2dtaWlfcGh5Jmd0OzsKJiM0MzsJcGh5LW1vZGUgPSAmIzM0O3NnbWlpJiMzNDs7CiYjNDM7CXBoeS1zdXBwbHkgPSAmbHQ7JmFtcDt2Y2NfM3YzJmd0OzsKJiM0MzsJcGluY3RybC1uYW1lcyA9ICYjMzQ7ZGVmYXVsdCYjMzQ7OwomIzQzOwlwaW5jdHJsLTAgPSAmbHQ7JmFtcDtnbWFjMF9taWltJmd0OzsKJiM0MzsJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCiAvKiBNb3RvcmNvbW0gWVQ4NTIxU0MgV0FOIHBvcnQgKi8KQEAgLTM0MSw2ICYjNDM7MzUyLDM2IEBAICZhbXA7aTJzMF84Y2ggewogCXN0YXR1cyA9ICYjMzQ7b2theSYjMzQ7OwogfTsKIAomIzQzOyZhbXA7bWRpbzAgewomIzQzOwlzZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyJiMzNDs7CiYjNDM7CQlyZWcgPSAmbHQ7MHgzJmd0OzsKJiM0MzsJCW1heC1zcGVlZCA9ICZsdDsxMDAwJmd0OzsKJiM0MzsJCXJlc2V0LWFzc2VydC11cyA9ICZsdDsyMDAwMCZndDs7CiYjNDM7CQlyZXNldC1kZWFzc2VydC11cyA9ICZsdDsxMDAwMDAmZ3Q7OwomIzQzOwkJcmVzZXQtZ3Bpb3MgPSAmbHQ7JmFtcDtncGlvMyBSS19QQzYgR1BJT19BQ1RJVkVfTE9XJmd0OzsKJiM0MzsKJiM0MzsJCWxlZHMgewomIzQzOwkJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkJCSNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOwkJCWxlZEAxIHsKJiM0MzsJCQkJcmVnID0gJmx0OzEmZ3Q7OwomIzQzOwkJCQljb2xvciA9ICZsdDtMRURfQ09MT1JfSURfQU1CRVImZ3Q7OwomIzQzOwkJCQlmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7CQkJCWRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsJCQl9OwomIzQzOwomIzQzOwkJCWxlZEAyIHsKJiM0MzsJCQkJcmVnID0gJmx0OzImZ3Q7OwomIzQzOwkJCQljb2xvciA9ICZsdDtMRURfQ09MT1JfSURfR1JFRU4mZ3Q7OwomIzQzOwkJCQlmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7CQkJCWRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsJCQl9OwomIzQzOwkJfTsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwogJmFtcDttZGlvMSB7CiAJcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7CiAJCWNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyJiMzNDs7CkBAIC0zNTAsNiAmIzQzOzM5MSwyNSBAQCByZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHsKIAkJcmVzZXQtZ3Bpb3MgPSAmbHQ7JmFtcDtncGlvNCBSS19QQzAgR1BJT19BQ1RJVkVfTE9XJmd0OzsKIAkJcngtaW50ZXJuYWwtZGVsYXktcHMgPSAmbHQ7MTUwMCZndDs7CiAJCXR4LWludGVybmFsLWRlbGF5LXBzID0gJmx0OzE1MDAmZ3Q7OwomIzQzOwomIzQzOwkJbGVkcyB7CiYjNDM7CQkJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7CQkJbGVkQDEgewomIzQzOwkJCQlyZWcgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9BTUJFUiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CiYjNDM7CQkJbGVkQDIgewomIzQzOwkJCQlyZWcgPSAmbHQ7MiZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9HUkVFTiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CQl9OwogCX07CiB9OwogCkBAIC01ODYsMyAmIzQzOzY0NiwxMyBAQCAmYW1wO3hpbjMyayB7CiAJcGluY3RybC1uYW1lcyA9ICYjMzQ7ZGVmYXVsdCYjMzQ7OwogCXBpbmN0cmwtMCA9ICZsdDsmYW1wO2NsazMya19vdXQxJmd0OzsKIH07CiYjNDM7CiYjNDM7JmFtcDt4cGNzIHsKJiM0MzsJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiYjNDM7CXBoeXMgPSAmbHQ7JmFtcDtjb21icGh5MiBQSFlfVFlQRV9TR01JSSZndDs7CiYjNDM7CXBoeS1uYW1lcyA9ICYjMzQ7c2VyZGVzJiMzNDs7CiYjNDM7fTsKJiM0MzsKJiM0MzsmYW1wO3hwY3NfbWlpMCB7CiYjNDM7CXN0YXR1cyA9ICYjMzQ7b2theSYjMzQ7OwomIzQzO307CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaQppbmRleCAzYmM2NTNmMDI3ZjFmLi45ODllMTY0YzBlYjM5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kKQEAgLTExMCw2ICYjNDM7MTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHsKIAkJc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwogCX07CiAKJiM0MzsJeHBjczogcGNzQGZkYTAwMDAwIHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzJiMzNDs7CiYjNDM7CQkjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsJCSNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwkJcmVnID0gJmx0OzB4MCAweGZkYTAwMDAwIDB4MCAweDIwMDAwMCZndDs7CiYjNDM7CQljbG9ja3MgPSAmbHQ7JmFtcDtjcnUgUENMS19YUENTJmd0OywgJmx0OyZhbXA7Y3J1IENMS19YUENTX0VFRSZndDs7CiYjNDM7CQljbG9jay1uYW1lcyA9ICYjMzQ7Y3NyJiMzNDssICYjMzQ7ZWVlJiMzNDs7CiYjNDM7CQlwb3dlci1kb21haW5zID0gJmx0OyZhbXA7cG93ZXIgUkszNTY4X1BEX1BJUEUmZ3Q7OwomIzQzOwkJc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwomIzQzOwomIzQzOwkJeHBjc19taWkwOiBwY3MtbWlpQDAgewomIzQzOwkJCXJlZyA9ICZsdDswJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJeHBjc19taWkxOiBwY3MtbWlpQDEgewomIzQzOwkJCXJlZyA9ICZsdDsxJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJeHBjc19taWkyOiBwY3MtbWlpQDIgewomIzQzOwkJCXJlZyA9ICZsdDsyJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJeHBjc19taWkzOiBwY3MtbWlpQDMgewomIzQzOwkJCXJlZyA9ICZsdDszJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzOwomIzQzOwl4cGNzX2dtYWMwX2NsazogeHBjcy1nbWFjMC1jbG9jayB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1jbG9jayYjMzQ7OwomIzQzOwkJY2xvY2stZnJlcXVlbmN5ID0gJmx0OzEyNTAwMDAwMCZndDs7CiYjNDM7CQljbG9jay1vdXRwdXQtbmFtZXMgPSAmIzM0O2Nsa19nbWFjMF94cGNzX21paSYjMzQ7OwomIzQzOwkJI2Nsb2NrLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwl9OwomIzQzOwomIzQzOwl4cGNzX2dtYWMxX2NsazogeHBjcy1nbWFjMS1jbG9jayB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1jbG9jayYjMzQ7OwomIzQzOwkJY2xvY2stZnJlcXVlbmN5ID0gJmx0OzEyNTAwMDAwMCZndDs7CiYjNDM7CQljbG9jay1vdXRwdXQtbmFtZXMgPSAmIzM0O2Nsa19nbWFjMV94cGNzX21paSYjMzQ7OwomIzQzOwkJI2Nsb2NrLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwl9OwomIzQzOwogCXBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC1waXBlLXBoeS1ncmYmIzM0OywgJiMzNDtzeXNjb24mIzM0OzsKIAkJcmVnID0gJmx0OzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDAmZ3Q7OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcKaW5kZXggZTNkZDVhZGRhNWFjYS4uNTA4OGFjYzA2OTgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnCkBAIC0xNzAsNiAmIzQzOzE3MCw3IEBAIGNvbmZpZyBEV01BQ19ST0NLQ0hJUAogCWRlZmF1bHQgQVJDSF9ST0NLQ0hJUAogCWRlcGVuZHMgb24gT0YgJmFtcDsmYW1wOyAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IE1GRF9TWVNDT04KJiM0MzsJc2VsZWN0IFBDU19YUENTX1JPQ0tDSElQCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYwppbmRleCBmNWY5ZmE2N2VjZDc3Li5mZDVmMDFjODk0MWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMKQEAgLTYwMywxMyAmIzQzOzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCkKIAlwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtuZWVkc19yZXNldCA9IHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlOwomIzQzOwlzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7CiYjNDM7CWludCBhZGRyOwomIzQzOwomIzQzOwlkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LSZndDtkZXZpY2UpOwomIzQzOwomIzQzOwlpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgJiMzNDtwY3MtaGFuZGxlJiMzNDspKSB7CiYjNDM7CQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7CiYjNDM7CQlmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWFkZHIgPSBmZnMocHJpdi0mZ3Q7cGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2spIC0gMTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKElTX0VSUih4cGNzKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHhwY3MpOwomIzQzOwomIzQzOwl4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtJmd0O3BsYXQtJmd0O211bHRfZmFjdF8xMDBucyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7eHBjcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJeHBjc19kZXN0cm95KHByaXYtJmd0O2h3LSZndDt4cGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIHsKLQkvKiBwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmUKLQkgKiBzaG91bGQgYWx3YXlzIGJlIGFuIFhQQ1MuIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGFsd2F5cwotCSAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuCi0JICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKIAlyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LSZndDtody0mZ3Q7eHBjcyk7CiB9CiAKQEAgLTczMyw2ICYjNDM7NzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCSAgICBwbGF0LSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHsKIAkJcGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2sgPSBCSVRfVTMyKElOVEVMX01HQkVfWFBDU19BRERSKTsKIAkJcGxhdC0mZ3Q7ZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0OwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0OwogCQlwbGF0LSZndDtzZWxlY3RfcGNzID0gaW50ZWxfbWdiZV9zZWxlY3RfcGNzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jCmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMKQEAgLTgxLDggJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3BjcykKLQkJbWlpY19kZXN0cm95KHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3Bjcyk7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMKaW5kZXggOGQ3MDQyZTY4OTI2MS4uZTQ3Y2ExYmVjNWI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY3MvcGNzLXhwY3MtcmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7c3RtbWFjX3BsYXRmb3JtLmgmIzM0OwpAQCAtNDcsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHsKIAl2b2lkICgqc2V0X3RvX3JnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpOwogCXZvaWQgKCpzZXRfdG9fcm1paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpOwomIzQzOwl2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CiAJaW50ICgqc2V0X3NwZWVkKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpOwogCXZvaWQgKCppbnRlZ3JhdGVkX3BoeV9wb3dlcnVwKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CkBAIC02Myw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMgewogCWJvb2wgY2xvY2tfZ3JmX3JlZ19pbl9waHA7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAJYm9vbCBwaHBfZ3JmX3JlcXVpcmVkOwogCWJvb2wgcmVnc192YWxpZDsKIAl1MzIgcmVnc1tdOwpAQCAtOTgsNiAmIzQzOzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEgewogCWJvb2wgaW50ZWdyYXRlZF9waHk7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAKIAlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsKIAlpbnQgbnVtX2Nsa3M7CkBAIC04MDksNiAmIzQzOzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHsKICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xCQkweDAzOGMKIAogLyogUkszNTY4X0dSRl9HTUFDMF9DT04xICZhbXA7JmFtcDsgUkszNTY4X0dSRl9HTUFDMV9DT04xICovCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkJCUdSRl9DTFJfQklUKDcpCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSQkJR1JGX0JJVCg3KQogI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkwJCQlHUkZfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTF9DTFIJCUdSRl9DTFJfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUJCUdSRl9CSVQoMSkKQEAgLTg1MSwxOCAmIzQzOzg1NywzMiBAQCBzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3JnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LAogCQkgICAgIFJLMzU2OF9HTUFDX0NMS19UWF9ETF9DRkcodHhfZGVsYXkpKTsKIAogCXJlZ21hcF93cml0ZShic3BfcHJpdi0mZ3Q7Z3JmLCBjb24xLAomIzQzOwkJICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfAogCQkgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfAogCQkgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmszNTY4X3NldF90b19zZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdikKJiM0Mzt7CiYjNDM7CXUzMiBjb24xOwomIzQzOwomIzQzOwljb24xID0gKGJzcF9wcml2LSZndDtpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6CiYjNDM7CQkJCSAgICAgUkszNTY4X0dSRl9HTUFDMF9DT04xOwomIzQzOwomIzQzOwlyZWdtYXBfd3JpdGUoYnNwX3ByaXYtJmd0O2dyZiwgY29uMSwgUkszNTY4X0dNQUNfTU9ERV9TR01JSV9RU0dNSUkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTY4X29wcyA9IHsKIAkuaW5pdCA9IHJrMzU2OF9pbml0LAogCS5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLAomIzQzOwkuc2V0X3RvX3NnbWlpID0gcmszNTY4X3NldF90b19zZ21paSwKJiM0MzsKIAkuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsCiAKIAkuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLAogCiAJLnN1cHBvcnRzX3JtaWkgPSB0cnVlLAomIzQzOwkuc3VwcG9ydHNfc2dtaWkgPSB0cnVlLAogCiAJLnJlZ3NfdmFsaWQgPSB0cnVlLAogCS5yZWdzID0gewpAQCAtMTIwOCw2ICYjNDM7MTIyOCw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsICYjMzQ7ZmFpbCB0byBkaXNhYmxlIHBoeS1zdXBwbHlcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcmtfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtJmd0O2RldmljZS0mZ3Q7b2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTsKJiM0MzsJc3RydWN0IGR3X3hwY3MgKnhwY3M7CiYjNDM7CiYjNDM7CXBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgJiMzNDtwY3MtaGFuZGxlJiMzNDssIDApOwomIzQzOwlpZiAoIXBjc19ub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXhwY3MgPSB4cGNzX3JrX2NyZWF0ZShwcml2LSZndDtkZXZpY2UsIHBjc19ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQocGNzX25vZGUpOwomIzQzOwlpZiAoSVNfRVJSKHhwY3MpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoeHBjcyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJrX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi0mZ3Q7aHctJmd0O3hwY3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJCSAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LAogCQkJCQkgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKQpAQCAtMTMzMCw2ICYjNDM7MTM4Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAKIAlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfcmdtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fcmdtaWk7CiAJYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JtaWkgfHwgISFvcHMtJmd0O3NldF90b19ybWlpOwomIzQzOwlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fc2dtaWk7CiAKIAlpZiAob3BzLSZndDtpbml0KSB7CiAJCXJldCA9IG9wcy0mZ3Q7aW5pdChic3BfcHJpdik7CkBAIC0xMzYxLDYgJiM0MzsxNDE5LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19jaGVja19vcHMoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmICghYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJaWYgKCFic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsCiAJCQkmIzM0O3Vuc3VwcG9ydGVkIGludGVyZmFjZSAlZCYjMzQ7LCBic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKQEAgLTEzNzksMTYgJiM0MzsxNDQxLDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJCWdvdG8gc2V0X21vZGU7CiYjNDM7CiAJcmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlpbnRmID0gcmV0OwogCi0JcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKGJzcF9wcml2LSZndDtnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8CiAJICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKSB7CiAJCS8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovCkBAIC0xMzk5LDEwICYjNDM7MTQ2NCw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQkJCSAgICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKTsKIAogCQlyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCiAJaWYgKGJzcF9wcml2LSZndDtjbG9jay5ybWlpX21vZGVfbWFzaykgewpAQCAtMTQxMCwxMyAmIzQzOzE0NzMsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCQkJICAgICBic3BfcHJpdi0mZ3Q7Y2xvY2sucm1paV9tb2RlX21hc2spOwogCiAJCXJldCA9IHJrX3dyaXRlX2Nsb2NrX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCi0JLypybWlpIG9yIHJnbWlpKi8KJiM0MztzZXRfbW9kZToKJiM0MzsJLyogcm1paSwgcmdtaWksIHNnbWlpICovCiAJc3dpdGNoIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKSB7CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6CiAJCWRldl9pbmZvKGRldiwgJiMzNDtpbml0IGZvciBSR01JSVxuJiMzNDspOwpAQCAtMTQ0NywxNSAmIzQzOzE1MDksMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmIChic3BfcHJpdi0mZ3Q7b3BzLSZndDtzZXRfdG9fcm1paSkKIAkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19ybWlpKGJzcF9wcml2KTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O2luaXQgZm9yIFNHTUlJXG4mIzM0Oyk7CiYjNDM7CQlpZiAoYnNwX3ByaXYtJmd0O29wcy0mZ3Q7c2V0X3RvX3NnbWlpKQomIzQzOwkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19zZ21paShic3BfcHJpdik7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRldiwgJiMzNDtOTyBpbnRlcmZhY2UgZGVmaW5lZCFcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGNsa19kaXNhYmxlOwogCX0KIAogCXJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwotCQlyZXR1cm4gcmV0OwotCX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CiAKQEAgLTE0NjMsNiAmIzQzOzE1MzAsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWJzcF9wcml2LSZndDtvcHMtJmd0O2ludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xrX2Rpc2FibGU6CiYjNDM7CWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBya19nbWFjX3Bvd2VyZG93bihzdHJ1Y3QgcmtfcHJpdl9kYXRhICpnbWFjKQpAQCAtMTQ4Niw2ICYjNDM7MTU1Nyw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsCiAKIAlpZiAocmstJmd0O3N1cHBvcnRzX3JtaWkpCiAJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChyay0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTsKIH0KIAogc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSwKQEAgLTE2MDIsNiAmIzQzOzE2NzYsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcGxhdF9kYXQtJmd0O3N1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7CiAJcGxhdF9kYXQtJmd0O3Jlc3VtZSA9IHJrX2dtYWNfcmVzdW1lOwogCiYjNDM7CWlmIChwbGF0X2RhdC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJCS8qIFNHTUlJIGNsb2NrIGFsd2F5cyBydW5zIGF0IDEyNSBNSHogKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtzZXRfY2xrX3R4X3JhdGUgPSBOVUxMOwomIzQzOwomIzQzOwkJLyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwbGF0X2RhdC0mZ3Q7cGNzX2luaXQgPSBya19wY3NfaW5pdDsKJiM0MzsJCXBsYXRfZGF0LSZndDtwY3NfZXhpdCA9IHJrX3Bjc19leGl0OwomIzQzOwkJcGxhdF9kYXQtJmd0O3NlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzOwomIzQzOwl9CiYjNDM7CiAJcGxhdF9kYXQtJmd0O2JzcF9wcml2ID0gcmtfZ21hY19zZXR1cChwZGV2LCBwbGF0X2RhdCwgZGF0YSk7CiAJaWYgKElTX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpKQogCQlyZXR1cm4gUFRSX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jCmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMKQEAgLTM1LDggJiM0MzszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLQlpZiAocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQotCQltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1paWNfZGVzdHJveShwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpOwomIzQzOwlwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCmluZGV4IDFkN2YwYTU3ZDI4ODkuLjZkNGJjMWZlOGY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKQEAgLTUzOSw4ICYjNDM7NTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewotCWlmIChwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCi0JCWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jCmluZGV4IGFmZTk4ZmY1YmRjYjAuLmQyZjc3ZjBjMjIzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtNDI2LDM2ICYjNDM7NDI2LDE1IEBAIGludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlOwotCXN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDsKLQlpbnQgYWRkciwgcmV0OwotCi0JZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi0mZ3Q7ZGV2aWNlKTsKLQotCWlmIChwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdCkgewotCQlyZXQgPSBwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdChwcml2KTsKLQl9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7KSkgewotCQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKLQkJeHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTsKLQkJZndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgaWYgKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEgJmFtcDsmYW1wOwotCQkgICBwcml2LSZndDtwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtwY3NfbWFzaykgewotCQlhZGRyID0gZmZzKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEtJmd0O3Bjc19tYXNrKSAtIDE7Ci0JCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3BsYXQtJmd0O3Bjc19pbml0KQogCQlyZXR1cm4gMDsKLQl9CiAKJiM0MzsJcmV0ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2luaXQocHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi0mZ3Q7ZGV2aWNlLCByZXQsICYjMzQ7Tm8geFBDUyBmb3VuZFxuJiMzNDspOwogCi0JaWYgKHhwY3MpCi0JCXhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi0mZ3Q7cGxhdC0mZ3Q7bXVsdF9mYWN0XzEwMG5zKTsKLQotCXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKLQogCXJldHVybiAwOwogfQogCkBAIC00NjMsMTQgJiM0Mzs0NDIsMTAgQEAgdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JaWYgKHByaXYtJmd0O3BsYXQtJmd0O3Bjc19leGl0KQotCQlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKLQotCWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2V4aXQpCiAJCXJldHVybjsKIAotCXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7Ci0JcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzOwlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKIH0KIAogc3RydWN0IHN0bW1hY19jbGtfcmF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCmluZGV4IGU0MTdmZDY2ZjY2MGEuLjg4YmM0MDc5MWU2OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCkBAIC0xMiw2ICYjNDM7MTIsMjkgQEAgY29uZmlnIFBDU19YUENTCiAJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXMKIAkgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy4KIAomIzQzO2lmIFBDU19YUENTCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNCiYjNDM7CXRyaXN0YXRlICYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydCYjMzQ7CiYjNDM7CWRlZmF1bHQgUENTX1hQQ1MKJiM0MzsJaGVscAomIzQzOwkgIEdlbmVyaWMgRFdYUENTIGRyaXZlciBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJiMzOTt0IHJlcXVpcmUgYW55CiYjNDM7CSAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybQomIzQzOwkgIGRhdGEgZm9yIHNldHVwLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1JPQ0tDSElQCiYjNDM7CXRyaXN0YXRlICYjMzQ7Um9ja2NoaXAgWFBDUyBjb250cm9sbGVyIHN1cHBvcnQmIzM0OwomIzQzOwlkZWZhdWx0IEFSQ0hfUk9DS0NISVAKJiM0MzsJZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVCkKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS4KJiM0MzsKJiM0MztlbmRpZiAjIFBDU19YUENTCiYjNDM7CiBjb25maWcgUENTX0xZTlgKIAl0cmlzdGF0ZQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZQppbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlCkBAIC0xLDEwICYjNDM7MSwxMSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnMKIAotcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFwKLQkJCQkgICBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vCiYjNDM7cGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gubwogCiBvYmotJChDT05GSUdfUENTX1hQQ1MpCQkmIzQzOz0gcGNzX3hwY3MubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgJiM0Mzs9IHBjcy14cGNzLXBsYXQubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgJiM0Mzs9IHBjcy14cGNzLXJrLm8KIG9iai0kKENPTkZJR19QQ1NfTFlOWCkJCSYjNDM7PSBwY3MtbHlueC5vCiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSkJJiM0Mzs9IHBjcy1tdGstbHlueGkubwogb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpCSYjNDM7PSBwY3MtcnpuMS1taWljLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNjhiY2FhMWE1Y2JiZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jCkBAIC0wLDAgJiM0MzsxLDU0MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pbgomIzQzOyAqCiYjNDM7ICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX3BsYXRmb3JtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG1fZG9tYWluLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BtX3J1bnRpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Bjcy14cGNzLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBkd194cGNzX3JrIHsKJiM0MzsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKJiM0MzsJc3RydWN0IHBoeSAqc2VyZGVzX3BoeTsKJiM0MzsJc3RydWN0IGNsayAqY3NyX2NsazsKJiM0MzsJc3RydWN0IGNsayAqZWVlX2NsazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBwdHJkaWZmX3QgeHBjc19ya19hZGRyX2Zvcm1hdChpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIEZJRUxEX1BSRVAoMHg3MDAwMCwgZGV2KSB8IEZJRUxEX1BSRVAoMHhmZmZmLCByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJcHRyZGlmZl90IGNzcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJY3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7CiYjNDM7CiYjNDM7CXJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRsKHB4cGNzLSZndDtyZWdfYmFzZSAmIzQzOyAoY3NyICZsdDsmbHQ7IDIpKSAmYW1wOyAweGZmZmY7CiYjNDM7CiYjNDM7CXBtX3J1bnRpbWVfcHV0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJcHRyZGlmZl90IGNzcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJY3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7CiYjNDM7CiYjNDM7CXJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXdyaXRlbCh2YWwsIHB4cGNzLSZndDtyZWdfYmFzZSAmIzQzOyAoY3NyICZsdDsmbHQ7IDIpKTsKJiM0MzsKJiM0MzsJcG1fcnVudGltZV9wdXQoJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTEJMgomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTIJMwomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTMJNAomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX1BNQVBNRAk2CiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJCTcKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShpbnQgYWRkcikKJiM0Mzt7CiYjNDM7CXJldHVybiAhKGFkZHIgJmx0OyAwIHx8IGFkZHIgJmd0OyAzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGRldikgewomIzQzOwljYXNlIE1ESU9fTU1EX1BNQVBNRDoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EOwomIzQzOwljYXNlIE1ESU9fTU1EX1ZFTkQyOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHJlYWQgcmVtYXBwaW5nIHRvIE1JSSBpcyBwZXJmb3JtZWQgYnkgSFcgKi8KJiM0MzsJc3dpdGNoIChhZGRyKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJOwomIzQzOwljYXNlIDE6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMjsKJiM0MzsJY2FzZSAzOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJc3dpdGNoIChkZXYpIHsKJiM0MzsJY2FzZSBNRElPX01NRF9QTUFQTUQ6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDsKJiM0MzsJY2FzZSBNRElPX01NRF9WRU5EMjoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0YWJsZSBvbmx5IG9uIE1JSSAqLwomIzQzOwlzd2l0Y2ggKHJlZykgewomIzQzOwljYXNlIERXX1ZSX01JSV9BTl9DVFJMOgomIzQzOwljYXNlIERXX1ZSX01JSV9BTl9JTlRSX1NUUzoKJiM0MzsJY2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMDoKJiM0MzsJY2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMToKJiM0MzsJY2FzZSBEV19WUl9NSUlfRElHX0NUUkwyOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGFkZHIpIHsKJiM0MzsJY2FzZSAwOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMTsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyOwomIzQzOwljYXNlIDM6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtJmd0O3ByaXY7CiYjNDM7CWludCBkZXY7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpOwomIzQzOwlpZiAoZGV2ICZsdDsgMCkKJiM0MzsJCXJldHVybiAweGZmZmY7CiYjNDM7CiYjNDM7CXJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtJmd0O3ByaXY7CiYjNDM7CWludCBkZXY7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTsKJiM0MzsJaWYgKGRldiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CWRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7CiYjNDM7CWlmIChkZXYgJmx0OyAwKQomIzQzOwkJcmV0dXJuIDB4ZmZmZjsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTsKJiM0MzsJaWYgKGRldiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkd194cGNzX3JrICp4cGNzX3JrX2NyZWF0ZV9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7CiYjNDM7CiYjNDM7CXB4cGNzID0gZGV2bV9remFsbG9jKCZhbXA7cGRldi0mZ3Q7ZGV2LCBzaXplb2YoKnB4cGNzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHhwY3MpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O3BkZXYgPSBwZGV2OwomIzQzOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoJmFtcDtwZGV2LSZndDtkZXYsIHB4cGNzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB4cGNzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O3NlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAmIzM0O3NlcmRlcyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7c2VyZGVzX3BoeSkpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtJmd0O3NlcmRlc19waHkpLAomIzQzOwkJCQkJJiMzNDtGYWlsZWQgdG8gZ2V0IFNlckRlcyBQSFlcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZih2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlwaHlfcG93ZXJfb2ZmKHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MzsJcGh5X2V4aXQocHhwY3MtJmd0O3NlcmRlc19waHkpOwomIzQzOwomIzQzOwlkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwb3dlciBkb21haW4gaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgZW5hYmxlZCwgd2hpY2ggYWxsb3dzIHVzIHRvCiYjNDM7CSAqIGR5bmFtaWNhbGx5IHR1cm4gdGhlIENTUiBjbG9jayBvbi9vZmYgdXNpbmcgUE0gd2hpbGUga2VlcGluZyB0aGUgUENTCiYjNDM7CSAqIHBvd2VyZWQgb24uCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIHRydWUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gcG93ZXIgb24gcG93ZXItZG9tYWluc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwaHlfaW5pdChweHBjcy0mZ3Q7c2VyZGVzX3BoeSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBpbml0IFNlckRlcyBQSFlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gcG1fZG9tYWluOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9wb3dlcl9vbihweHBjcy0mZ3Q7c2VyZGVzX3BoeSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBTZXJEZXMgUEhZXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIHNlcmRlc19waHk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmLCBweHBjcyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBTZXJEZXMgUEhZOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3NlcmRlc19waHk6CiYjNDM7CXBoeV9leGl0KHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MztwbV9kb21haW46CiYjNDM7CWRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9yZXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHB4cGNzLSZndDtwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJlc291cmNlICpyZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiYjNDM7CWlmICghcmVzKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtObyByZWctc3BhY2UgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXNvdXJjZV9zaXplKHJlcykgJmx0OyBTWl8yTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCByZWctc3BhY2Ugc2l6ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHhwY3MtJmd0O3JlZ19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7cmVnX2Jhc2UpKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHhwY3MtJmd0O3JlZ19iYXNlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19leGl0X2Nsayh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwomIzQzOwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtJmd0O2VlZV9jbGspOwomIzQzOwomIzQzOwlwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O2Nzcl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAmIzM0O2NzciYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7Y3NyX2NsaykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtJmd0O2Nzcl9jbGspLAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIGdldCBDU1IgY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O2VlZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAmIzM0O2VlZSYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7ZWVlX2NsaykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtJmd0O2VlZV9jbGspLAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIGdldCBFRUUgY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLSZndDtlZWVfY2xrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CiYjNDM7CXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3NfcmtfZXhpdF9jbGssIHB4cGNzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIEVFRSBjbG9jazogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsJc3RhdGljIGF0b21pY190IGlkID0gQVRPTUlDX0lOSVQoLTEpOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIDApOwomIzQzOwlpZiAoIWJ1cykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlidXMtJmd0O25hbWUgPSAmIzM0O1JvY2tjaGlwIERXIFhQQ1MgTUNJL0FQQjMmIzM0OzsKJiM0MzsJYnVzLSZndDtyZWFkID0geHBjc19ya19yZWFkX2MyMjsKJiM0MzsJYnVzLSZndDt3cml0ZSA9IHhwY3Nfcmtfd3JpdGVfYzIyOwomIzQzOwlidXMtJmd0O3JlYWRfYzQ1ID0geHBjc19ya19yZWFkX2M0NTsKJiM0MzsJYnVzLSZndDt3cml0ZV9jNDUgPSB4cGNzX3JrX3dyaXRlX2M0NTsKJiM0MzsJYnVzLSZndDtwaHlfbWFzayA9IH4wOwomIzQzOwlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJYnVzLSZndDtwcml2ID0gcHhwY3M7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGJ1cy0mZ3Q7aWQsIE1JSV9CVVNfSURfU0laRSwKJiM0MzsJCSAmIzM0O3JvY2tjaGlwX2R3eHBjcy0leCYjMzQ7LCBhdG9taWNfaW5jX3JldHVybigmYW1wO2lkKSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1ESU8tYnVzIGhlcmUgc2VydmVzIGFzIGp1c3QgYSBiYWNrLWVuZCBlbmdpbmUgYWJzdHJhY3Rpbmcgb3V0CiYjNDM7CSAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnMKJiM0MzsJICogYWNjZXNzLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlweHBjcy0mZ3Q7YnVzID0gYnVzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXB4cGNzID0geHBjc19ya19jcmVhdGVfZGF0YShwZGV2KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihweHBjcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBYUENTIG1heSBiZSBhdHRhY2hlZCB0byBhIHBvd2VyIGRvbWFpbiAoZS5nLiBQRF9QSVBFKS4gVGhlIGRvbWFpbgomIzQzOwkgKiBtdXN0IGJlIHBvd2VyZWQgb24gYmVmb3JlIGFueSByZWdpc3RlciBhY2Nlc3MsIG90aGVyd2lzZSB0aGUgU29DIHdpbGwKJiM0MzsJICogdHJpZ2dlciBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChTRXJyb3IpLgomIzQzOwkgKgomIzQzOwkgKiBBY2Nlc3NpbmcgdGhlIFhQQ1MgcmVnaXN0ZXJzIGFsc28gcmVxdWlyZXMgYSBUWCBjbG9jayBmcm9tIHRoZSBTZXJEZXMsCiYjNDM7CSAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIHNvZnQgcmVzZXQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfaW5pdChweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB4cGNzX3JrX2luaXRfcmVzKHB4cGNzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHhwY3NfcmtfaW5pdF9jbGsocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geHBjc19ya19pbml0X2J1cyhweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeHBjc19ya19vZl9pZHNbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3MmIzM0OyB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovIH0sCiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4cGNzX3JrX29mX2lkcyk7CiYjNDM7CiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25wOwomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7CiYjNDM7CXN0cnVjdCBkd194cGNzICp4cGNzOwomIzQzOwl1MzIgcG9ydDsKJiM0MzsKJiM0MzsJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwomIzQzOwomIzQzOwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7cmVnJiMzNDssICZhbXA7cG9ydCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZSgoaW50KXBvcnQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIFRoZSBYUENTIHBkZXYgaXMgYXR0YWNoZWQgdG8gdGhlIHBhcmVudCBub2RlICovCiYjNDM7CXBjc19ucCA9IG9mX2dldF9wYXJlbnQobnApOwomIzQzOwlpZiAoIXBjc19ucCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwomIzQzOwomIzQzOwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkgewomIzQzOwkJb2Zfbm9kZV9wdXQocGNzX25wKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb2ZfbWF0Y2hfbm9kZSh4cGNzX3JrX29mX2lkcywgcGNzX25wKSkgewomIzQzOwkJb2Zfbm9kZV9wdXQocGNzX25wKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBjc19ucCk7CiYjNDM7CW9mX25vZGVfcHV0KHBjc19ucCk7CiYjNDM7CWlmICghcGRldikKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwomIzQzOwomIzQzOwlkZXZpY2VfbG9jaygmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CXB4cGNzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CWlmICghcHhwY3MgfHwgIXB4cGNzLSZndDtidXMpIHsKJiM0MzsJCWRldmljZV91bmxvY2soJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwkJcHV0X2RldmljZSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKJiM0MzsJfQomIzQzOwomIzQzOwl4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihweHBjcy0mZ3Q7YnVzLCAoaW50KXBvcnQpOwomIzQzOwlkZXZpY2VfdW5sb2NrKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUih4cGNzKSkgewomIzQzOwkJcHV0X2RldmljZSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4geHBjczsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV9saW5rX2FkZChkZXYsICZhbXA7cGRldi0mZ3Q7ZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7CiYjNDM7CQl4cGNzX2Rlc3Ryb3koeHBjcyk7CiYjNDM7CQlwdXRfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwlyZXR1cm4geHBjczsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19ya19jcmVhdGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy0mZ3Q7Y3NyX2Nsayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtJmd0O2Nzcl9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcywKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCwKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lLAomIzQzOwkJCSAgIE5VTEwpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhwY3NfcmtfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSB4cGNzX3JrX3Byb2JlLAomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O3JrX3hwY3MtZHd4cGNzJiMzNDssCiYjNDM7CQkucG0gPSBwbV9wdHIoJmFtcDt4cGNzX3JrX3BtX29wcyksCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSB4cGNzX3JrX29mX2lkcywKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCmluZGV4IDAzMzdlMmJjYzAxMjUuLjUwYjljZGY5NGZkYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCkBAIC04MTYsOSAmIzQzOzgxNiwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLAogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiYjNDM7CS8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovCiYjNDM7CXJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlpZiAobmVnX21vZGUgPT0gUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEKQogCQlyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUiwKLQkJCQkgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CQkJCSBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwOTMsMTAgJiM0MzsxMDk4LDE1IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovCi0JaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkKJiM0MzsJaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkgewomIzQzOwkJLyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqLwogCQl4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApOwogCiYjNDM7CQkvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqLwomIzQzOwkJeHBjc19tb2RpZnkoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLCBCTUNSX0FOUkVTVEFSVCwKJiM0MzsJCQkgICAgQk1DUl9BTlJFU1RBUlQpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwwX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDsKJiM0MzsJc3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfc2dtaWlfbWFjX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47CiAJc3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuOwogfTsKQEAgLTIxMiw2ICYjNDM7MjEzLDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiB7CiAJYm9vbCBlbmFibGVfc3NjOwogCWJvb2wgZXh0X3JlZmNsazsKIAlzdHJ1Y3QgY2xrICpyZWZjbGs7CiYjNDM7CXUzMiBzZ21paV9tYWNfc2VsOwogfTsKIAogc3RhdGljIHZvaWQgcm9ja2NoaXBfY29tYnBoeV91cGRhdGVsKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYsCkBAIC0zNzUsNiAmIzQzOzM3Nyw5IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfY29tYnBoeV9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByb2NrY2hpcF9jb21icGh5CiAKIAlwcml2LSZndDtleHRfcmVmY2xrID0gZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAmIzM0O3JvY2tjaGlwLGV4dC1yZWZjbGsmIzM0Oyk7CiAKJiM0MzsJcHJpdi0mZ3Q7c2dtaWlfbWFjX3NlbCA9IDE7CiYjNDM7CWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICYjMzQ7cm9ja2NoaXAsc2dtaWktbWFjLXNlbCYjMzQ7LCAmYW1wO3ByaXYtJmd0O3NnbWlpX21hY19zZWwpOwomIzQzOwogCXByaXYtJmd0O3BoeV9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X2V4Y2x1c2l2ZShkZXYsICYjMzQ7cGh5JiMzNDspOwogCS8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi8KIAlpZiAoUFRSX0VSUihwcml2LSZndDtwaHlfcnN0KSA9PSAtRU5PRU5UKQpAQCAtODczLDYgJiM0Mzs4NzgsOCBAQCBzdGF0aWMgaW50IHJrMzU2OF9jb21icGh5X2NmZyhzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2KQogCQlicmVhazsKIAogCWNhc2UgUEhZX1RZUEVfU0dNSUk6CiYjNDM7CQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BpcGVfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV9zZ21paV9tYWNfc2VsLAomIzQzOwkJCQkJcHJpdi0mZ3Q7c2dtaWlfbWFjX3NlbCAmZ3Q7IDApOwogCQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BpcGVfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7CiAJCXJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0mZ3Q7cGh5X2dyZiwgJmFtcDtjZmctJmd0O3BpcGVfcGh5bW9kZV9zZWwsIHRydWUpOwogCQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BoeV9ncmYsICZhbXA7Y2ZnLSZndDtwaXBlX3NlbF9xc2dtaWksIHRydWUpOwpAQCAtOTg0LDYgJiM0Mzs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7CiAJLmNvbjNfZm9yX3NhdGEJCT0geyAweDAwMGMsIDE1LCAwLCAweDAwLCAweDQ0MDcgfSwKIAkvKiBwaXBlLWdyZiAqLwogCS5waXBlX2NvbjBfZm9yX3NhdGEJPSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LAomIzQzOwkucGlwZV9zZ21paV9tYWNfc2VsCT0geyAweDAwNDAsIDEsIDEsIDB4MDAsIDB4MDEgfSwKIAkucGlwZV94cGNzX3BoeV9yZWFkeQk9IHsgMHgwMDQwLCAyLCAyLCAweDAwLCAweDAxIH0sCiAJLnUzb3RnMF9wb3J0X2VuCQk9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSwKIAkudTNvdGcxX3BvcnRfZW4JCT0geyAweDAxNDQsIDE1LCAwLCAweDAxODEsIDB4MTEwMCB9LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaCBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjg3MjNkNWJkNzVjYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmgKQEAgLTAsMCAmIzQzOzEsMTEgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9ICiYjNDM7I2RlZmluZSBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Bjcy9wY3MteHBjcy5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMTUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXM6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaCBzZXJpZXMsIGZvY3VzaW5nIG9uIHRoZSBgYW1kNjRgIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGxheSBvdXQgdGhlIGNoYW5nZXMsIHJpZ2h0PyBJJiMzOTttIHNlZWluZyBhIGJ1bmNoIG9mIGZpbGVzOiBkb2N1bWVudGF0aW9uIGJpbmRpbmdzLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHdheXMgaW1wb3J0YW50ISksIHNldmVyYWwgRFRTIGZpbGVzIGZvciBSb2NrY2hpcCBTb0NzIChgcmszNTY4YCksIHNvbWUgYEtjb25maWdgIGFuZCBgTWFrZWZpbGVgIHVwZGF0ZXMgaW4gbmV0d29yayBkcml2ZXJzLCBhbmQgdGhlbiBhIHNsZXcgb2YgZHJpdmVyIGZpbGVzOiBSb2NrY2hpcC1zcGVjaWZpYyBvbmVzIGZvciBQQ1MgYW5kIFBIWSAoYHBjcy14cGNzLXJrLmNgLCBgcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBgZHdtYWMtcmsuY2ApLCBwbHVzIGEgc2V0IG9mIGBzdG1tYWNgIHJlZmFjdG9yaW5nIHRvdWNoZXMgZm9yIHZhcmlvdXMgYGR3bWFjYCBkcml2ZXJzIChgZHdtYWMtaW50ZWwuY2AsIGBkd21hYy1yZW5lc2FzLWdiZXRoLmNgLCBgZHdtYWMtcnpuMS5jYCwgYGR3bWFjLXNvY2ZwZ2EuY2ApIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4KCkFoYSEgVGhpcyBicmVha3MgZG93biBuaWNlbHkuIFdlJiMzOTt2ZSBnb3QgZGlzdGluY3QgYXJlYXMgb2YgY29uY2VybjogdGhlIFJvY2tjaGlwIFNvQy1zcGVjaWZpYyBjb2RlLCB0YXJnZXRpbmcgQVJNL0FSTTY0IHBsYXRmb3JtcywgYW5kIHRoZW4gdGhlIG1vcmUgZ2VuZXJpYyBgc3RtbWFjYCB1cGRhdGVzLCBzb21lIG9mIHdoaWNoIHNlZW0gdG8gaW52b2x2ZSBJbnRlbCBoYXJkd2FyZSAoYGR3bWFjLWludGVsLmNgKS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBzdG1tYWNfbWRpby5jYCBtb2RpZmljYXRpb25zLCBlc3BlY2lhbGx5IGBzdG1tYWNfcGNzX3NldHVwKClgIGFuZCBgc3RtbWFjX3Bjc19jbGVhbigpYC4gQW5kIG9mIGNvdXJzZSB0aGUgUENTLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKClgIGFuZCBgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKClgIGluIGBwY3MteHBjcy5jYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gZm9yIGBhbWQ2NGAgaXMgdGhpczogY2FuIEkgZXZlbiByZWFjaCBgc3RtbWFjYCwgYGR3bWFjLWludGVsYCwgb3IgdGhlIGBwY3MteHBjc2AgY29tcG9uZW50cyB0aHJvdWdoIHN5emthbGxlciwgc3RhbmRhcmQgUUVNVSBzZXR1cHMsIG9yIHdpbGwgdGhpcyByZXF1aXJlIHZlcnkgc3BlY2lmaWMgcGh5c2ljYWwgUENJIGRldmljZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byBrbm93IGlmIHRoZXNlIGFyZSBldmVuIHZpYWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nIG9uIGBhbWQ2NGAuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGR3bWFjLWludGVsLmNgLCB0aGUgYHN0bW1hY2AgY29kZSwgYW5kIGBwY3MteHBjc2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgZW11bGF0aW9uIHN1cHBvcnQgaW4gUUVNVSBvciBpZiB0aGVzZSBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIHNvbWUgdmlydHVhbCBidXMgb3Igc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLgoKVGltZSB0byBzZWFyY2ghIExldCYjMzk7cyBnZXQgdGhlIGdyZXBwZXIgb3Igc2VhcmNoIHRvb2xzIGdvaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5jb3ZlciBhYm91dCB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGVzZSBjb21wb25lbnRzIG9uIGFuIGBhbWQ2NGAgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludGVsX21nYmVfY29tbW9uX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTY0MT1zdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo2NTA6c3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02NTEtXHRcdFx0XHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc5Nj1zdGF0aWMgaW50IGVobF9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODE5Olx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgyMC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NTk9c3RhdGljIGludCB0Z2xfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3NzpcdHJldHVybiBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHBkZXYsIHBsYXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTAzND1zdGF0aWMgaW50IGFkbG5fY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDU2Olx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjIzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBkd21hYy1pbnRlbCBEcml2ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHdtYWMtaW50ZWwuY2AuIEZyb20gdGhlIG5hbWUgYWxvbmUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFdGhlcm5ldCBNQUMgY29udHJvbGxlcnMsIHNwZWNpZmljYWxseSB0aG9zZSBmb3VuZCBpbiBFbGtoYXJ0IExha2UgKEVITCksIFRpZ2VyIExha2UgKFRHTCksIGFuZCBBbGRlciBMYWtlLU4gKEFETE4pIHBsYXRmb3Jtcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgcHJlY2lzZWx5ICp3aGljaCogZGV2aWNlcyBkb2VzIHRoaXMgZHJpdmVyIGludGVuZCB0byBwcm9iZSBhbmQgbWFuYWdlPyBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElEcywgb3IgcGVyaGFwcyBldmVuIHZlbmRvciBJRHMsIHRoYXQgdGhpcyBkcml2ZXIgc3VwcG9ydHMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGFuZCwgZnJhbmtseSwgZm9yIGVuc3VyaW5nIEkmIzM5O20gZXZlbiBsb29raW5nIGF0IHRoZSByaWdodCBwaWVjZSBvZiBjb2RlIGZvciB0aGUgdGFzayBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRyaXZlciBhY3R1YWxseSBwcm9iZXMgZm9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZXZpY2UgSURzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTQ1MT1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaW50ZWxfZXRoX3BjaV9pZF90YWJsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0NTM6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGludGVsX2V0aF9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xNDU0LVx0Lm5hbWUgPSBcJiMzNDtpbnRlbC1ldGgtcGNpXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTQ2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQ2Mzptb2R1bGVfcGNpX2RyaXZlcihpbnRlbF9ldGhfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NzEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHRoYXQmIzM5O3MgZXZlbiAqcmVhY2hhYmxlKiB3aXRoaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgR0NFIG9yIFFFTVUgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVyIGZpbGVzOiBgZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNgLCBgZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBhbmQgc2V2ZXJhbCBgc3RtbWFjYCB2YXJpYW50cyAoYGR3bWFjLXJrYCwgYGR3bWFjLXJlbmVzYXMtZ2JldGhgLCBgZHdtYWMtcnpuMWAsIGBkd21hYy1zb2NmcGdhYCwgYGR3bWFjLWludGVsYCwgYHN0bW1hY19tZGlvLmNgLCBhbmQgYHBjcy14cGNzLmNgKS4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBlYWNoIGZpbGUgYWdhaW5zdCB0aGUgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7IG91dGxpbmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXNlIGRyaXZlcnMgZm9yIGhhcmR3YXJlIHRoYXQmIzM5O3MgKmVtdWxhdGVkKiBpbiBRRU1VPwoKQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGR3bWFjLWludGVsYCBpcyBzcGVjaWZpYyB0byBJbnRlbCBTb0NzIGxpa2UgRWxraGFydCBMYWtlLCBUaWdlciBMYWtlLCBhbmQgQWxkZXIgTGFrZS1OLiBUaG9zZSBhcmUgKnBoeXNpY2FsKiBTb0NzOyBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gU2FtZSBmb3IgYHBjcy14cGNzLXJrYCBhbmQgYGR3bWFjLXJrYCwgd2hpY2ggYXJlIFJvY2tjaGlwIFJLMzU2OCBTb0MgcGxhdGZvcm0gZGV2aWNlcy4gVGhleSYjMzk7cmUgRFQtYmFzZWQgQVJNNjQgaGFyZHdhcmUsIHNvIGRlZmluaXRlbHkgbm90IGluIGEgc3RhbmRhcmQgeDg2IFFFTVUgc2V0dXAuIGBkd21hYy1yZW5lc2FzLWdiZXRoYCwgYGR3bWFjLXJ6bjFgLCBhbmQgYGR3bWFjLXNvY2ZwZ2FgIGFyZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBSZW5lc2FzIGFuZCBJbnRlbCBTb0MgRlBHQSBBUk0vUklTQy1WIGJvYXJkcy4gVGhleSBkb24mIzM5O3QgYXBwZWFyIGluIHg4Ni9hbWQ2NCBlbXVsYXRpb24uCgpgc3RtbWFjX21kaW8uY2AgaXMgcGFydCBvZiB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgZHJpdmVyLiBJdCBvbmx5IHJ1bnMgb24gc3RtbWFjIGhhcmR3YXJlLCBhbmQgbm9uZSBvZiB0aG9zZSBhcmUgZW11bGF0ZWQgaW4gbXkgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGBwY3MteHBjcy5jYCwgd2hpY2ggaXMgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBkcml2ZXIsIGluc3RhbnRpYXRlZCBieSBzdG1tYWMgb3IgZHdjIHhwY3MgZGV2aWNlcy4KCk5vdywgSSYjMzk7bSB0aGlua2luZywgY291bGQgKmFueSogdmlydHVhbCBidXMgb3Igc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIGluc3RhbnRpYXRlIGBzdG1tYWNgIG9yIGBwY3MteHBjc2A/IEkmIzM5O20gdGhpbmtpbmcgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgdmlydGlvLCBldGMuIE5vbmUgb2YgdGhvc2UgSSBjYW4gdGhpbmsgb2YgZG8uIFRoZXkgaGF2ZSB0aGVpciBvd24gbmV0d29yayBkZXZpY2VzIGFuZCBkb24mIzM5O3QgcmVseSBvbiBzdG1tYWMgb3IgcGNzLXhwY3MuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrOiBEbyAqYW55KiB2aXJ0dWFsIGRyaXZlcnMsIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYG5ldGtpdGAsIGB2ZXRoYCwgYGR1bW15YCwgYHRlYW1gLCBgYm9uZGAsIG9yIGB1c2JuZXRgLCB1dGlsaXplIGBzdG1tYWNgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgYHBoeWxpbmtgIHdpdGggYHBjcy14cGNzYD8gUGh5bGluayAqaXMqIHVzZWQgYnkgRXRoZXJuZXQgZHJpdmVycywgYnV0IGBwY3MteHBjc2AgaXMgYSBQQ1MgZHJpdmVyIGZvciBTeW5vcHN5cyBEVyBYUENTLCB3aGljaCBpcyB1c2VkIGJ5ICpwaHlzaWNhbCogRXRoZXJuZXQgTUFDcywgbm90IHZpcnR1YWwgb25lcy4gSSYjMzk7bSBnb2luZyB0byBncmVwIGZvciBgeHBjc19jcmVhdGVgIGFjcm9zcyB0aGUga2VybmVsIHRvIGJlIGNlcnRhaW4sIGJ1dCBzbyBmYXIgdGhlIHBhdGggdG8gZnV6emluZyBsb29rcyBibG9ja2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hwY3NfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0NjpcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KGJ1cywgMCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDctXHRpZiAoSVNfRVJSKHBjcykpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQxMjpcdFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoYnVzLCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMy1cdFx0aWYgKElTX0VSUihwY3MpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM9MTk3PWludCBmYm5pY19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIwNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jOjIwNTpcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KGZiZC1cdTAwM2VtZGlvX2J1cywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMDYtXHRpZiAoSVNfRVJSKHBjcykpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTYwNj1zdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE1LVx0XHRwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsIFwmIzM0O3Bjcy1oYW5kbGVcJiMzNDssIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo2MTY6XHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTYxNy1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTktXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjIwOlx0XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVx1MDAzZW1paSwgYWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTYyMS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTEyNj1zdGF0aWMgaW50IHR4Z2JlX21kaW9fcGNzX2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTU0Olx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYobWlpX2J1cywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1NS1cdGlmIChJU19FUlIocGNzKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYz00NDc9c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy00OTEtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYzo0OTI6XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihweHBjcy1cdTAwM2VidXMsIChpbnQpcG9ydCk7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy00OTMtXHRkZXZpY2VfdW5sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYz0xNDk5PXN0YXRpYyBpbnQgeHBjc19pZGVudGlmeShzdHJ1Y3QgZHdfeHBjcyAqeHBjcylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTE4LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTUxOTpzdGF0aWMgc3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX2RhdGEoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTUyMC17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM9MTU3MT1zdGF0aWMgaW50IHhwY3NfaW5pdF9pZChzdHJ1Y3QgZHdfeHBjcyAqeHBjcylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTg1LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTU4NjpzdGF0aWMgc3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1ODcte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1OTAtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTkxOlx0eHBjcyA9IHhwY3NfY3JlYXRlX2RhdGEobWRpb2Rldik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTkyLVx0aWYgKElTX0VSUih4cGNzKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjIyLS8qKlxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTYyMzogKiB4cGNzX2NyZWF0ZV9tZGlvZGV2KCkgLSBjcmVhdGUgYSBEVyB4UENTIGluc3RhbmNlIHdpdGggdGhlIE1ESU8gQGFkZHJcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MjQtICogQGJ1czogcG9pbnRlciB0byB0aGUgTURJTy1idXMgZGVzY3JpcHRvciBmb3IgdGhlIGRldmljZSB0byBiZSBsb29rZWQgYXRcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjMwLSAqL1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTYzMTpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzIte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzktXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjQwOlx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY0MS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NDI6XHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY0MzpcdCAqIHN1Y2Nlc3NmdWwuIElmIHhwY3NfY3JlYXRlKCkgZmFpbHMsIHRoaXMgd2lsbCBmcmVlIHRoZSBtZGlvXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjQ0LVx0ICogZGV2aWNlIGhlcmUuIEluIGFueSBjYXNlLCB3ZSBkb24mIzM5O3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjUxLX1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTI6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjUzLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1NDpzdHJ1Y3QgcGh5bGlua19wY3MgKnhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1NS17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1Ny1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTg6XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihidXMsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1OS1cdGlmIChJU19FUlIoeHBjcykpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY2My19XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjY0OkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjUtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY2LS8qKlxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NzogKiB4cGNzX2NyZWF0ZV9md25vZGUoKSAtIENyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2UgZnJvbSBAZndub2RlXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY4LSAqIEBmd25vZGU6IGZ3bm9kZSBoYW5kbGUgcG9pbmluZyB0byB0aGUgRFcgWFBDUyBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc1LSAqL1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY3NjpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc3LXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjg3LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY4ODpcdHhwY3MgPSB4cGNzX2NyZWF0ZShtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODktXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjkwOlx0LyogeHBjc19jcmVhdGUoKSBoYXMgdGFrZW4gYSByZWZjb3VudCBvbiB0aGUgbWRpb2RldiBpZiBpdCB3YXNcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2OTE6XHQgKiBzdWNjZXNzZnVsLiBJZiB4cGNzX2NyZWF0ZSgpIGZhaWxzLCB0aGlzIHdpbGwgZnJlZSB0aGUgbWRpb1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5Mi1cdCAqIGRldmljZSBoZXJlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gaG9sZCBvdXIgcmVmZXJlbmNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5OS19XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNzAwOkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX2Z3bm9kZSk7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzAxLVxuLS1cbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg9NTU9dm9pZCB4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHN0cnVjdCBkd194cGNzICp4cGNzLCB1OCBtdWx0X2ZhY3QpO1xuaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MuaDo1NjpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oOjU3OnN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSk7XG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oLTU4LXZvaWQgeHBjc19kZXN0cm95KHN0cnVjdCBkd194cGNzICp4cGNzKTtcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmgtNTktXG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oOjYwOnN0cnVjdCBwaHlsaW5rX3BjcyAqeHBjc19jcmVhdGVfcGNzX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MuaC02MS12b2lkIHhwY3NfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzAyCgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDcwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEZ1enppbmcgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZTogSXQmIzM5O3MgYWxsIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciBzcGVjaWZpYywgcGh5c2ljYWwgaGFyZHdhcmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRyaXZlcnMgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggWFBDUyBFdGhlcm5ldCBQQ1MsIHNvbWUgYWNjb21wYW55aW5nIFJvY2tjaGlwIG5hbmVuZyBjb21icGh5IGFuZCBkd21hYy1yayBkcml2ZXJzLCBhbmQgdmFyaW91cyBzdG1tYWMvcGNzLXhwY3MgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMsIGluY2x1ZGluZyBJbnRlbC9SZW5lc2FzL0FsdGVyYSBzdG1tYWMgZ2x1ZS4KClRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCAqYWxsKiBvZiB0aGlzIGNvZGUgZnVuZGFtZW50YWxseSByZWxpZXMgb24gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCYjMzk7cyAqbm90KiBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIG9uIGFtZDY0LiAgVGhlIGRyaXZlcnMgYXJlIHRhaWxvcmVkIGZvciBzcGVjaWZpYyBTb0NzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQ3MsIFJlbmVzYXMgU29DcywgZXRjLikgYW5kIHZlbmRvci1zcGVjaWZpYyBjb250cm9sbGVycy4gVGhpcyBpbmNsdWRlcyBtb2RpZmljYXRpb25zIGluIHRoZSBkZXZpY2UgdHJlZXMgdG9vLgoKRXNzZW50aWFsbHksIHRoZXJlJiMzOTtzIG5vIHdheSBzeXprYWxsZXIsIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cCwgaXMgZ29pbmcgdG8gYmUgYWJsZSB0byBldmVuICp0b3VjaCogdGhpcyBjb2RlLiBJdCYjMzk7cyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYXJlIGp1c3QgdG9vIHRpZ2h0LgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBlbXB0eS4gSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo1NjwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NTY6MDAuNDQyMzMxNDU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3ODI4NzcyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjowMC40NDIzMzY1NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjgxOTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUwMDdjNzBlNzE0MzYyOGRlOWM1ZmQ4YzYzMzJhMDg3NGZkODEwYWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxOTo1NTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wODUyZDBiY2I2NmEyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sXFxuQEAgLTAsMCArMSwxMTAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1NcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gQ29pYSBQcmFudCBcXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgUm9ja2NoaXAgUkszNTY4IFNvQyBpbnRlZ3JhdGVzIGEgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbFxcbisgIENvZGluZyBTdWJsYXllciAoWFBDUykuXFxuKyAgVGhlIFBDUyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgKE1BQylcXG4rICBhbmQgdGhlIFBoeXNpY2FsIE1lZGl1bSBBdHRhY2htZW50IChQTUEpIHN1YmxheWVyIHRocm91Z2ggYSBNZWRpYVxcbisgIEluZGVwZW5kZW50IEludGVyZmFjZSAoR01JSSkuXFxuK1xcbisgIFRoZSBYUENTIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIEFQQjMgYnVzIGFuZCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBhXFxuKyAgTmFuZW5nIENvbWJvIFNlckRlcyBQSFkuXFxuKyAgSXQgc3VwcG9ydHMgMTAwMEJBU0UtWCwgU0dNSUkgYW5kIFFTR01JSSBtb2Rlcy5cXG4rXFxuKyAgVGhlIGJsb2NrIGNvbnRhaW5zIGZvdXIgTUlJIHBvcnRzIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZFxcbisgIHJvdXRlZCB0byBvbmUgb2YgdGhlIEV0aGVybmV0IEdNQUMgY29udHJvbGxlcnMgdmlhIHRoZSBwY3MtaGFuZGxlXFxuKyAgcHJvcGVydHkgaW4gdGhlIE1BQyBkZXZpY2UgdHJlZSBub2RlLlxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgY29uc3Q6IHJvY2tjaGlwLHJrMzU2OC14cGNzXFxuK1xcbisgIHJlZzpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIFxcXCIjYWRkcmVzcy1jZWxsc1xcXCI6XFxuKyAgICBjb25zdDogMVxcbitcXG4rICBcXFwiI3NpemUtY2VsbHNcXFwiOlxcbisgICAgY29uc3Q6IDBcXG4rXFxuKyAgY2xvY2tzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2Vzc1xcbisgICAgICAtIGRlc2NyaXB0aW9uOiBFRUUgY2xvY2sgKGNsa19lZWVfaSksIHJlcXVpcmVkIGZvciBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0IG9wZXJhdGlvblxcbitcXG4rICBjbG9jay1uYW1lczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGNvbnN0OiBjc3JcXG4rICAgICAgLSBjb25zdDogZWVlXFxuK1xcbisgIHBoeXM6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBwaHktbmFtZXM6XFxuKyAgICBjb25zdDogc2VyZGVzXFxuK1xcbisgIHBvd2VyLWRvbWFpbnM6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXFxcIl5wY3MtbWlpQFswLTNdJFxcXCI6XFxuKyAgICB0eXBlOiBvYmplY3RcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBPbmUgb2YgdGhlIGZvdXIgTUlJIHBvcnRzIG9mIHRoZSBYUENTLiBUaGUgcG9ydCBpcyBsaW5rZWQgdG8gYW5cXG4rICAgICAgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIgdmlhIHRoZSBwY3MtaGFuZGxlIHByb3BlcnR5IGluIHRoZSBNQUMnc1xcbisgICAgICBkZXZpY2UgdHJlZSBub2RlLlxcbitcXG4rICAgIHByb3BlcnRpZXM6XFxuKyAgICAgIHJlZzpcXG4rICAgICAgICBkZXNjcmlwdGlvbjogTUlJIHBvcnQgbnVtYmVyLlxcbisgICAgICAgIGVudW06IFswLCAxLCAyLCAzXVxcbitcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIHJlZ1xcbitcXG4rICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSByZWdcXG4rICAtIFxcXCIjYWRkcmVzcy1jZWxsc1xcXCJcXG4rICAtIFxcXCIjc2l6ZS1jZWxsc1xcXCJcXG4rICAtIGNsb2Nrc1xcbisgIC0gY2xvY2stbmFtZXNcXG4rICAtIHBoeXNcXG4rICAtIHBoeS1uYW1lc1xcbisgIC0gcG93ZXItZG9tYWluc1xcbitcXG4rYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yazM1NjgtY3J1LmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcG93ZXIvcmszNTY4LXBvd2VyLmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcGh5L3BoeS5oXFx1MDAzZVxcbitcXG4rICAgIHBjc0BmZGEwMDAwMCB7XFxuKyAgICAgIGNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiO1xcbisgICAgICByZWcgPSBcXHUwMDNjMHhmZGEwMDAwMCAweDIwMDAwMFxcdTAwM2U7XFxuKyAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZjcnUgUENMS19YUENTXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXFx1MDAzZTtcXG4rICAgICAgY2xvY2stbmFtZXMgPSBcXFwiY3NyXFxcIiwgXFxcImVlZVxcXCI7XFxuKyAgICAgIHBoeXMgPSBcXHUwMDNjXFx1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXFx1MDAzZTtcXG4rICAgICAgcGh5LW5hbWVzID0gXFxcInNlcmRlc1xcXCI7XFxuKyAgICAgIHBvd2VyLWRvbWFpbnMgPSBcXHUwMDNjXFx1MDAyNnBvd2VyIFJLMzU2OF9QRF9QSVBFXFx1MDAzZTtcXG4rXFxuKyAgICAgIHBjcy1taWlAMCB7XFxuKyAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICB9O1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcXG5pbmRleCAzNzliMDhiZDllOTdhLi44ZTg5OGJjZTlhZjczIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXFxuQEAgLTgwLDYgKzgwLDE1IEBAIHByb3BlcnRpZXM6XFxuICAgICBkZXNjcmlwdGlvbjpcXG4gICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuXFxuIFxcbisgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6XFxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcXG4rICAgIGVudW06IFswLCAxXVxcbisgICAgZGVmYXVsdDogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuXFxuKyAgICAgIFRoZSBoYXJkd2FyZSByZXNldCB2YWx1ZSBpcyBHTUFDMSAoMSkuIFNldCB0aGlzIHRvIDAgdG8gcm91dGVcXG4rICAgICAgU0dNSUkgdG8gR01BQzAuXFxuK1xcbiAgIFxcXCIjcGh5LWNlbGxzXFxcIjpcXG4gICAgIGNvbnN0OiAxXFxuIFxcbkBAIC0xMDUsNiArMTE0LDEwIEBAIGFsbE9mOlxcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcXG4gICAgICAgICByZXNldC1uYW1lczpcXG4gICAgICAgICAgIG1heEl0ZW1zOiAxXFxuKyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZVxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZVxcbiAgIC0gaWY6XFxuICAgICAgIHByb3BlcnRpZXM6XFxuICAgICAgICAgY29tcGF0aWJsZTpcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGZjMzIwYjM3MzY1NmYuLmRkYTRkMjExYjdkYjQgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0yMzczOCw2ICsyMzczOCwxNSBAQCBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sXFxuIEY6XFx0c291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX3NhaS4qXFxuIFxcbitST0NLQ0hJUCBYUENTIERSSVZFUlxcbitNOlxcdENvaWEgUHJhbnQgXFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitMOlxcdGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWxcXG4rRjpcXHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xcbitGOlxcdGluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXG4rXFxuIFJPQ0tFUiBEUklWRVJcXG4gTTpcXHRKaXJpIFBpcmtvIFxcdTAwM2NqaXJpQHJlc251bGxpLnVzXFx1MDAzZVxcbiBMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xcbmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcXG4rKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAvZHRzLXYxLztcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9waW5jdHJsL3JvY2tjaGlwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9zb2Mvcm9ja2NoaXAsdm9wMi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwicmszNTY4LmR0c2lcXFwiXFxuQEAgLTI0Miw2ICsyNDMsNyBAQCBcXHUwMDI2Y29tYnBoeTEge1xcbiBcXG4gXFx1MDAyNmNvbWJwaHkyIHtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbitcXHRyb2NrY2hpcCxzZ21paS1tYWMtc2VsID0gXFx1MDAzYzBcXHUwMDNlO1xcbiB9O1xcbiBcXG4gXFx1MDAyNmNwdTAge1xcbkBAIC0yNjAsOSArMjYyLDE4IEBAIFxcdTAwMjZjcHUzIHtcXG4gXFx0Y3B1LXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2dmRkX2NwdVxcdTAwM2U7XFxuIH07XFxuIFxcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXFxuKy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqL1xcbiBcXHUwMDI2Z21hYzAge1xcbi1cXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHRhc3NpZ25lZC1jbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBTQ0xLX0dNQUMwX1JYX1RYXFx1MDAzZTtcXG4rXFx0YXNzaWduZWQtY2xvY2stcGFyZW50cyA9IFxcdTAwM2NcXHUwMDI2eHBjc19nbWFjMF9jbGtcXHUwMDNlO1xcbitcXHRwY3MtaGFuZGxlID0gXFx1MDAzY1xcdTAwMjZ4cGNzX21paTBcXHUwMDNlO1xcbitcXHRtYW5hZ2VkID0gXFxcImluLWJhbmQtc3RhdHVzXFxcIjtcXG4rXFx0cGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2c2dtaWlfcGh5XFx1MDAzZTtcXG4rXFx0cGh5LW1vZGUgPSBcXFwic2dtaWlcXFwiO1xcbitcXHRwaHktc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZ2Y2NfM3YzXFx1MDAzZTtcXG4rXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4rXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZnbWFjMF9taWltXFx1MDAzZTtcXG4rXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXFxuQEAgLTM0MSw2ICszNTIsMzYgQEAgXFx1MDAyNmkyczBfOGNoIHtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4rXFx1MDAyNm1kaW8wIHtcXG4rXFx0c2dtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcXFwiO1xcbitcXHRcXHRyZWcgPSBcXHUwMDNjMHgzXFx1MDAzZTtcXG4rXFx0XFx0bWF4LXNwZWVkID0gXFx1MDAzYzEwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1hc3NlcnQtdXMgPSBcXHUwMDNjMjAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1kZWFzc2VydC11cyA9IFxcdTAwM2MxMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzMgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1xcdTAwM2U7XFxuK1xcbitcXHRcXHRsZWRzIHtcXG4rXFx0XFx0XFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0XFx0XFx0bGVkQDEge1xcbitcXHRcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcXG4rXFx0XFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rXFx0XFx0XFx0fTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAyIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK307XFxuK1xcbiBcXHUwMDI2bWRpbzEge1xcbiBcXHRyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHtcXG4gXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlxcXCI7XFxuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuIFxcdFxcdHJlc2V0LWdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvNCBSS19QQzAgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG4gXFx0XFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcXHUwMDNjMTUwMFxcdTAwM2U7XFxuIFxcdFxcdHR4LWludGVybmFsLWRlbGF5LXBzID0gXFx1MDAzYzE1MDBcXHUwMDNlO1xcbitcXG4rXFx0XFx0bGVkcyB7XFxuK1xcdFxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHQjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAxIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9XQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcbitcXHRcXHRcXHRsZWRAMiB7XFxuK1xcdFxcdFxcdFxcdHJlZyA9IFxcdTAwM2MyXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0Y29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xcbitcXHRcXHRcXHRcXHRkZWZhdWx0LXN0YXRlID0gXFxcImtlZXBcXFwiO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbiB9O1xcbiBcXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcXHUwMDI2eGluMzJrIHtcXG4gXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4gXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZjbGszMmtfb3V0MVxcdTAwM2U7XFxuIH07XFxuK1xcbitcXHUwMDI2eHBjcyB7XFxuK1xcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4rXFx0cGh5cyA9IFxcdTAwM2NcXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcXHUwMDNlO1xcbitcXHRwaHktbmFtZXMgPSBcXFwic2VyZGVzXFxcIjtcXG4rfTtcXG4rXFxuK1xcdTAwMjZ4cGNzX21paTAge1xcbitcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuK307XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuaW5kZXggM2JjNjUzZjAyN2YxZi4uOTg5ZTE2NGMwZWIzOSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxcbkBAIC0xMTAsNiArMTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHtcXG4gXFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4gXFx0fTtcXG4gXFxuK1xcdHhwY3M6IHBjc0BmZGEwMDAwMCB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiO1xcbitcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdHJlZyA9IFxcdTAwM2MweDAgMHhmZGEwMDAwMCAweDAgMHgyMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBQQ0xLX1hQQ1NcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmNydSBDTEtfWFBDU19FRUVcXHUwMDNlO1xcbitcXHRcXHRjbG9jay1uYW1lcyA9IFxcXCJjc3JcXFwiLCBcXFwiZWVlXFxcIjtcXG4rXFx0XFx0cG93ZXItZG9tYWlucyA9IFxcdTAwM2NcXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcXHUwMDNlO1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXG4rXFx0XFx0eHBjc19taWkwOiBwY3MtbWlpQDAge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHR4cGNzX21paTE6IHBjcy1taWlAMSB7XFxuK1xcdFxcdFxcdHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdHhwY3NfbWlpMjogcGNzLW1paUAyIHtcXG4rXFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHRcXHR9O1xcbitcXG4rXFx0XFx0eHBjc19taWkzOiBwY3MtbWlpQDMge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjM1xcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK1xcbitcXHR4cGNzX2dtYWMwX2NsazogeHBjcy1nbWFjMC1jbG9jayB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwiZml4ZWQtY2xvY2tcXFwiO1xcbitcXHRcXHRjbG9jay1mcmVxdWVuY3kgPSBcXHUwMDNjMTI1MDAwMDAwXFx1MDAzZTtcXG4rXFx0XFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXFxcImNsa19nbWFjMF94cGNzX21paVxcXCI7XFxuK1xcdFxcdCNjbG9jay1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFx0fTtcXG4rXFxuK1xcdHhwY3NfZ21hYzFfY2xrOiB4cGNzLWdtYWMxLWNsb2NrIHtcXG4rXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJmaXhlZC1jbG9ja1xcXCI7XFxuK1xcdFxcdGNsb2NrLWZyZXF1ZW5jeSA9IFxcdTAwM2MxMjUwMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRjbG9jay1vdXRwdXQtbmFtZXMgPSBcXFwiY2xrX2dtYWMxX3hwY3NfbWlpXFxcIjtcXG4rXFx0XFx0I2Nsb2NrLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXHR9O1xcbitcXG4gXFx0cGlwZV9waHlfZ3JmMDogc3lzY29uQGZkYzcwMDAwIHtcXG4gXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmXFxcIiwgXFxcInN5c2NvblxcXCI7XFxuIFxcdFxcdHJlZyA9IFxcdTAwM2MweDAgMHhmZGM3MDAwMCAweDAgMHgxMDAwXFx1MDAzZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcXG5pbmRleCBlM2RkNWFkZGE1YWNhLi41MDg4YWNjMDY5ODJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXFxuQEAgLTE3MCw2ICsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcXG4gXFx0ZGVmYXVsdCBBUkNIX1JPQ0tDSElQXFxuIFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxcbiBcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbitcXHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcXG4gXFx0aGVscFxcbiBcXHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszMjg4IFNvQy5cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXFxuaW5kZXggZjVmOWZhNjdlY2Q3Ny4uZmQ1ZjAxYzg5NDFjMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xcbkBAIC02MDMsMTMgKzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcXG4gXFx0cGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3MgPSBOVUxMO1xcbitcXHRpbnQgYWRkcjtcXG4rXFxuK1xcdGRldm5vZGUgPSBkZXZfZndub2RlKHByaXYtXFx1MDAzZWRldmljZSk7XFxuK1xcbitcXHRpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiKSkge1xcbitcXHRcXHRwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsIFxcXCJwY3MtaGFuZGxlXFxcIiwgMCk7XFxuK1xcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XFxuK1xcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhZGRyID0gZmZzKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrKSAtIDE7XFxuK1xcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXFx1MDAzZW1paSwgYWRkcik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChJU19FUlIoeHBjcykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xcbitcXG4rXFx0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSB4cGNzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaW50ZWxfbWdiZV9wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0eHBjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKTtcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4ge1xcbi1cXHQvKiBwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmVcXG4tXFx0ICogc2hvdWxkIGFsd2F5cyBiZSBhbiBYUENTLiBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBhbHdheXNcXG4tXFx0ICogcmV0dXJuIHRoaXMgaWYgcHJlc2VudC5cXG4tXFx0ICovXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbiB9XFxuIFxcbkBAIC03MzMsNiArNzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHQgICAgcGxhdC1cXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7XFxuIFxcdFxcdHBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrID0gQklUX1UzMihJTlRFTF9NR0JFX1hQQ1NfQUREUik7XFxuIFxcdFxcdHBsYXQtXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGxhdC1cXHUwMDNlcGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0O1xcbitcXHRcXHRwbGF0LVxcdTAwM2VwY3NfZXhpdCA9IGludGVsX21nYmVfcGNzX2V4aXQ7XFxuIFxcdFxcdHBsYXQtXFx1MDAzZXNlbGVjdF9wY3MgPSBpbnRlbF9tZ2JlX3NlbGVjdF9wY3M7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xcbmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXFxuQEAgLTgxLDggKzgxLDExIEBAIHN0YXRpYyBpbnQgcmVuZXNhc19nbWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFxuIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcylcXG4tXFx0XFx0bWlpY19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtaWljX2Rlc3Ryb3kocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKTtcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xcbmluZGV4IDhkNzA0MmU2ODkyNjEuLmU0N2NhMWJlYzViOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwic3RtbWFjX3BsYXRmb3JtLmhcXFwiXFxuQEAgLTQ3LDYgKzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcXG4gXFx0dm9pZCAoKnNldF90b19yZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXFxuIFxcdFxcdFxcdCAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpO1xcbiBcXHR2b2lkICgqc2V0X3RvX3JtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcXG4rXFx0dm9pZCAoKnNldF90b19zZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xcbiBcXHRpbnQgKCpzZXRfc3BlZWQpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxcbiBcXHRcXHRcXHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwgaW50IHNwZWVkKTtcXG4gXFx0dm9pZCAoKmludGVncmF0ZWRfcGh5X3Bvd2VydXApKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcXG5AQCAtNjMsNiArNjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xcbiBcXHRib29sIGNsb2NrX2dyZl9yZWdfaW5fcGhwO1xcbiBcXHRib29sIHN1cHBvcnRzX3JnbWlpO1xcbiBcXHRib29sIHN1cHBvcnRzX3JtaWk7XFxuK1xcdGJvb2wgc3VwcG9ydHNfc2dtaWk7XFxuIFxcdGJvb2wgcGhwX2dyZl9yZXF1aXJlZDtcXG4gXFx0Ym9vbCByZWdzX3ZhbGlkO1xcbiBcXHR1MzIgcmVnc1tdO1xcbkBAIC05OCw2ICsxMDEsNyBAQCBzdHJ1Y3QgcmtfcHJpdl9kYXRhIHtcXG4gXFx0Ym9vbCBpbnRlZ3JhdGVkX3BoeTtcXG4gXFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcXG4gXFx0Ym9vbCBzdXBwb3J0c19ybWlpO1xcbitcXHRib29sIHN1cHBvcnRzX3NnbWlpO1xcbiBcXG4gXFx0c3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7XFxuIFxcdGludCBudW1fY2xrcztcXG5AQCAtODA5LDYgKzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHtcXG4gI2RlZmluZSBSSzM1NjhfR1JGX0dNQUMxX0NPTjFcXHRcXHQweDAzOGNcXG4gXFxuIC8qIFJLMzU2OF9HUkZfR01BQzBfQ09OMSBcXHUwMDI2XFx1MDAyNiBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgKi9cXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUlcXHRcXHRHUkZfQ0xSX0JJVCg3KVxcbisjZGVmaW5lIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJXFx0XFx0R1JGX0JJVCg3KVxcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTFxcdFxcdFxcdEdSRl9CSVQoMylcXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxfQ0xSXFx0XFx0R1JGX0NMUl9CSVQoMylcXG4gI2RlZmluZSBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFXFx0XFx0R1JGX0JJVCgxKVxcbkBAIC04NTEsMTggKzg1NywzMiBAQCBzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3JnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxcbiBcXHRcXHQgICAgIFJLMzU2OF9HTUFDX0NMS19UWF9ETF9DRkcodHhfZGVsYXkpKTtcXG4gXFxuIFxcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cXHUwMDNlZ3JmLCBjb24xLFxcbitcXHRcXHQgICAgIFJLMzU2OF9HTUFDX01PREVfUk1JSV9SR01JSSB8XFxuIFxcdFxcdCAgICAgUkszNTY4X0dNQUNfUlhDTEtfRExZX0VOQUJMRSB8XFxuIFxcdFxcdCAgICAgUkszNTY4X0dNQUNfVFhDTEtfRExZX0VOQUJMRSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuK3tcXG4rXFx0dTMyIGNvbjE7XFxuK1xcbitcXHRjb24xID0gKGJzcF9wcml2LVxcdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XFxuK1xcdFxcdFxcdFxcdCAgICAgUkszNTY4X0dSRl9HTUFDMF9DT04xO1xcbitcXG4rXFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVxcdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Njhfb3BzID0ge1xcbiBcXHQuaW5pdCA9IHJrMzU2OF9pbml0LFxcbiBcXHQuc2V0X3RvX3JnbWlpID0gcmszNTY4X3NldF90b19yZ21paSxcXG4rXFx0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXFxuK1xcbiBcXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXFxuIFxcbiBcXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxcbiBcXG4gXFx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxcbitcXHQuc3VwcG9ydHNfc2dtaWkgPSB0cnVlLFxcbiBcXG4gXFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxcbiBcXHQucmVncyA9IHtcXG5AQCAtMTIwOCw2ICsxMjI4LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGRldl9lcnIoYnNwX3ByaXYtXFx1MDAzZWRldiwgXFxcImZhaWwgdG8gZGlzYWJsZSBwaHktc3VwcGx5XFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtXFx1MDAzZWRldmljZS1cXHUwMDNlb2Zfbm9kZTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTtcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3M7XFxuK1xcbitcXHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFxcXCJwY3MtaGFuZGxlXFxcIiwgMCk7XFxuK1xcdGlmICghcGNzX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXFx1MDAzZWRldmljZSwgcGNzX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XFxuK1xcdGlmIChJU19FUlIoeHBjcykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSB4cGNzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgKm9wcylcXG5AQCAtMTMzMCw2ICsxMzg3LDcgQEAgc3RhdGljIHN0cnVjdCBya19wcml2X2RhdGEgKnJrX2dtYWNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4gXFxuIFxcdGJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19yZ21paTtcXG4gXFx0YnNwX3ByaXYtXFx1MDAzZXN1cHBvcnRzX3JtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19ybWlpO1xcbitcXHRic3BfcHJpdi1cXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLVxcdTAwM2VzZXRfdG9fc2dtaWk7XFxuIFxcbiBcXHRpZiAob3BzLVxcdTAwM2Vpbml0KSB7XFxuIFxcdFxcdHJldCA9IG9wcy1cXHUwMDNlaW5pdChic3BfcHJpdik7XFxuQEAgLTEzNjEsNiArMTQxOSwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbiBcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19ybWlpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbitcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19zZ21paSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRkZXZfZXJyKGJzcF9wcml2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcXCJ1bnN1cHBvcnRlZCBpbnRlcmZhY2UgJWRcXFwiLCBic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKTtcXG5AQCAtMTM3OSwxNiArMTQ0MSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoYnNwX3ByaXYtXFx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXFxuK1xcdFxcdGdvdG8gc2V0X21vZGU7XFxuK1xcbiBcXHRyZXQgPSBya19nZXRfcGh5X2ludGZfc2VsKGJzcF9wcml2LVxcdTAwM2VwaHlfaWZhY2UpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFxuIFxcdGludGYgPSByZXQ7XFxuIFxcbi1cXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0aWYgKGJzcF9wcml2LVxcdTAwM2VnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8XFxuIFxcdCAgICBic3BfcHJpdi1cXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzaykge1xcbiBcXHRcXHQvKiBJZiBkZWZpbmVkLCBlbmNvZGUgdGhlIHBoeV9pbnRmX3NlbCB2YWx1ZSAqL1xcbkBAIC0xMzk5LDEwICsxNDY0LDggQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdFxcdFxcdCAgICAgIGJzcF9wcml2LVxcdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKTtcXG4gXFxuIFxcdFxcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spIHtcXG5AQCAtMTQxMCwxMyArMTQ3MywxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0XFx0XFx0XFx0ICAgICBic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xcbiBcXG4gXFx0XFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qcm1paSBvciByZ21paSovXFxuK3NldF9tb2RlOlxcbitcXHQvKiBybWlpLCByZ21paSwgc2dtaWkgKi9cXG4gXFx0c3dpdGNoIChic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKSB7XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbiBcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJpbml0IGZvciBSR01JSVxcXFxuXFxcIik7XFxuQEAgLTE0NDcsMTUgKzE1MDksMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGlmIChic3BfcHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfdG9fcm1paSlcXG4gXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdFxcdGRldl9pbmZvKGRldiwgXFxcImluaXQgZm9yIFNHTUlJXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZXNldF90b19zZ21paSlcXG4rXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3NnbWlpKGJzcF9wcml2KTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiTk8gaW50ZXJmYWNlIGRlZmluZWQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcbiBcXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XFxuIFxcbkBAIC0xNDYzLDYgKzE1MzAsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitjbGtfZGlzYWJsZTpcXG4rXFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXFxuQEAgLTE0ODYsNiArMTU1Nyw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsXFxuIFxcbiBcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3JtaWkpXFxuIFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3NnbWlpKVxcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcXG5AQCAtMTYwMiw2ICsxNjc2LDE3IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwbGF0X2RhdC1cXHUwMDNlc3VzcGVuZCA9IHJrX2dtYWNfc3VzcGVuZDtcXG4gXFx0cGxhdF9kYXQtXFx1MDAzZXJlc3VtZSA9IHJrX2dtYWNfcmVzdW1lO1xcbiBcXG4rXFx0aWYgKHBsYXRfZGF0LVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRcXHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xcbitcXG4rXFx0XFx0LyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi9cXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VwY3NfZXhpdCA9IHJrX3Bjc19leGl0O1xcbitcXHRcXHRwbGF0X2RhdC1cXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XFxuK1xcdH1cXG4rXFxuIFxcdHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xcbiBcXHRpZiAoSVNfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuQEAgLTM1LDggKzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRtaWljX2Rlc3Ryb3kocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1paWNfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpO1xcbitcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbkBAIC01MzksOCArNTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuaW5kZXggYWZlOThmZjViZGNiMC4uZDJmNzdmMGMyMjNhNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xcbkBAIC00MjYsMzYgKzQyNiwxNSBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcXG4tXFx0c3RydWN0IGR3X3hwY3MgKnhwY3MgPSBOVUxMO1xcbi1cXHRpbnQgYWRkciwgcmV0O1xcbi1cXG4tXFx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKTtcXG4tXFxuLVxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdCkge1xcbi1cXHRcXHRyZXQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdChwcml2KTtcXG4tXFx0fSBlbHNlIGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcXFwicGNzLWhhbmRsZVxcXCIpKSB7XFxuLVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcXG4tXFx0XFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcXG4tXFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrKSB7XFxuLVxcdFxcdGFkZHIgPSBmZnMocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlcGNzX21hc2spIC0gMTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cXHUwMDNlbWlpLCBhZGRyKTtcXG4tXFx0XFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xcbi1cXHR9IGVsc2Uge1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4gXFxuK1xcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19pbml0KHByaXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVxcdTAwM2VkZXZpY2UsIHJldCwgXFxcIk5vIHhQQ1MgZm91bmRcXFxcblxcXCIpO1xcbiBcXG4tXFx0aWYgKHhwY3MpXFxuLVxcdFxcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcXG4tXFxuLVxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0geHBjcztcXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00NjMsMTQgKzQ0MiwxMCBAQCB2b2lkIHN0bW1hY19wY3NfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbi1cXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGNzX2V4aXQpXFxuLVxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19leGl0KHByaXYpO1xcbi1cXG4tXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcylcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfZXhpdClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0eHBjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKTtcXG4tXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSBOVUxMO1xcbitcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfZXhpdChwcml2KTtcXG4gfVxcbiBcXG4gc3RydWN0IHN0bW1hY19jbGtfcmF0ZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXG5pbmRleCBlNDE3ZmQ2NmY2NjBhLi44OGJjNDA3OTFlNjlmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXG5AQCAtMTIsNiArMTIsMjkgQEAgY29uZmlnIFBDU19YUENTXFxuIFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIFN5bm9wc3lzXFxuIFxcdCAgRGVzaWduV2FyZSBYUENTIGNvbnRyb2xsZXJzLlxcbiBcXG4raWYgUENTX1hQQ1NcXG4rXFxuK2NvbmZpZyBQQ1NfWFBDU19QTEFURk9STVxcbitcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFxcXCJcXG4rXFx0ZGVmYXVsdCBQQ1NfWFBDU1xcbitcXHRoZWxwXFxuK1xcdCAgR2VuZXJpYyBEV1hQQ1MgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxcbitcXHQgIHBsYXRmb3JtIHNwZWNpZmljIGNvZGUgdG8gZnVuY3Rpb24gb3IgaXMgdXNpbmcgcGxhdGZvcm1cXG4rXFx0ICBkYXRhIGZvciBzZXR1cC5cXG4rXFxuK1xcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cXG4rXFxuK2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxcbitcXHR0cmlzdGF0ZSBcXFwiUm9ja2NoaXAgWFBDUyBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuK1xcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxcbitcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcXG4rXFx0aGVscFxcbitcXHQgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLlxcbitcXG4rXFx0ICBJZiB5b3UgaGF2ZSBhIFJvY2tjaGlwIFNvQyB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuK1xcbitlbmRpZiAjIFBDU19YUENTXFxuK1xcbiBjb25maWcgUENTX0xZTlhcXG4gXFx0dHJpc3RhdGVcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcXG5pbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxcbkBAIC0xLDEwICsxLDExIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnNcXG4gXFxuLXBjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVxcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFxcXFxcXG4tXFx0XFx0XFx0XFx0ICAgcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xcbitwY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLW54cC5vIHBjcy14cGNzLXd4Lm9cXG4gXFxuIG9iai0kKENPTkZJR19QQ1NfWFBDUylcXHRcXHQrPSBwY3NfeHBjcy5vXFxuK29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgKz0gcGNzLXhwY3MtcGxhdC5vXFxuK29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgKz0gcGNzLXhwY3Mtcmsub1xcbiBvYmotJChDT05GSUdfUENTX0xZTlgpXFx0XFx0Kz0gcGNzLWx5bngub1xcbiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSlcXHQrPSBwY3MtbXRrLWx5bnhpLm9cXG4gb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXFx0Kz0gcGNzLXJ6bjEtbWlpYy5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjY4YmNhYTFhNWNiYmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcXG5AQCAtMCwwICsxLDU0MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcXG4rICpcXG4rICogQmFzZWQgb24gdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBwbGF0Zm9ybSBkcml2ZXIuXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pblxcbisgKlxcbisgKiBBZGFwdGVkIGZvciBSb2NrY2hpcCBTb0NzLCB3aXRoIHJlZmVyZW5jZSB0byB0aGUgUm9ja2NoaXAgT0VNIGRyaXZlci5cXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnRcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRvbWljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9kb21haW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInBjcy14cGNzLmhcXFwiXFxuK1xcbitzdHJ1Y3QgZHdfeHBjc19yayB7XFxuK1xcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdHZvaWQgX19pb21lbSAqcmVnX2Jhc2U7XFxuK1xcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XFxuK1xcdHN0cnVjdCBjbGsgKmNzcl9jbGs7XFxuK1xcdHN0cnVjdCBjbGsgKmVlZV9jbGs7XFxuK307XFxuK1xcbitzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcXG4re1xcbitcXHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0cHRyZGlmZl90IGNzcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xcbitcXG4rXFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkbChweHBjcy1cXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFxcdTAwM2NcXHUwMDNjIDIpKSBcXHUwMDI2IDB4ZmZmZjtcXG4rXFxuK1xcdHBtX3J1bnRpbWVfcHV0KFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3dyaXRlX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0cHRyZGlmZl90IGNzcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xcbitcXG4rXFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR3cml0ZWwodmFsLCBweHBjcy1cXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFxcdTAwM2NcXHUwMDNjIDIpKTtcXG4rXFxuK1xcdHBtX3J1bnRpbWVfcHV0KFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTFcXHQyXFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcXHQzXFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTNcXHQ0XFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX1BNQVBNRFxcdDZcXG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXFx0N1xcbitcXG4rc3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXFxuK3tcXG4rXFx0cmV0dXJuICEoYWRkciBcXHUwMDNjIDAgfHwgYWRkciBcXHUwMDNlIDMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcXG4re1xcbitcXHRzd2l0Y2ggKGRldikge1xcbitcXHRjYXNlIE1ESU9fTU1EX1BNQVBNRDpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9QTUFQTUQ7XFxuK1xcdGNhc2UgTURJT19NTURfVkVORDI6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOWElPO1xcbitcXHR9XFxuK1xcbitcXHQvKiByZWFkIHJlbWFwcGluZyB0byBNSUkgaXMgcGVyZm9ybWVkIGJ5IEhXICovXFxuK1xcdHN3aXRjaCAoYWRkcikge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7XFxuK1xcdGNhc2UgMzpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3dpdGNoIChkZXYpIHtcXG4rXFx0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xcbitcXHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFx0fVxcbitcXG4rXFx0LyogV3JpdGFibGUgb25seSBvbiBNSUkgKi9cXG4rXFx0c3dpdGNoIChyZWcpIHtcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fSU5UUl9TVFM6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0RJR19DVFJMMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGFkZHIpIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xcbitcXHRjYXNlIDM6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGRldjtcXG4rXFxuK1xcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgZGV2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTtcXG4rXFx0aWYgKGRldiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkd194cGNzX3JrICp4cGNzX3JrX2NyZWF0ZV9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXG4rXFx0cHhwY3MgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXB4cGNzKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4rXFxuK1xcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBweHBjcyk7XFxuK1xcbitcXHRyZXR1cm4gcHhwY3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cHhwY3MtXFx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcXFwic2VyZGVzXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBTZXJEZXMgUEhZXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHBoeV9wb3dlcl9vZmYocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRwaHlfZXhpdChweHBjcy1cXHUwMDNlc2VyZGVzX3BoeSk7XFxuK1xcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xcbitcXHQgKiBkeW5hbWljYWxseSB0dXJuIHRoZSBDU1IgY2xvY2sgb24vb2ZmIHVzaW5nIFBNIHdoaWxlIGtlZXBpbmcgdGhlIFBDU1xcbitcXHQgKiBwb3dlcmVkIG9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCB0cnVlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGh5X2luaXQocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gcG1fZG9tYWluO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIHNlcmRlc19waHk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZiwgcHhwY3MpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3NlcmRlc19waHk6XFxuK1xcdHBoeV9leGl0KHB4cGNzLVxcdTAwM2VzZXJkZXNfcGh5KTtcXG4rcG1fZG9tYWluOlxcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtXFx1MDAzZXBkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbitcXG4rXFx0cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTtcXG4rXFx0aWYgKCFyZXMpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJObyByZWctc3BhY2UgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlc291cmNlX3NpemUocmVzKSBcXHUwMDNjIFNaXzJNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCByZWctc3BhY2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSkpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXFx1MDAzZWVlZV9jbGspO1xcbitcXG4rXFx0cG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2NsayhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlY3NyX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFxcXCJjc3JcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihweHBjcy1cXHUwMDNlY3NyX2NsaykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cXHUwMDNlY3NyX2NsayksXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIGdldCBDU1IgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cHhwY3MtXFx1MDAzZWVlZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBcXFwiZWVlXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MtXFx1MDAzZWVlZV9jbGspKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXFx1MDAzZWVlZV9jbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byBnZXQgRUVFIGNsb2NrXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cXHUwMDNlZWVlX2Nsayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gZW5hYmxlIEVFRSBjbG9ja1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xcbitcXHRwbV9ydW50aW1lX2VuYWJsZShkZXYpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19leGl0X2NsaywgcHhwY3MpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIEVFRSBjbG9jazogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9idXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdGF0aWMgYXRvbWljX3QgaWQgPSBBVE9NSUNfSU5JVCgtMSk7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIDApO1xcbitcXHRpZiAoIWJ1cylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRidXMtXFx1MDAzZW5hbWUgPSBcXFwiUm9ja2NoaXAgRFcgWFBDUyBNQ0kvQVBCM1xcXCI7XFxuK1xcdGJ1cy1cXHUwMDNlcmVhZCA9IHhwY3NfcmtfcmVhZF9jMjI7XFxuK1xcdGJ1cy1cXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcXG4rXFx0YnVzLVxcdTAwM2VyZWFkX2M0NSA9IHhwY3NfcmtfcmVhZF9jNDU7XFxuK1xcdGJ1cy1cXHUwMDNld3JpdGVfYzQ1ID0geHBjc19ya193cml0ZV9jNDU7XFxuK1xcdGJ1cy1cXHUwMDNlcGh5X21hc2sgPSB+MDtcXG4rXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuK1xcdGJ1cy1cXHUwMDNlcHJpdiA9IHB4cGNzO1xcbitcXG4rXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxcbitcXHRcXHQgXFxcInJvY2tjaGlwX2R3eHBjcy0leFxcXCIsIGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZpZCkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTURJTy1idXMgaGVyZSBzZXJ2ZXMgYXMganVzdCBhIGJhY2stZW5kIGVuZ2luZSBhYnN0cmFjdGluZyBvdXRcXG4rXFx0ICogdGhlIE1ESU8gYW5kIE1DSS9BUEIzIElPIGludGVyZmFjZXMgdXRpbGl6ZWQgZm9yIHRoZSBSb2NrY2hpcCBEV1hQQ1MgQ1NSc1xcbitcXHQgKiBhY2Nlc3MuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2VidXMgPSBidXM7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgWFBDUyBtYXkgYmUgYXR0YWNoZWQgdG8gYSBwb3dlciBkb21haW4gKGUuZy4gUERfUElQRSkuIFRoZSBkb21haW5cXG4rXFx0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXFxuK1xcdCAqIHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoU0Vycm9yKS5cXG4rXFx0ICpcXG4rXFx0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxcbitcXHQgKiB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzb2Z0IHJlc2V0LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24ocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geHBjc19ya19pbml0X3JlcyhweHBjcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHhwY3NfcmtfaW5pdF9idXMocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhwY3Nfcmtfb2ZfaWRzW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfSxcXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xcbitcXG4rc3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4re1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ucDtcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcztcXG4rXFx0dTMyIHBvcnQ7XFxuK1xcbitcXHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFxuK1xcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXFxcInJlZ1xcXCIsIFxcdTAwMjZwb3J0KSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cXG4rXFx0cGNzX25wID0gb2ZfZ2V0X3BhcmVudChucCk7XFxuK1xcdGlmICghcGNzX25wKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFxuK1xcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwY3NfbnApKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHBjc19ucCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW9mX21hdGNoX25vZGUoeHBjc19ya19vZl9pZHMsIHBjc19ucCkpIHtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcdH1cXG4rXFxuK1xcdHBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBjc19ucCk7XFxuK1xcdG9mX25vZGVfcHV0KHBjc19ucCk7XFxuK1xcdGlmICghcGRldilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XFxuK1xcbitcXHRkZXZpY2VfbG9jayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cHhwY3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0aWYgKCFweHBjcyB8fCAhcHhwY3MtXFx1MDAzZWJ1cykge1xcbitcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcXG4rXFx0fVxcbitcXG4rXFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG4rXFx0ZGV2aWNlX3VubG9jayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUih4cGNzKSkge1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4geHBjcztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdHhwY3NfZGVzdHJveSh4cGNzKTtcXG4rXFx0XFx0cHV0X2RldmljZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuK1xcdHJldHVybiB4cGNzO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHhwY3NfcmtfY3JlYXRlKTtcXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXG4rXFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVxcdTAwM2Vjc3JfY2xrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXG4rXFx0cmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cXHUwMDNlY3NyX2Nsayk7XFxuK31cXG4rXFxuK3N0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHhwY3NfcmtfcG1fb3BzLFxcbitcXHRcXHRcXHQgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCxcXG4rXFx0XFx0XFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3Jlc3VtZSxcXG4rXFx0XFx0XFx0ICAgTlVMTCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4cGNzX3JrX2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0geHBjc19ya19wcm9iZSxcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwicmtfeHBjcy1kd3hwY3NcXFwiLFxcbitcXHRcXHQucG0gPSBwbV9wdHIoXFx1MDAyNnhwY3NfcmtfcG1fb3BzKSxcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0geHBjc19ya19vZl9pZHMsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiQ29pYSBQcmFudCBcXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXFxuaW5kZXggMDMzN2UyYmNjMDEyNS4uNTBiOWNkZjk0ZmRhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXFxuQEAgLTgxNiw5ICs4MTYsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbitcXHQvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqL1xcbitcXHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGlmIChuZWdfbW9kZSA9PSBQSFlMSU5LX1BDU19ORUdfSU5CQU5EX0VOQUJMRUQpXFxuIFxcdFxcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLFxcbi1cXHRcXHRcXHRcXHQgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdFxcdFxcdFxcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xMDkzLDEwICsxMDk4LDE1IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqL1xcbi1cXHRpZiAoc3RhdGUtXFx1MDAzZWFuX2NvbXBsZXRlKVxcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWFuX2NvbXBsZXRlKSB7XFxuK1xcdFxcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cXG4gXFx0XFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcXG4gXFxuK1xcdFxcdC8qIEluaXRpYXRlIHRoZSBuZXh0IHJvdW5kIG9mIEFOICovXFxuK1xcdFxcdHhwY3NfbW9kaWZ5KHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUiwgQk1DUl9BTlJFU1RBUlQsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuYyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xcbisrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuQEAgLTE4Niw2ICsxODYsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcge1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTtcXG4gXFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDFfc2VsO1xcbitcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzFfcG9ydF9lbjtcXG4gfTtcXG5AQCAtMjEyLDYgKzIxMyw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYge1xcbiBcXHRib29sIGVuYWJsZV9zc2M7XFxuIFxcdGJvb2wgZXh0X3JlZmNsaztcXG4gXFx0c3RydWN0IGNsayAqcmVmY2xrO1xcbitcXHR1MzIgc2dtaWlfbWFjX3NlbDtcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxcbkBAIC0zNzUsNiArMzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcXG4gXFxuIFxcdHByaXYtXFx1MDAzZWV4dF9yZWZjbGsgPSBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsIFxcXCJyb2NrY2hpcCxleHQtcmVmY2xrXFxcIik7XFxuIFxcbitcXHRwcml2LVxcdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcXG4rXFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXFxcInJvY2tjaGlwLHNnbWlpLW1hYy1zZWxcXFwiLCBcXHUwMDI2cHJpdi1cXHUwMDNlc2dtaWlfbWFjX3NlbCk7XFxuK1xcbiBcXHRwcml2LVxcdTAwM2VwaHlfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBcXFwicGh5XFxcIik7XFxuIFxcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cXG4gXFx0aWYgKFBUUl9FUlIocHJpdi1cXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcXG5AQCAtODczLDYgKzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcXG4rXFx0XFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVxcdTAwM2VwaXBlX2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9zZ21paV9tYWNfc2VsLFxcbitcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VzZ21paV9tYWNfc2VsIFxcdTAwM2UgMCk7XFxuIFxcdFxcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cXHUwMDNlcGlwZV9ncmYsIFxcdTAwMjZjZmctXFx1MDAzZXBpcGVfeHBjc19waHlfcmVhZHksIHRydWUpO1xcbiBcXHRcXHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXFx1MDAzZXBoeV9ncmYsIFxcdTAwMjZjZmctXFx1MDAzZXBpcGVfcGh5bW9kZV9zZWwsIHRydWUpO1xcbiBcXHRcXHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXFx1MDAzZXBoeV9ncmYsIFxcdTAwMjZjZmctXFx1MDAzZXBpcGVfc2VsX3FzZ21paSwgdHJ1ZSk7XFxuQEAgLTk4NCw2ICs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7XFxuIFxcdC5jb24zX2Zvcl9zYXRhXFx0XFx0PSB7IDB4MDAwYywgMTUsIDAsIDB4MDAsIDB4NDQwNyB9LFxcbiBcXHQvKiBwaXBlLWdyZiAqL1xcbiBcXHQucGlwZV9jb24wX2Zvcl9zYXRhXFx0PSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LFxcbitcXHQucGlwZV9zZ21paV9tYWNfc2VsXFx0PSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LFxcbiBcXHQucGlwZV94cGNzX3BoeV9yZWFkeVxcdD0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSxcXG4gXFx0LnUzb3RnMF9wb3J0X2VuXFx0XFx0PSB7IDB4MDEwNCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXFxuIFxcdC51M290ZzFfcG9ydF9lblxcdFxcdD0geyAweDAxNDQsIDE1LCAwLCAweDAxODEsIDB4MTEwMCB9LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjg3MjNkNWJkNzVjY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFxuQEAgLTAsMCArMSwxMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxcbisjZGVmaW5lIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy5oXFx1MDAzZVxcbitcXG4rc3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7XFxuK1xcbisjZW5kaWYgLyogX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjAxLjQwNjE4NTEyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQ4MTg5OTkyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBoeXNpY2FsIENvZGluZyBTdWJsYXllciAoWFBDUykgb24gUm9ja2NoaXAgUkszNTY4IFNvQ3MsIGluY2x1ZGluZyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgKHBjcy14cGNzLXJrKSwgY29tYnBoeSB1cGRhdGVzLCBkZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgRFRTIG5vZGVzLCBhbmQgcmVsYXRlZCBzdG1tYWMvcGNzLXhwY3MgcGx1bWJpbmcgYWNyb3NzIGR3bWFjLXJrLCBkd21hYy1pbnRlbCwgZHdtYWMtcmVuZXNhcy1nYmV0aCwgZHdtYWMtcnpuMSwgYW5kIGR3bWFjLXNvY2ZwZ2EuIEFsbCBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gZHJpdmVycyBmb3IgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgYW5kIHZlbmRvci1zcGVjaWZpYyBNQUNzL1BIWXMgKFJvY2tjaGlwIFJLMzU2OCwgSW50ZWwgU29DIE1BQ3MsIFJlbmVzYXMsIFNvQyBGUEdBKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUgLyBHQ0Ugb24gYW1kNjQpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTAwN2M3MGU3MTQzNjI4ZGU5YzVmZDhjNjMzMmEwODc0ZmQ4MTBhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTk6NTU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDg1MmQwYmNiNjZhMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWxcbkBAIC0wLDAgKzEsMTEwIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1NcbitcbittYWludGFpbmVyczpcbisgIC0gQ29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246IHxcbisgIFJvY2tjaGlwIFJLMzU2OCBTb0MgaW50ZWdyYXRlcyBhIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWxcbisgIENvZGluZyBTdWJsYXllciAoWFBDUykuXG4rICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKVxuKyAgYW5kIHRoZSBQaHlzaWNhbCBNZWRpdW0gQXR0YWNobWVudCAoUE1BKSBzdWJsYXllciB0aHJvdWdoIGEgTWVkaWFcbisgIEluZGVwZW5kZW50IEludGVyZmFjZSAoR01JSSkuXG4rXG4rICBUaGUgWFBDUyBpcyBhY2Nlc3NlZCBvdmVyIHRoZSBBUEIzIGJ1cyBhbmQgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gYVxuKyAgTmFuZW5nIENvbWJvIFNlckRlcyBQSFkuXG4rICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLlxuK1xuKyAgVGhlIGJsb2NrIGNvbnRhaW5zIGZvdXIgTUlJIHBvcnRzIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZFxuKyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGVcbisgIHByb3BlcnR5IGluIHRoZSBNQUMgZGV2aWNlIHRyZWUgbm9kZS5cbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IHJvY2tjaGlwLHJrMzU2OC14cGNzXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBcIiNhZGRyZXNzLWNlbGxzXCI6XG4rICAgIGNvbnN0OiAxXG4rXG4rICBcIiNzaXplLWNlbGxzXCI6XG4rICAgIGNvbnN0OiAwXG4rXG4rICBjbG9ja3M6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2Vzc1xuKyAgICAgIC0gZGVzY3JpcHRpb246IEVFRSBjbG9jayAoY2xrX2VlZV9pKSwgcmVxdWlyZWQgZm9yIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQgb3BlcmF0aW9uXG4rXG4rICBjbG9jay1uYW1lczpcbisgICAgaXRlbXM6XG4rICAgICAgLSBjb25zdDogY3NyXG4rICAgICAgLSBjb25zdDogZWVlXG4rXG4rICBwaHlzOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcGh5LW5hbWVzOlxuKyAgICBjb25zdDogc2VyZGVzXG4rXG4rICBwb3dlci1kb21haW5zOlxuKyAgICBtYXhJdGVtczogMVxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXCJecGNzLW1paUBbMC0zXSRcIjpcbisgICAgdHlwZTogb2JqZWN0XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhblxuKyAgICAgIEV0aGVybmV0IE1BQyBjb250cm9sbGVyIHZpYSB0aGUgcGNzLWhhbmRsZSBwcm9wZXJ0eSBpbiB0aGUgTUFDJ3NcbisgICAgICBkZXZpY2UgdHJlZSBub2RlLlxuK1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIHJlZzpcbisgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuXG4rICAgICAgICBlbnVtOiBbMCwgMSwgMiwgM11cbitcbisgICAgcmVxdWlyZWQ6XG4rICAgICAgLSByZWdcbitcbisgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcmVnXG4rICAtIFwiI2FkZHJlc3MtY2VsbHNcIlxuKyAgLSBcIiNzaXplLWNlbGxzXCJcbisgIC0gY2xvY2tzXG4rICAtIGNsb2NrLW5hbWVzXG4rICAtIHBoeXNcbisgIC0gcGh5LW5hbWVzXG4rICAtIHBvd2VyLWRvbWFpbnNcbitcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yazM1NjgtY3J1LmhcdTAwM2VcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcG93ZXIvcmszNTY4LXBvd2VyLmhcdTAwM2VcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcGh5L3BoeS5oXHUwMDNlXG4rXG4rICAgIHBjc0BmZGEwMDAwMCB7XG4rICAgICAgY29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIjtcbisgICAgICByZWcgPSBcdTAwM2MweGZkYTAwMDAwIDB4MjAwMDAwXHUwMDNlO1xuKyAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbisgICAgICBjbG9jay1uYW1lcyA9IFwiY3NyXCIsIFwiZWVlXCI7XG4rICAgICAgcGh5cyA9IFx1MDAzY1x1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXHUwMDNlO1xuKyAgICAgIHBoeS1uYW1lcyA9IFwic2VyZGVzXCI7XG4rICAgICAgcG93ZXItZG9tYWlucyA9IFx1MDAzY1x1MDAyNnBvd2VyIFJLMzU2OF9QRF9QSVBFXHUwMDNlO1xuK1xuKyAgICAgIHBjcy1taWlAMCB7XG4rICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG5AQCAtODAsNiArODAsMTUgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuXG4gXG4rICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcbisgICAgZW51bTogWzAsIDFdXG4rICAgIGRlZmF1bHQ6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgU2VsZWN0IGdtYWMwIG9yIGdtYWMxIHRvIGJlIHVzZWQgYXMgU0dNSUkgY29udHJvbGxlci5cbisgICAgICBUaGUgaGFyZHdhcmUgcmVzZXQgdmFsdWUgaXMgR01BQzEgKDEpLiBTZXQgdGhpcyB0byAwIHRvIHJvdXRlXG4rICAgICAgU0dNSUkgdG8gR01BQzAuXG4rXG4gICBcIiNwaHktY2VsbHNcIjpcbiAgICAgY29uc3Q6IDFcbiBcbkBAIC0xMDUsNiArMTE0LDEwIEBAIGFsbE9mOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuICAgICAgICAgcmVzZXQtbmFtZXM6XG4gICAgICAgICAgIG1heEl0ZW1zOiAxXG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiB0cnVlXG4rICAgIGVsc2U6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IGZhbHNlXG4gICAtIGlmOlxuICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICBjb21wYXRpYmxlOlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGZjMzIwYjM3MzY1NmYuLmRkYTRkMjExYjdkYjQgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMzczOCw2ICsyMzczOCwxNSBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sXG4gRjpcdHNvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9zYWkuKlxuIFxuK1JPQ0tDSElQIFhQQ1MgRFJJVkVSXG4rTTpcdENvaWEgUHJhbnQgXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rTDpcdGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xuK0Y6XHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG4rXG4gUk9DS0VSIERSSVZFUlxuIE06XHRKaXJpIFBpcmtvIFx1MDAzY2ppcmlAcmVzbnVsbGkudXNcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbkBAIC0zLDYgKzMsNyBAQFxuIC9kdHMtdjEvO1xuIFxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmhcdTAwM2VcbiAjaW5jbHVkZSBcInJrMzU2OC5kdHNpXCJcbkBAIC0yNDIsNiArMjQzLDcgQEAgXHUwMDI2Y29tYnBoeTEge1xuIFxuIFx1MDAyNmNvbWJwaHkyIHtcbiBcdHN0YXR1cyA9IFwib2theVwiO1xuK1x0cm9ja2NoaXAsc2dtaWktbWFjLXNlbCA9IFx1MDAzYzBcdTAwM2U7XG4gfTtcbiBcbiBcdTAwMjZjcHUwIHtcbkBAIC0yNjAsOSArMjYyLDE4IEBAIFx1MDAyNmNwdTMge1xuIFx0Y3B1LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZkZF9jcHVcdTAwM2U7XG4gfTtcbiBcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXG4rLyogTW90b3Jjb21tIFlUODUyMVNDIExBTiBwb3J0ICovXG4gXHUwMDI2Z21hYzAge1xuLVx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0YXNzaWduZWQtY2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFNDTEtfR01BQzBfUlhfVFhcdTAwM2U7XG4rXHRhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gXHUwMDNjXHUwMDI2eHBjc19nbWFjMF9jbGtcdTAwM2U7XG4rXHRwY3MtaGFuZGxlID0gXHUwMDNjXHUwMDI2eHBjc19taWkwXHUwMDNlO1xuK1x0bWFuYWdlZCA9IFwiaW4tYmFuZC1zdGF0dXNcIjtcbitcdHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZzZ21paV9waHlcdTAwM2U7XG4rXHRwaHktbW9kZSA9IFwic2dtaWlcIjtcbitcdHBoeS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2Y2NfM3YzXHUwMDNlO1xuK1x0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuK1x0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Z21hYzBfbWlpbVx1MDAzZTtcbitcdHN0YXR1cyA9IFwib2theVwiO1xuIH07XG4gXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXG5AQCAtMzQxLDYgKzM1MiwzNiBAQCBcdTAwMjZpMnMwXzhjaCB7XG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbiB9O1xuIFxuK1x1MDAyNm1kaW8wIHtcbitcdHNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuK1x0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuK1x0XHRyZWcgPSBcdTAwM2MweDNcdTAwM2U7XG4rXHRcdG1heC1zcGVlZCA9IFx1MDAzYzEwMDBcdTAwM2U7XG4rXHRcdHJlc2V0LWFzc2VydC11cyA9IFx1MDAzYzIwMDAwXHUwMDNlO1xuK1x0XHRyZXNldC1kZWFzc2VydC11cyA9IFx1MDAzYzEwMDAwMFx1MDAzZTtcbitcdFx0cmVzZXQtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMyBSS19QQzYgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuK1xuK1x0XHRsZWRzIHtcbitcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuK1x0XHRcdGxlZEAxIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1xuK1x0XHRcdGxlZEAyIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1x0XHR9O1xuK1x0fTtcbit9O1xuK1xuIFx1MDAyNm1kaW8xIHtcbiBcdHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4gXHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEMwIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiBcdFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuIFx0XHR0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzE1MDBcdTAwM2U7XG4rXG4rXHRcdGxlZHMge1xuK1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHRcdFx0bGVkQDEge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXG4rXHRcdFx0bGVkQDIge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXHRcdH07XG4gXHR9O1xuIH07XG4gXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcdTAwMjZ4aW4zMmsge1xuIFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuIFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Y2xrMzJrX291dDFcdTAwM2U7XG4gfTtcbitcbitcdTAwMjZ4cGNzIHtcbitcdHN0YXR1cyA9IFwib2theVwiO1xuK1x0cGh5cyA9IFx1MDAzY1x1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXHUwMDNlO1xuK1x0cGh5LW5hbWVzID0gXCJzZXJkZXNcIjtcbit9O1xuK1xuK1x1MDAyNnhwY3NfbWlpMCB7XG4rXHRzdGF0dXMgPSBcIm9rYXlcIjtcbit9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXG5pbmRleCAzYmM2NTNmMDI3ZjFmLi45ODllMTY0YzBlYjM5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuQEAgLTExMCw2ICsxMTAsNTEgQEAgc2F0YTA6IHNhdGFAZmMwMDAwMDAge1xuIFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4gXHR9O1xuIFxuK1x0eHBjczogcGNzQGZkYTAwMDAwIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIjtcbitcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYTAwMDAwIDB4MCAweDIwMDAwMFx1MDAzZTtcbitcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbitcdFx0Y2xvY2stbmFtZXMgPSBcImNzclwiLCBcImVlZVwiO1xuK1x0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4rXHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcbitcdFx0eHBjc19taWkwOiBwY3MtbWlpQDAge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1xuK1x0XHR4cGNzX21paTE6IHBjcy1taWlAMSB7XG4rXHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHRcdH07XG4rXG4rXHRcdHhwY3NfbWlpMjogcGNzLW1paUAyIHtcbitcdFx0XHRyZWcgPSBcdTAwM2MyXHUwMDNlO1xuK1x0XHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcdFx0fTtcbitcbitcdFx0eHBjc19taWkzOiBwY3MtbWlpQDMge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzNcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1x0fTtcbitcbitcdHhwY3NfZ21hYzBfY2xrOiB4cGNzLWdtYWMwLWNsb2NrIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwiZml4ZWQtY2xvY2tcIjtcbitcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuK1x0XHRjbG9jay1vdXRwdXQtbmFtZXMgPSBcImNsa19nbWFjMF94cGNzX21paVwiO1xuK1x0XHQjY2xvY2stY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1x0fTtcbitcbitcdHhwY3NfZ21hYzFfY2xrOiB4cGNzLWdtYWMxLWNsb2NrIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwiZml4ZWQtY2xvY2tcIjtcbitcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuK1x0XHRjbG9jay1vdXRwdXQtbmFtZXMgPSBcImNsa19nbWFjMV94cGNzX21paVwiO1xuK1x0XHQjY2xvY2stY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1x0fTtcbitcbiBcdHBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7XG4gXHRcdGNvbXBhdGlibGUgPSBcInJvY2tjaGlwLHJrMzU2OC1waXBlLXBoeS1ncmZcIiwgXCJzeXNjb25cIjtcbiBcdFx0cmVnID0gXHUwMDNjMHgwIDB4ZmRjNzAwMDAgMHgwIDB4MTAwMFx1MDAzZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xuaW5kZXggZTNkZDVhZGRhNWFjYS4uNTA4OGFjYzA2OTgyZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbkBAIC0xNzAsNiArMTcwLDcgQEAgY29uZmlnIERXTUFDX1JPQ0tDSElQXG4gXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbiBcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbiBcdHNlbGVjdCBNRkRfU1lTQ09OXG4rXHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcbiBcdGhlbHBcbiBcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li5mZDVmMDFjODk0MWMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuQEAgLTYwMywxMyArNjAzLDQ3IEBAIHN0YXRpYyB2b2lkIGNvbW1vbl9kZWZhdWx0X2RhdGEoc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxuIFx0cGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZW5lZWRzX3Jlc2V0ID0gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZGV2bm9kZSwgKnBjc25vZGU7XG4rXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7XG4rXHRpbnQgYWRkcjtcbitcbitcdGRldm5vZGUgPSBkZXZfZndub2RlKHByaXYtXHUwMDNlZGV2aWNlKTtcbitcbitcdGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcInBjcy1oYW5kbGVcIikpIHtcbitcdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcInBjcy1oYW5kbGVcIiwgMCk7XG4rXHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG4rXHRcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xuK1x0fSBlbHNlIHtcbitcdFx0YWRkciA9IGZmcyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykgLSAxO1xuK1x0XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVx1MDAzZW1paSwgYWRkcik7XG4rXHR9XG4rXG4rXHRpZiAoSVNfRVJSKHhwY3MpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbitcbitcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW11bHRfZmFjdF8xMDBucyk7XG4rXG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuLVx0LyogcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZWhhc194cGNzIGhhcyBiZWVuIHNldCB0cnVlLCBzbyB0aGVyZVxuLVx0ICogc2hvdWxkIGFsd2F5cyBiZSBhbiBYUENTLiBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBhbHdheXNcbi1cdCAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuXG4tXHQgKi9cbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbiBcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4gfVxuIFxuQEAgLTczMyw2ICs3NjcsOCBAQCBzdGF0aWMgaW50IGludGVsX21nYmVfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHQgICAgcGxhdC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHtcbiBcdFx0cGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrID0gQklUX1UzMihJTlRFTF9NR0JFX1hQQ1NfQUREUik7XG4gXHRcdHBsYXQtXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuK1x0XHRwbGF0LVx1MDAzZXBjc19pbml0ID0gaW50ZWxfbWdiZV9wY3NfaW5pdDtcbitcdFx0cGxhdC1cdTAwM2VwY3NfZXhpdCA9IGludGVsX21nYmVfcGNzX2V4aXQ7XG4gXHRcdHBsYXQtXHUwMDNlc2VsZWN0X3BjcyA9IGludGVsX21nYmVfc2VsZWN0X3BjcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xuQEAgLTgxLDggKzgxLDExIEBAIHN0YXRpYyBpbnQgcmVuZXNhc19nbWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcbiBzdGF0aWMgdm9pZCByZW5lc2FzX2dtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4rXHRcdHJldHVybjtcbitcbitcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyZW5lc2FzX2dtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcbmluZGV4IDhkNzA0MmU2ODkyNjEuLmU0N2NhMWJlYzViOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJzdG1tYWNfcGxhdGZvcm0uaFwiXG5AQCAtNDcsNiArNDgsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xuIFx0dm9pZCAoKnNldF90b19yZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0ICAgICBpbnQgdHhfZGVsYXksIGludCByeF9kZWxheSk7XG4gXHR2b2lkICgqc2V0X3RvX3JtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbitcdHZvaWQgKCpzZXRfdG9fc2dtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbiBcdGludCAoKnNldF9zcGVlZCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCk7XG4gXHR2b2lkICgqaW50ZWdyYXRlZF9waHlfcG93ZXJ1cCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xuQEAgLTYzLDYgKzY1LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcbiBcdGJvb2wgY2xvY2tfZ3JmX3JlZ19pbl9waHA7XG4gXHRib29sIHN1cHBvcnRzX3JnbWlpO1xuIFx0Ym9vbCBzdXBwb3J0c19ybWlpO1xuK1x0Ym9vbCBzdXBwb3J0c19zZ21paTtcbiBcdGJvb2wgcGhwX2dyZl9yZXF1aXJlZDtcbiBcdGJvb2wgcmVnc192YWxpZDtcbiBcdHUzMiByZWdzW107XG5AQCAtOTgsNiArMTAxLDcgQEAgc3RydWN0IHJrX3ByaXZfZGF0YSB7XG4gXHRib29sIGludGVncmF0ZWRfcGh5O1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbitcdGJvb2wgc3VwcG9ydHNfc2dtaWk7XG4gXG4gXHRzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrcztcbiBcdGludCBudW1fY2xrcztcbkBAIC04MDksNiArODEzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Mjhfb3BzID0ge1xuICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xXHRcdDB4MDM4Y1xuIFxuIC8qIFJLMzU2OF9HUkZfR01BQzBfQ09OMSBcdTAwMjZcdTAwMjYgUkszNTY4X0dSRl9HTUFDMV9DT04xICovXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUlcdFx0R1JGX0NMUl9CSVQoNylcbisjZGVmaW5lIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJXHRcdEdSRl9CSVQoNylcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTFx0XHRcdEdSRl9CSVQoMylcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTF9DTFJcdFx0R1JGX0NMUl9CSVQoMylcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEVcdFx0R1JGX0JJVCgxKVxuQEAgLTg1MSwxOCArODU3LDMyIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbitcdFx0ICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3NnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuK3tcbitcdHUzMiBjb24xO1xuK1xuK1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4rXHRcdFx0XHQgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTtcbitcbitcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Njhfb3BzID0ge1xuIFx0LmluaXQgPSByazM1NjhfaW5pdCxcbiBcdC5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLFxuK1x0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXG4rXG4gXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXG4gXG4gXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxuIFxuIFx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxuK1x0LnN1cHBvcnRzX3NnbWlpID0gdHJ1ZSxcbiBcbiBcdC5yZWdzX3ZhbGlkID0gdHJ1ZSxcbiBcdC5yZWdzID0ge1xuQEAgLTEyMDgsNiArMTIyOCw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRkZXZfZXJyKGJzcF9wcml2LVx1MDAzZWRldiwgXCJmYWlsIHRvIGRpc2FibGUgcGh5LXN1cHBseVxcblwiKTtcbiB9XG4gXG4rc3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtXHUwMDNlZGV2aWNlLVx1MDAzZW9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ub2RlO1xuK1x0c3RydWN0IGR3X3hwY3MgKnhwY3M7XG4rXG4rXHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFwicGNzLWhhbmRsZVwiLCAwKTtcbitcdGlmICghcGNzX25vZGUpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XG4rXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XG4rXHRpZiAoSVNfRVJSKHhwY3MpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbitcbitcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IHhwY3M7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJrX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0XHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCxcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgKm9wcylcbkBAIC0xMzMwLDYgKzEzODcsNyBAQCBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuIFxuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcmdtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JnbWlpO1xuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcm1paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19ybWlpIHx8ICEhb3BzLVx1MDAzZXNldF90b19ybWlpO1xuK1x0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfc2dtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3NnbWlpO1xuIFxuIFx0aWYgKG9wcy1cdTAwM2Vpbml0KSB7XG4gXHRcdHJldCA9IG9wcy1cdTAwM2Vpbml0KGJzcF9wcml2KTtcbkBAIC0xMzYxLDYgKzE0MTksMTAgQEAgc3RhdGljIGludCBya19nbWFjX2NoZWNrX29wcyhzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0aWYgKCFic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19ybWlpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuK1x0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwidW5zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXCIsIGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSk7XG5AQCAtMTM3OSwxNiArMTQ0MSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4rXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuK1x0XHRnb3RvIHNldF9tb2RlO1xuK1xuIFx0cmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcbiBcdGludGYgPSByZXQ7XG4gXG4tXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdGlmIChic3BfcHJpdi1cdTAwM2VnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8XG4gXHQgICAgYnNwX3ByaXYtXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzaykge1xuIFx0XHQvKiBJZiBkZWZpbmVkLCBlbmNvZGUgdGhlIHBoeV9pbnRmX3NlbCB2YWx1ZSAqL1xuQEAgLTEzOTksMTAgKzE0NjQsOCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgIGJzcF9wcml2LVx1MDAzZWdtYWNfcm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbiBcdGlmIChic3BfcHJpdi1cdTAwM2VjbG9jay5ybWlpX21vZGVfbWFzaykge1xuQEAgLTE0MTAsMTMgKzE0NzMsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdFx0XHQgICAgIGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKTtcbiBcbiBcdFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuLVx0LypybWlpIG9yIHJnbWlpKi9cbitzZXRfbW9kZTpcbitcdC8qIHJtaWksIHJnbWlpLCBzZ21paSAqL1xuIFx0c3dpdGNoIChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuIFx0XHRkZXZfaW5mbyhkZXYsIFwiaW5pdCBmb3IgUkdNSUlcXG5cIik7XG5AQCAtMTQ0NywxNSArMTUwOSwyMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fcm1paSlcbiBcdFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuK1x0XHRkZXZfaW5mbyhkZXYsIFwiaW5pdCBmb3IgU0dNSUlcXG5cIik7XG4rXHRcdGlmIChic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3NnbWlpKVxuK1x0XHRcdGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkoYnNwX3ByaXYpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoZGV2LCBcIk5PIGludGVyZmFjZSBkZWZpbmVkIVxcblwiKTtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbiBcdHJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFxuIFx0cG1fcnVudGltZV9nZXRfc3luYyhkZXYpO1xuIFxuQEAgLTE0NjMsNiArMTUzMCwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rY2xrX2Rpc2FibGU6XG4rXHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXG5AQCAtMTQ4Niw2ICsxNTU3LDkgQEAgc3RhdGljIHZvaWQgcmtfZ2V0X2ludGVyZmFjZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkICpic3BfcHJpdixcbiBcbiBcdGlmIChyay1cdTAwM2VzdXBwb3J0c19ybWlpKVxuIFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksIGludGVyZmFjZXMpO1xuK1xuK1x0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTtcbiB9XG4gXG4gc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcbkBAIC0xNjAyLDYgKzE2NzYsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbGF0X2RhdC1cdTAwM2VzdXNwZW5kID0gcmtfZ21hY19zdXNwZW5kO1xuIFx0cGxhdF9kYXQtXHUwMDNlcmVzdW1lID0gcmtfZ21hY19yZXN1bWU7XG4gXG4rXHRpZiAocGxhdF9kYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbitcdFx0LyogU0dNSUkgY2xvY2sgYWx3YXlzIHJ1bnMgYXQgMTI1IE1IeiAqL1xuK1x0XHRwbGF0X2RhdC1cdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xuK1xuK1x0XHQvKiBTR01JSSByZXF1aXJlcyBhIFBDUyAqL1xuK1x0XHRwbGF0X2RhdC1cdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4rXHRcdHBsYXRfZGF0LVx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XG4rXHRcdHBsYXRfZGF0LVx1MDAzZXBjc19leGl0ID0gcmtfcGNzX2V4aXQ7XG4rXHRcdHBsYXRfZGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzO1xuK1x0fVxuK1xuIFx0cGxhdF9kYXQtXHUwMDNlYnNwX3ByaXYgPSBya19nbWFjX3NldHVwKHBkZXYsIHBsYXRfZGF0LCBkYXRhKTtcbiBcdGlmIChJU19FUlIocGxhdF9kYXQtXHUwMDNlYnNwX3ByaXYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXG5pbmRleCAxMzYzNDk2NWJjMTlhLi4wMWRmNDc3NmVkYjNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbkBAIC0zNSw4ICszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHJ6bjFfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4rXHRcdHJldHVybjtcbitcbitcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuaW5kZXggMWQ3ZjBhNTdkMjg4OS4uNmQ0YmMxZmU4Zjc1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5AQCAtNTM5LDggKzUzOSwxMSBAQCBzdGF0aWMgaW50IHNvY2ZwZ2FfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbmluZGV4IGFmZTk4ZmY1YmRjYjAuLmQyZjc3ZjBjMjIzYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXG5AQCAtNDI2LDM2ICs0MjYsMTUgQEAgaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZGV2bm9kZSwgKnBjc25vZGU7XG4tXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7XG4tXHRpbnQgYWRkciwgcmV0O1xuLVxuLVx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpO1xuLVxuLVx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdCkge1xuLVx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQocHJpdik7XG4tXHR9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsIFwicGNzLWhhbmRsZVwiKSkge1xuLVx0XHRwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsIFwicGNzLWhhbmRsZVwiLCAwKTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcbi1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4tXHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcbi1cdH0gZWxzZSBpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSB7XG4tXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuLVx0XHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oeHBjcyk7XG4tXHR9IGVsc2Uge1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbitcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdChwcml2KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2aWNlLCByZXQsIFwiTm8geFBDUyBmb3VuZFxcblwiKTtcbiBcbi1cdGlmICh4cGNzKVxuLVx0XHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuLVxuLVx0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00NjMsMTQgKzQ0MiwxMCBAQCB2b2lkIHN0bW1hY19wY3NfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuLVx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rXHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4gfVxuIFxuIHN0cnVjdCBzdG1tYWNfY2xrX3JhdGUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbmluZGV4IGU0MTdmZDY2ZjY2MGEuLjg4YmM0MDc5MWU2OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbkBAIC0xMiw2ICsxMiwyOSBAQCBjb25maWcgUENTX1hQQ1NcbiBcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIFN5bm9wc3lzXG4gXHQgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy5cbiBcbitpZiBQQ1NfWFBDU1xuK1xuK2NvbmZpZyBQQ1NfWFBDU19QTEFURk9STVxuK1x0dHJpc3RhdGUgXCJHZW5lcmljIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCJcbitcdGRlZmF1bHQgUENTX1hQQ1NcbitcdGhlbHBcbitcdCAgR2VuZXJpYyBEV1hQQ1MgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxuK1x0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXG4rXHQgIGRhdGEgZm9yIHNldHVwLlxuK1xuK1x0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuK1xuK2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuK1x0dHJpc3RhdGUgXCJSb2NrY2hpcCBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwiXG4rXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbitcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbitcdGhlbHBcbitcdCAgU3VwcG9ydCBmb3IgWFBDUyBjb250cm9sbGVyIG9uIFJvY2tjaGlwIFJLMzU2eCBTb0MuXG4rXG4rXHQgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbitcbitlbmRpZiAjIFBDU19YUENTXG4rXG4gY29uZmlnIFBDU19MWU5YXG4gXHR0cmlzdGF0ZVxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuaW5kZXggNGY3OTIwNjE4YjkwMC4uZjlmNmNmMjU3OGQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG5AQCAtMSwxMCArMSwxMSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjIE1ha2VmaWxlIGZvciBMaW51eCBQQ1MgZHJpdmVyc1xuIFxuLXBjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1wbGF0Lm8gXFxcbi1cdFx0XHRcdCAgIHBjcy14cGNzLW54cC5vIHBjcy14cGNzLXd4Lm9cbitwY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuIFxuIG9iai0kKENPTkZJR19QQ1NfWFBDUylcdFx0Kz0gcGNzX3hwY3Mub1xuK29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgKz0gcGNzLXhwY3MtcGxhdC5vXG4rb2JqLSQoQ09ORklHX1BDU19YUENTX1JPQ0tDSElQKSArPSBwY3MteHBjcy1yay5vXG4gb2JqLSQoQ09ORklHX1BDU19MWU5YKVx0XHQrPSBwY3MtbHlueC5vXG4gb2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXHQrPSBwY3MtbXRrLWx5bnhpLm9cbiBvYmotJChDT05GSUdfUENTX1JaTjFfTUlJQylcdCs9IHBjcy1yem4xLW1paWMub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42OGJjYWExYTVjYmJmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xuQEAgLTAsMCArMSw1NDMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXG4rICpcbisgKiBCYXNlZCBvbiB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBYUENTIHBsYXRmb3JtIGRyaXZlci5cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgU2VyZ2UgU2VtaW5cbisgKlxuKyAqIEFkYXB0ZWQgZm9yIFJvY2tjaGlwIFNvQ3MsIHdpdGggcmVmZXJlbmNlIHRvIHRoZSBSb2NrY2hpcCBPRU0gZHJpdmVyLlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2lhIFByYW50XG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9kb21haW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJwY3MteHBjcy5oXCJcbitcbitzdHJ1Y3QgZHdfeHBjc19yayB7XG4rXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cztcbitcdHZvaWQgX19pb21lbSAqcmVnX2Jhc2U7XG4rXHRzdHJ1Y3QgcGh5ICpzZXJkZXNfcGh5O1xuK1x0c3RydWN0IGNsayAqY3NyX2NsaztcbitcdHN0cnVjdCBjbGsgKmVlZV9jbGs7XG4rfTtcbitcbitzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcbit7XG4rXHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0cHRyZGlmZl90IGNzcjtcbitcdGludCByZXQ7XG4rXG4rXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcbitcbitcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlYWRsKHB4cGNzLVx1MDAzZXJlZ19iYXNlICsgKGNzciBcdTAwM2NcdTAwM2MgMikpIFx1MDAyNiAweGZmZmY7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbit7XG4rXHRwdHJkaWZmX3QgY3NyO1xuK1x0aW50IHJldDtcbitcbitcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xuK1xuK1x0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0d3JpdGVsKHZhbCwgcHhwY3MtXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFx1MDAzY1x1MDAzYyAyKSk7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMVx0MlxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcdDNcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzXHQ0XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfUE1BUE1EXHQ2XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXHQ3XG4rXG4rc3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXG4re1xuK1x0cmV0dXJuICEoYWRkciBcdTAwM2MgMCB8fCBhZGRyIFx1MDAzZSAzKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3dpdGNoIChkZXYpIHtcbitcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbitcdGNhc2UgTURJT19NTURfVkVORDI6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcdH1cbitcbitcdC8qIHJlYWQgcmVtYXBwaW5nIHRvIE1JSSBpcyBwZXJmb3JtZWQgYnkgSFcgKi9cbitcdHN3aXRjaCAoYWRkcikge1xuK1x0Y2FzZSAwOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbitcdGNhc2UgMTpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxO1xuK1x0Y2FzZSAyOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7XG4rXHRjYXNlIDM6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3dpdGNoIChkZXYpIHtcbitcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbitcdGNhc2UgTURJT19NTURfVkVORDI6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcdH1cbitcbitcdC8qIFdyaXRhYmxlIG9ubHkgb24gTUlJICovXG4rXHRzd2l0Y2ggKHJlZykge1xuK1x0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcbitcdGNhc2UgRFdfVlJfTUlJX0FOX0lOVFJfU1RTOlxuK1x0Y2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMDpcbitcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XG4rXHRjYXNlIERXX1ZSX01JSV9ESUdfQ1RSTDI6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKGFkZHIpIHtcbitcdGNhc2UgMDpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4rXHRjYXNlIDE6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMTtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xuK1x0Y2FzZSAzOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuK1x0aW50IGRldjtcbitcbitcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDB4ZmZmZjtcbitcbitcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4rXHRpbnQgZGV2O1xuK1xuK1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4rXHRpZiAoZGV2IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMHhmZmZmO1xuK1xuK1x0cmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbitcbitcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4rXHRpZiAoZGV2IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB4cGNzX3JrX3dyaXRlX3JlZyhweHBjcywgZGV2LCByZWcsIHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZHdfeHBjc19yayAqeHBjc19ya19jcmVhdGVfZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbitcbitcdHB4cGNzID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnB4cGNzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXB4cGNzKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHB4cGNzLVx1MDAzZXBkZXYgPSBwZGV2O1xuK1xuK1x0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBweHBjcyk7XG4rXG4rXHRyZXR1cm4gcHhwY3M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1xuK1x0cHhwY3MtXHUwMDNlc2VyZGVzX3BoeSA9IGRldm1fcGh5X2dldChkZXYsIFwic2VyZGVzXCIpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpLFxuK1x0XHRcdFx0XHRcIkZhaWxlZCB0byBnZXQgU2VyRGVzIFBIWVxcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXG4rXHRwaHlfcG93ZXJfb2ZmKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK1x0cGh5X2V4aXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rXG4rXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIFRoZSBwb3dlciBkb21haW4gaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgZW5hYmxlZCwgd2hpY2ggYWxsb3dzIHVzIHRvXG4rXHQgKiBkeW5hbWljYWxseSB0dXJuIHRoZSBDU1IgY2xvY2sgb24vb2ZmIHVzaW5nIFBNIHdoaWxlIGtlZXBpbmcgdGhlIFBDU1xuK1x0ICogcG93ZXJlZCBvbi5cbitcdCAqL1xuK1x0cmV0ID0gZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCB0cnVlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHBvd2VyIG9uIHBvd2VyLWRvbWFpbnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfaW5pdChweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcblwiKTtcbitcdFx0Z290byBwbV9kb21haW47XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBwb3dlciBvbiBTZXJEZXMgUEhZXFxuXCIpO1xuK1x0XHRnb3RvIHNlcmRlc19waHk7XG4rXHR9XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYsIHB4cGNzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitzZXJkZXNfcGh5OlxuK1x0cGh5X2V4aXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rcG1fZG9tYWluOlxuK1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9yZXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuK3tcbitcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBweHBjcy1cdTAwM2VwZGV2O1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbitcbitcdHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XG4rXHRpZiAoIXJlcykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJObyByZWctc3BhY2UgZm91bmRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHJlc291cmNlX3NpemUocmVzKSBcdTAwM2MgU1pfMk0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCByZWctc3BhY2Ugc2l6ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRweHBjcy1cdTAwM2VyZWdfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7XG4rXHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZXJlZ19iYXNlKSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcblwiKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHhwY3MtXHUwMDNlcmVnX2Jhc2UpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHhwY3NfcmtfZXhpdF9jbGsodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXG4rXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlZWVlX2Nsayk7XG4rXG4rXHRwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbitcdGludCByZXQ7XG4rXG4rXHRweHBjcy1cdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCJjc3JcIik7XG4rXHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlY3NyX2NsayksXG4rXHRcdFx0XHRcdCBcIkZhaWxlZCB0byBnZXQgQ1NSIGNsb2NrXFxuXCIpO1xuK1xuK1x0cHhwY3MtXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFwiZWVlXCIpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspLFxuK1x0XHRcdFx0XHQgXCJGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xcblwiKTtcbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbitcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX2V4aXRfY2xrLCBweHBjcyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBFRUUgY2xvY2s6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbitcdHN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCAwKTtcbitcdGlmICghYnVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGJ1cy1cdTAwM2VuYW1lID0gXCJSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzXCI7XG4rXHRidXMtXHUwMDNlcmVhZCA9IHhwY3NfcmtfcmVhZF9jMjI7XG4rXHRidXMtXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcbitcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IHhwY3NfcmtfcmVhZF9jNDU7XG4rXHRidXMtXHUwMDNld3JpdGVfYzQ1ID0geHBjc19ya193cml0ZV9jNDU7XG4rXHRidXMtXHUwMDNlcGh5X21hc2sgPSB+MDtcbitcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlcHJpdiA9IHB4cGNzO1xuK1xuK1x0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsXG4rXHRcdCBcInJvY2tjaGlwX2R3eHBjcy0leFwiLCBhdG9taWNfaW5jX3JldHVybihcdTAwMjZpZCkpO1xuK1xuK1x0LypcbitcdCAqIE1ESU8tYnVzIGhlcmUgc2VydmVzIGFzIGp1c3QgYSBiYWNrLWVuZCBlbmdpbmUgYWJzdHJhY3Rpbmcgb3V0XG4rXHQgKiB0aGUgTURJTyBhbmQgTUNJL0FQQjMgSU8gaW50ZXJmYWNlcyB1dGlsaXplZCBmb3IgdGhlIFJvY2tjaGlwIERXWFBDUyBDU1JzXG4rXHQgKiBhY2Nlc3MuXG4rXHQgKi9cbitcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRweHBjcy1cdTAwM2VidXMgPSBidXM7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuK1x0aW50IHJldDtcbitcbitcdHB4cGNzID0geHBjc19ya19jcmVhdGVfZGF0YShwZGV2KTtcbitcdGlmIChJU19FUlIocHhwY3MpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXG4rXHQgKiBtdXN0IGJlIHBvd2VyZWQgb24gYmVmb3JlIGFueSByZWdpc3RlciBhY2Nlc3MsIG90aGVyd2lzZSB0aGUgU29DIHdpbGxcbitcdCAqIHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoU0Vycm9yKS5cbitcdCAqXG4rXHQgKiBBY2Nlc3NpbmcgdGhlIFhQQ1MgcmVnaXN0ZXJzIGFsc28gcmVxdWlyZXMgYSBUWCBjbG9jayBmcm9tIHRoZSBTZXJEZXMsXG4rXHQgKiB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzb2Z0IHJlc2V0LlxuK1x0ICovXG4rXHRyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfaW5pdChweHBjcyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24ocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3NfcmtfaW5pdF9jbGsocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3NfcmtfaW5pdF9idXMocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIiB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9LFxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xuK1xuK3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4re1xuK1x0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25wO1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuK1x0c3RydWN0IGR3X3hwY3MgKnhwY3M7XG4rXHR1MzIgcG9ydDtcbitcbitcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuK1xuK1x0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcInJlZ1wiLCBcdTAwMjZwb3J0KSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cbitcdHBjc19ucCA9IG9mX2dldF9wYXJlbnQobnApO1xuK1x0aWYgKCFwY3NfbnApXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuK1xuK1x0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBjc19ucCkpIHtcbitcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4rXHR9XG4rXG4rXHRpZiAoIW9mX21hdGNoX25vZGUoeHBjc19ya19vZl9pZHMsIHBjc19ucCkpIHtcbitcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4rXG4rXHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xuK1x0b2Zfbm9kZV9wdXQocGNzX25wKTtcbitcdGlmICghcGRldilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4rXG4rXHRkZXZpY2VfbG9jayhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0aWYgKCFweHBjcyB8fCAhcHhwY3MtXHUwMDNlYnVzKSB7XG4rXHRcdGRldmljZV91bmxvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4rXHR9XG4rXG4rXHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihweHBjcy1cdTAwM2VidXMsIChpbnQpcG9ydCk7XG4rXHRkZXZpY2VfdW5sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChJU19FUlIoeHBjcykpIHtcbitcdFx0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRcdHJldHVybiB4cGNzO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHR4cGNzX2Rlc3Ryb3koeHBjcyk7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0cmV0dXJuIHhwY3M7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHhwY3NfcmtfY3JlYXRlKTtcbitcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcbitcdGNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy1cdTAwM2Vjc3JfY2xrKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0cmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2Vjc3JfY2xrKTtcbit9XG4rXG4rc3RhdGljIERFRklORV9SVU5USU1FX0RFVl9QTV9PUFMoeHBjc19ya19wbV9vcHMsXG4rXHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQsXG4rXHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3Jlc3VtZSxcbitcdFx0XHQgICBOVUxMKTtcbitcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4cGNzX3JrX2RyaXZlciA9IHtcbitcdC5wcm9iZSA9IHhwY3NfcmtfcHJvYmUsXG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmtfeHBjcy1kd3hwY3NcIixcbitcdFx0LnBtID0gcG1fcHRyKFx1MDAyNnhwY3NfcmtfcG1fb3BzKSxcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0geHBjc19ya19vZl9pZHMsXG4rXHR9LFxuK307XG4rbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4cGNzX3JrX2RyaXZlcik7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuaW5kZXggMDMzN2UyYmNjMDEyNS4uNTBiOWNkZjk0ZmRhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuQEAgLTgxNiw5ICs4MTYsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4rXHQvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqL1xuK1x0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRpZiAobmVnX21vZGUgPT0gUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEKVxuIFx0XHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUixcbi1cdFx0XHRcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFKTtcbitcdFx0XHRcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTA5MywxMCArMTA5OCwxNSBAQCBzdGF0aWMgaW50IHhwY3NfZ2V0X3N0YXRlX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHQvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovXG4tXHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpXG4rXHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpIHtcbitcdFx0LyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqL1xuIFx0XHR4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xuIFxuK1x0XHQvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqL1xuK1x0XHR4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuK1x0XHRcdCAgICBCTUNSX0FOUkVTVEFSVCk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG4rKysgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuQEAgLTE4Niw2ICsxODYsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcge1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfeHBjc19waHlfcmVhZHk7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwwX3NlbDtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDFfc2VsO1xuK1x0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfc2dtaWlfbWFjX3NlbDtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzBfcG9ydF9lbjtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzFfcG9ydF9lbjtcbiB9O1xuQEAgLTIxMiw2ICsyMTMsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2IHtcbiBcdGJvb2wgZW5hYmxlX3NzYztcbiBcdGJvb2wgZXh0X3JlZmNsaztcbiBcdHN0cnVjdCBjbGsgKnJlZmNsaztcbitcdHUzMiBzZ21paV9tYWNfc2VsO1xuIH07XG4gXG4gc3RhdGljIHZvaWQgcm9ja2NoaXBfY29tYnBoeV91cGRhdGVsKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYsXG5AQCAtMzc1LDYgKzM3Nyw5IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfY29tYnBoeV9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByb2NrY2hpcF9jb21icGh5XG4gXG4gXHRwcml2LVx1MDAzZWV4dF9yZWZjbGsgPSBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsIFwicm9ja2NoaXAsZXh0LXJlZmNsa1wiKTtcbiBcbitcdHByaXYtXHUwMDNlc2dtaWlfbWFjX3NlbCA9IDE7XG4rXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcInJvY2tjaGlwLHNnbWlpLW1hYy1zZWxcIiwgXHUwMDI2cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsKTtcbitcbiBcdHByaXYtXHUwMDNlcGh5X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgXCJwaHlcIik7XG4gXHQvKiBmYWxsYmFjayB0byBvbGQgYmVoYXZpb3VyICovXG4gXHRpZiAoUFRSX0VSUihwcml2LVx1MDAzZXBoeV9yc3QpID09IC1FTk9FTlQpXG5AQCAtODczLDYgKzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcbitcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBpcGVfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9zZ21paV9tYWNfc2VsLFxuK1x0XHRcdFx0XHRwcml2LVx1MDAzZXNnbWlpX21hY19zZWwgXHUwMDNlIDApO1xuIFx0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGlwZV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3hwY3NfcGh5X3JlYWR5LCB0cnVlKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBoeV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3BoeW1vZGVfc2VsLCB0cnVlKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBoeV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3NlbF9xc2dtaWksIHRydWUpO1xuQEAgLTk4NCw2ICs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7XG4gXHQuY29uM19mb3Jfc2F0YVx0XHQ9IHsgMHgwMDBjLCAxNSwgMCwgMHgwMCwgMHg0NDA3IH0sXG4gXHQvKiBwaXBlLWdyZiAqL1xuIFx0LnBpcGVfY29uMF9mb3Jfc2F0YVx0PSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LFxuK1x0LnBpcGVfc2dtaWlfbWFjX3NlbFx0PSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LFxuIFx0LnBpcGVfeHBjc19waHlfcmVhZHlcdD0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSxcbiBcdC51M290ZzBfcG9ydF9lblx0XHQ9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbiBcdC51M290ZzFfcG9ydF9lblx0XHQ9IHsgMHgwMTQ0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4NzIzZDViZDc1Y2Ncbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbkBAIC0wLDAgKzEsMTEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4rI2RlZmluZSBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFx1MDAzZVxuK1xuK3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xuK1xuKyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjAxLjQwNjE4NzMyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDQ2NzcxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXM6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoIHNlcmllcywgZm9jdXNpbmcgb24gdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHN0ZXAgaXMgdG8gbGF5IG91dCB0aGUgY2hhbmdlcywgcmlnaHQ/IEknbSBzZWVpbmcgYSBidW5jaCBvZiBmaWxlczogZG9jdW1lbnRhdGlvbiBiaW5kaW5ncywgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSAoYWx3YXlzIGltcG9ydGFudCEpLCBzZXZlcmFsIERUUyBmaWxlcyBmb3IgUm9ja2NoaXAgU29DcyAoYHJrMzU2OGApLCBzb21lIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCB1cGRhdGVzIGluIG5ldHdvcmsgZHJpdmVycywgYW5kIHRoZW4gYSBzbGV3IG9mIGRyaXZlciBmaWxlczogUm9ja2NoaXAtc3BlY2lmaWMgb25lcyBmb3IgUENTIGFuZCBQSFkgKGBwY3MteHBjcy1yay5jYCwgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYGR3bWFjLXJrLmNgKSwgcGx1cyBhIHNldCBvZiBgc3RtbWFjYCByZWZhY3RvcmluZyB0b3VjaGVzIGZvciB2YXJpb3VzIGBkd21hY2AgZHJpdmVycyAoYGR3bWFjLWludGVsLmNgLCBgZHdtYWMtcmVuZXNhcy1nYmV0aC5jYCwgYGR3bWFjLXJ6bjEuY2AsIGBkd21hYy1zb2NmcGdhLmNgKSBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuXG5cbkFoYSEgVGhpcyBicmVha3MgZG93biBuaWNlbHkuIFdlJ3ZlIGdvdCBkaXN0aW5jdCBhcmVhcyBvZiBjb25jZXJuOiB0aGUgUm9ja2NoaXAgU29DLXNwZWNpZmljIGNvZGUsIHRhcmdldGluZyBBUk0vQVJNNjQgcGxhdGZvcm1zLCBhbmQgdGhlbiB0aGUgbW9yZSBnZW5lcmljIGBzdG1tYWNgIHVwZGF0ZXMsIHNvbWUgb2Ygd2hpY2ggc2VlbSB0byBpbnZvbHZlIEludGVsIGhhcmR3YXJlIChgZHdtYWMtaW50ZWwuY2ApLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYHN0bW1hY19tZGlvLmNgIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgYHN0bW1hY19wY3Nfc2V0dXAoKWAgYW5kIGBzdG1tYWNfcGNzX2NsZWFuKClgLiBBbmQgb2YgY291cnNlIHRoZSBQQ1MtcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoKWAgYW5kIGB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoKWAgaW4gYHBjcy14cGNzLmNgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGZvciBgYW1kNjRgIGlzIHRoaXM6IGNhbiBJIGV2ZW4gcmVhY2ggYHN0bW1hY2AsIGBkd21hYy1pbnRlbGAsIG9yIHRoZSBgcGNzLXhwY3NgIGNvbXBvbmVudHMgdGhyb3VnaCBzeXprYWxsZXIsIHN0YW5kYXJkIFFFTVUgc2V0dXBzLCBvciB3aWxsIHRoaXMgcmVxdWlyZSB2ZXJ5IHNwZWNpZmljIHBoeXNpY2FsIFBDSSBkZXZpY2VzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8ga25vdyBpZiB0aGVzZSBhcmUgZXZlbiB2aWFibGUgdGFyZ2V0cyBmb3IgZnV6emluZyBvbiBgYW1kNjRgLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gYGR3bWFjLWludGVsLmNgLCB0aGUgYHN0bW1hY2AgY29kZSwgYW5kIGBwY3MteHBjc2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBlbXVsYXRpb24gc3VwcG9ydCBpbiBRRU1VIG9yIGlmIHRoZXNlIGNhbiBiZSByZWFjaGVkIHRocm91Z2ggc29tZSB2aXJ0dWFsIGJ1cyBvciBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuXG5cblRpbWUgdG8gc2VhcmNoISBMZXQncyBnZXQgdGhlIGdyZXBwZXIgb3Igc2VhcmNoIHRvb2xzIGdvaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5jb3ZlciBhYm91dCB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGVzZSBjb21wb25lbnRzIG9uIGFuIGBhbWQ2NGAgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIxNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjA3LjExMDg2ODQ3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ0ODg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9NjQxPXN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTY0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjY1MDpzdGF0aWMgaW50IGludGVsX21nYmVfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02NTEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc5Nj1zdGF0aWMgaW50IGVobF9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODE5OlxcdHJldHVybiBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHBkZXYsIHBsYXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODIwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTU5PXN0YXRpYyBpbnQgdGdsX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5Nzc6XFx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMDM0PXN0YXRpYyBpbnQgYWRsbl9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTY6XFx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDU3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NTY6MDcuMTczMzIxODE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2NTU4NzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqRXhhbWluaW5nIHRoZSBkd21hYy1pbnRlbCBEcml2ZXIqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGR3bWFjLWludGVsLmNgLiBGcm9tIHRoZSBuYW1lIGFsb25lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFdGhlcm5ldCBNQUMgY29udHJvbGxlcnMsIHNwZWNpZmljYWxseSB0aG9zZSBmb3VuZCBpbiBFbGtoYXJ0IExha2UgKEVITCksIFRpZ2VyIExha2UgKFRHTCksIGFuZCBBbGRlciBMYWtlLU4gKEFETE4pIHBsYXRmb3Jtcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBwcmVjaXNlbHkgKndoaWNoKiBkZXZpY2VzIGRvZXMgdGhpcyBkcml2ZXIgaW50ZW5kIHRvIHByb2JlIGFuZCBtYW5hZ2U/IFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgSURzLCBvciBwZXJoYXBzIGV2ZW4gdmVuZG9yIElEcywgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW5kLCBmcmFua2x5LCBmb3IgZW5zdXJpbmcgSSdtIGV2ZW4gbG9va2luZyBhdCB0aGUgcmlnaHQgcGllY2Ugb2YgY29kZSBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRyaXZlciBhY3R1YWxseSBwcm9iZXMgZm9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZXZpY2UgSURzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjA5LjczODkxMTk5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODI0OTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xNDUxPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDUzOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpbnRlbF9ldGhfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTQtXFx0Lm5hbWUgPSBcXFwiaW50ZWwtZXRoLXBjaVxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDYzOm1vZHVsZV9wY2lfZHJpdmVyKGludGVsX2V0aF9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjA5LjgyNzE2ODAzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg2MDQ1OTYyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHRoYXQncyBldmVuICpyZWFjaGFibGUqIHdpdGhpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBHQ0Ugb3IgUUVNVSBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmUuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVyIGZpbGVzOiBgZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNgLCBgZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBhbmQgc2V2ZXJhbCBgc3RtbWFjYCB2YXJpYW50cyAoYGR3bWFjLXJrYCwgYGR3bWFjLXJlbmVzYXMtZ2JldGhgLCBgZHdtYWMtcnpuMWAsIGBkd21hYy1zb2NmcGdhYCwgYGR3bWFjLWludGVsYCwgYHN0bW1hY19tZGlvLmNgLCBhbmQgYHBjcy14cGNzLmNgKS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGVhY2ggZmlsZSBhZ2FpbnN0IHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCIgb3V0bGluZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgZHJpdmVycyBmb3IgaGFyZHdhcmUgdGhhdCdzICplbXVsYXRlZCogaW4gUUVNVT9cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGR3bWFjLWludGVsYCBpcyBzcGVjaWZpYyB0byBJbnRlbCBTb0NzIGxpa2UgRWxraGFydCBMYWtlLCBUaWdlciBMYWtlLCBhbmQgQWxkZXIgTGFrZS1OLiBUaG9zZSBhcmUgKnBoeXNpY2FsKiBTb0NzOyBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gU2FtZSBmb3IgYHBjcy14cGNzLXJrYCBhbmQgYGR3bWFjLXJrYCwgd2hpY2ggYXJlIFJvY2tjaGlwIFJLMzU2OCBTb0MgcGxhdGZvcm0gZGV2aWNlcy4gVGhleSdyZSBEVC1iYXNlZCBBUk02NCBoYXJkd2FyZSwgc28gZGVmaW5pdGVseSBub3QgaW4gYSBzdGFuZGFyZCB4ODYgUUVNVSBzZXR1cC4gYGR3bWFjLXJlbmVzYXMtZ2JldGhgLCBgZHdtYWMtcnpuMWAsIGFuZCBgZHdtYWMtc29jZnBnYWAgYXJlIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFJlbmVzYXMgYW5kIEludGVsIFNvQyBGUEdBIEFSTS9SSVNDLVYgYm9hcmRzLiBUaGV5IGRvbid0IGFwcGVhciBpbiB4ODYvYW1kNjQgZW11bGF0aW9uLlxuXG5gc3RtbWFjX21kaW8uY2AgaXMgcGFydCBvZiB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgZHJpdmVyLiBJdCBvbmx5IHJ1bnMgb24gc3RtbWFjIGhhcmR3YXJlLCBhbmQgbm9uZSBvZiB0aG9zZSBhcmUgZW11bGF0ZWQgaW4gbXkgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGBwY3MteHBjcy5jYCwgd2hpY2ggaXMgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBkcml2ZXIsIGluc3RhbnRpYXRlZCBieSBzdG1tYWMgb3IgZHdjIHhwY3MgZGV2aWNlcy5cblxuTm93LCBJJ20gdGhpbmtpbmcsIGNvdWxkICphbnkqIHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBsYXllciBpbnN0YW50aWF0ZSBgc3RtbWFjYCBvciBgcGNzLXhwY3NgPyBJJ20gdGhpbmtpbmcgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgdmlydGlvLCBldGMuIE5vbmUgb2YgdGhvc2UgSSBjYW4gdGhpbmsgb2YgZG8uIFRoZXkgaGF2ZSB0aGVpciBvd24gbmV0d29yayBkZXZpY2VzIGFuZCBkb24ndCByZWx5IG9uIHN0bW1hYyBvciBwY3MteHBjcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrOiBEbyAqYW55KiB2aXJ0dWFsIGRyaXZlcnMsIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYG5ldGtpdGAsIGB2ZXRoYCwgYGR1bW15YCwgYHRlYW1gLCBgYm9uZGAsIG9yIGB1c2JuZXRgLCB1dGlsaXplIGBzdG1tYWNgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgYHBoeWxpbmtgIHdpdGggYHBjcy14cGNzYD8gUGh5bGluayAqaXMqIHVzZWQgYnkgRXRoZXJuZXQgZHJpdmVycywgYnV0IGBwY3MteHBjc2AgaXMgYSBQQ1MgZHJpdmVyIGZvciBTeW5vcHN5cyBEVyBYUENTLCB3aGljaCBpcyB1c2VkIGJ5ICpwaHlzaWNhbCogRXRoZXJuZXQgTUFDcywgbm90IHZpcnR1YWwgb25lcy4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGB4cGNzX2NyZWF0ZWAgYWNyb3NzIHRoZSBrZXJuZWwgdG8gYmUgY2VydGFpbiwgYnV0IHNvIGZhciB0aGUgcGF0aCB0byBmdXp6aW5nIGxvb2tzIGJsb2NrZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzcxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjoxOC40MzE3NjgyOTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MTQ3NzU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4cGNzX2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDY6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDctXFx0aWYgKElTX0VSUihwY3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDExLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQxMjpcXHRcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihidXMsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMy1cXHRcXHRpZiAoSVNfRVJSKHBjcykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE5Nz1pbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYzoyMDU6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoZmJkLVxcdTAwM2VtZGlvX2J1cywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjA2LVxcdGlmIChJU19FUlIocGNzKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz02MDY9c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE1LVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjYxNjpcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE3LVxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTktXFx0XFx0YWRkciA9IGZmcyhwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaykgLSAxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjIwOlxcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXFx1MDAzZW1paSwgYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MjEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0xMjY9c3RhdGljIGludCB0eGdiZV9tZGlvX3Bjc19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE1NDpcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihtaWlfYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1NS1cXHRpZiAoSVNfRVJSKHBjcykpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYz00NDc9c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jLTQ5MS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYzo0OTI6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy00OTMtXFx0ZGV2aWNlX3VubG9jayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE0OTk9c3RhdGljIGludCB4cGNzX2lkZW50aWZ5KHN0cnVjdCBkd194cGNzICp4cGNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTUxOC1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTE5OnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZGF0YShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTUyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYz0xNTcxPXN0YXRpYyBpbnQgeHBjc19pbml0X2lkKHN0cnVjdCBkd194cGNzICp4cGNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTU4NS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTg2OnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1ODcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTU5MC1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTkxOlxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9kYXRhKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1OTItXFx0aWYgKElTX0VSUih4cGNzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MjItLyoqXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTYyMzogKiB4cGNzX2NyZWF0ZV9tZGlvZGV2KCkgLSBjcmVhdGUgYSBEVyB4UENTIGluc3RhbmNlIHdpdGggdGhlIE1ESU8gQGFkZHJcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjI0LSAqIEBidXM6IHBvaW50ZXIgdG8gdGhlIE1ESU8tYnVzIGRlc2NyaXB0b3IgZm9yIHRoZSBkZXZpY2UgdG8gYmUgbG9va2VkIGF0XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjMwLSAqL1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MzE6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYzMi17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjM5LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NDA6XFx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NDEtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY0MjpcXHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NDM6XFx0ICogc3VjY2Vzc2Z1bC4gSWYgeHBjc19jcmVhdGUoKSBmYWlscywgdGhpcyB3aWxsIGZyZWUgdGhlIG1kaW9cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjQ0LVxcdCAqIGRldmljZSBoZXJlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTEtfVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTI6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1My1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjU0OnN0cnVjdCBwaHlsaW5rX3BjcyAqeHBjc19jcmVhdGVfcGNzX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjU3LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTg6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYoYnVzLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjU5LVxcdGlmIChJU19FUlIoeHBjcykpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjYzLX1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjY0OkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY1LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjYtLyoqXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NzogKiB4cGNzX2NyZWF0ZV9md25vZGUoKSAtIENyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2UgZnJvbSBAZndub2RlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY2OC0gKiBAZndub2RlOiBmd25vZGUgaGFuZGxlIHBvaW5pbmcgdG8gdGhlIERXIFhQQ1MgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc1LSAqL1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NzY6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2Nzcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY4Ny1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjg4OlxcdHhwY3MgPSB4cGNzX2NyZWF0ZShtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjg5LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2OTA6XFx0LyogeHBjc19jcmVhdGUoKSBoYXMgdGFrZW4gYSByZWZjb3VudCBvbiB0aGUgbWRpb2RldiBpZiBpdCB3YXNcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjkxOlxcdCAqIHN1Y2Nlc3NmdWwuIElmIHhwY3NfY3JlYXRlKCkgZmFpbHMsIHRoaXMgd2lsbCBmcmVlIHRoZSBtZGlvXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5Mi1cXHQgKiBkZXZpY2UgaGVyZS4gSW4gYW55IGNhc2UsIHdlIGRvbid0IG5lZWQgdG8gaG9sZCBvdXIgcmVmZXJlbmNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjk5LX1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNzAwOkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX2Z3bm9kZSk7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTcwMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg9NTU9dm9pZCB4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHN0cnVjdCBkd194cGNzICp4cGNzLCB1OCBtdWx0X2ZhY3QpO1xcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg6NTY6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg6NTc6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oLTU4LXZvaWQgeHBjc19kZXN0cm95KHN0cnVjdCBkd194cGNzICp4cGNzKTtcXG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oLTU5LVxcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg6NjA6c3RydWN0IHBoeWxpbmtfcGNzICp4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XFxuaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MuaC02MS12b2lkIHhwY3NfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjoyMC45MDMyNTA4NjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzIxODc0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgRnV6emluZyBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGhlcmUncyBteSB0YWtlOiBJdCdzIGFsbCBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3Igc3BlY2lmaWMsIHBoeXNpY2FsIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IGRyaXZlcnMgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggWFBDUyBFdGhlcm5ldCBQQ1MsIHNvbWUgYWNjb21wYW55aW5nIFJvY2tjaGlwIG5hbmVuZyBjb21icGh5IGFuZCBkd21hYy1yayBkcml2ZXJzLCBhbmQgdmFyaW91cyBzdG1tYWMvcGNzLXhwY3MgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMsIGluY2x1ZGluZyBJbnRlbC9SZW5lc2FzL0FsdGVyYSBzdG1tYWMgZ2x1ZS5cblxuVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBpcyB0aGF0ICphbGwqIG9mIHRoaXMgY29kZSBmdW5kYW1lbnRhbGx5IHJlbGllcyBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0J3MgKm5vdCogcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSBvbiBhbWQ2NC4gIFRoZSBkcml2ZXJzIGFyZSB0YWlsb3JlZCBmb3Igc3BlY2lmaWMgU29DcyAoUm9ja2NoaXAgUkszNTY4LCBJbnRlbCBTb0NzLCBSZW5lc2FzIFNvQ3MsIGV0Yy4pIGFuZCB2ZW5kb3Itc3BlY2lmaWMgY29udHJvbGxlcnMuIFRoaXMgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZGV2aWNlIHRyZWVzIHRvby5cblxuRXNzZW50aWFsbHksIHRoZXJlJ3Mgbm8gd2F5IHN5emthbGxlciwgcnVubmluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBpcyBnb2luZyB0byBiZSBhYmxlIHRvIGV2ZW4gKnRvdWNoKiB0aGlzIGNvZGUuIEl0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFyZSBqdXN0IHRvbyB0aWdodC5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBlbXB0eS4gSSdtIGdvaW5nIHRvIHNldCB0aGVzZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcwMiwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NTY6MjYuMjI1MTI4NDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjoyNi4yMjUxODk0MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow78d7m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 19:35:04 +0000 UTC FinishedAt: 2026-09-07 19:56:27 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWwgQ29kaW5nIFN1YmxheWVyIChYUENTKSBvbiBSb2NrY2hpcCBSSzM1NjggU29DcywgaW5jbHVkaW5nIGEgbmV3IHBsYXRmb3JtIGRyaXZlciAocGNzLXhwY3MtcmspLCBjb21icGh5IHVwZGF0ZXMsIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBEVFMgbm9kZXMsIGFuZCByZWxhdGVkIHN0bW1hYy9wY3MteHBjcyBwbHVtYmluZyBhY3Jvc3MgZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLWdiZXRoLCBkd21hYy1yem4xLCBhbmQgZHdtYWMtc29jZnBnYS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiBkcml2ZXJzIGZvciBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBhbmQgdmVuZG9yLXNwZWNpZmljIE1BQ3MvUEhZcyAoUm9ja2NoaXAgUkszNTY4LCBJbnRlbCBTb0MgTUFDcywgUmVuZXNhcywgU29DIEZQR0EpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVSAvIEdDRSBvbiBhbWQ2NCkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGUwMDdjNzBlNzE0MzYyOGRlOWM1ZmQ4YzYzMzJhMDg3NGZkODEwYWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDE5OjU1OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wODUyZDBiY2I2NmEyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTEwIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogUm9ja2NoaXAgUkszNTY4IFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUENTXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIENvaWEgUHJhbnQgXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBSb2NrY2hpcCBSSzM1NjggU29DIGludGVncmF0ZXMgYSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBoeXNpY2FsXG4mIzQzOyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS5cbiYjNDM7ICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKVxuJiM0MzsgIGFuZCB0aGUgUGh5c2ljYWwgTWVkaXVtIEF0dGFjaG1lbnQgKFBNQSkgc3VibGF5ZXIgdGhyb3VnaCBhIE1lZGlhXG4mIzQzOyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS5cbiYjNDM7XG4mIzQzOyAgVGhlIFhQQ1MgaXMgYWNjZXNzZWQgb3ZlciB0aGUgQVBCMyBidXMgYW5kIGludGVybmFsbHkgY29ubmVjdGVkIHRvIGFcbiYjNDM7ICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS5cbiYjNDM7ICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLlxuJiM0MztcbiYjNDM7ICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kXG4mIzQzOyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGVcbiYjNDM7ICBwcm9wZXJ0eSBpbiB0aGUgTUFDIGRldmljZSB0cmVlIG5vZGUuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3NcbiYjNDM7XG4mIzQzOyAgcmVnOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgXCYjMzQ7I2FkZHJlc3MtY2VsbHNcJiMzNDs6XG4mIzQzOyAgICBjb25zdDogMVxuJiM0MztcbiYjNDM7ICBcJiMzNDsjc2l6ZS1jZWxsc1wmIzM0OzpcbiYjNDM7ICAgIGNvbnN0OiAwXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIGl0ZW1zOlxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBUEIzIGJ1cyBpbnRlcmZhY2UgY2xvY2sgKGNsa19jc3JfaSksIHJlcXVpcmVkIGZvciByZWdpc3RlciBhY2Nlc3NcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogRUVFIGNsb2NrIChjbGtfZWVlX2kpLCByZXF1aXJlZCBmb3IgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBvcGVyYXRpb25cbiYjNDM7XG4mIzQzOyAgY2xvY2stbmFtZXM6XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgLSBjb25zdDogY3NyXG4mIzQzOyAgICAgIC0gY29uc3Q6IGVlZVxuJiM0MztcbiYjNDM7ICBwaHlzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzOyAgcGh5LW5hbWVzOlxuJiM0MzsgICAgY29uc3Q6IHNlcmRlc1xuJiM0MztcbiYjNDM7ICBwb3dlci1kb21haW5zOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIFwmIzM0O15wY3MtbWlpQFswLTNdJFwmIzM0OzpcbiYjNDM7ICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhblxuJiM0MzsgICAgICBFdGhlcm5ldCBNQUMgY29udHJvbGxlciB2aWEgdGhlIHBjcy1oYW5kbGUgcHJvcGVydHkgaW4gdGhlIE1BQyYjMzk7c1xuJiM0MzsgICAgICBkZXZpY2UgdHJlZSBub2RlLlxuJiM0MztcbiYjNDM7ICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgIHJlZzpcbiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjogTUlJIHBvcnQgbnVtYmVyLlxuJiM0MzsgICAgICAgIGVudW06IFswLCAxLCAyLCAzXVxuJiM0MztcbiYjNDM7ICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAtIHJlZ1xuJiM0MztcbiYjNDM7ICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSByZWdcbiYjNDM7ICAtIFwmIzM0OyNhZGRyZXNzLWNlbGxzXCYjMzQ7XG4mIzQzOyAgLSBcJiMzNDsjc2l6ZS1jZWxsc1wmIzM0O1xuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0gcGh5c1xuJiM0MzsgIC0gcGh5LW5hbWVzXG4mIzQzOyAgLSBwb3dlci1kb21haW5zXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvY2xvY2svcmszNTY4LWNydS5oXHUwMDNlXG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9wb3dlci9yazM1NjgtcG93ZXIuaFx1MDAzZVxuJiM0MzsgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcGh5L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgcGNzQGZkYTAwMDAwIHtcbiYjNDM7ICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzXCYjMzQ7O1xuJiM0MzsgICAgICByZWcgPSBcdTAwM2MweGZkYTAwMDAwIDB4MjAwMDAwXHUwMDNlO1xuJiM0MzsgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbiYjNDM7ICAgICAgY2xvY2stbmFtZXMgPSBcJiMzNDtjc3JcJiMzNDssIFwmIzM0O2VlZVwmIzM0OztcbiYjNDM7ICAgICAgcGh5cyA9IFx1MDAzY1x1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXHUwMDNlO1xuJiM0MzsgICAgICBwaHktbmFtZXMgPSBcJiMzNDtzZXJkZXNcJiMzNDs7XG4mIzQzOyAgICAgIHBvd2VyLWRvbWFpbnMgPSBcdTAwM2NcdTAwMjZwb3dlciBSSzM1NjhfUERfUElQRVx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgIHBjcy1taWlAMCB7XG4mIzQzOyAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgfTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG5AQCAtODAsNiAmIzQzOzgwLDE1IEBAIHByb3BlcnRpZXM6XG4gICAgIGRlc2NyaXB0aW9uOlxuICAgICAgIFNvbWUgYWRkaXRpb25hbCBwaXBlIHNldHRpbmdzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIEdSRiByZWdzLlxuIFxuJiM0MzsgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcbiYjNDM7ICAgIGVudW06IFswLCAxXVxuJiM0MzsgICAgZGVmYXVsdDogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuXG4mIzQzOyAgICAgIFRoZSBoYXJkd2FyZSByZXNldCB2YWx1ZSBpcyBHTUFDMSAoMSkuIFNldCB0aGlzIHRvIDAgdG8gcm91dGVcbiYjNDM7ICAgICAgU0dNSUkgdG8gR01BQzAuXG4mIzQzO1xuICAgXCYjMzQ7I3BoeS1jZWxsc1wmIzM0OzpcbiAgICAgY29uc3Q6IDFcbiBcbkBAIC0xMDUsNiAmIzQzOzExNCwxMCBAQCBhbGxPZjpcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcbiAgICAgICAgIHJlc2V0LW5hbWVzOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IHRydWVcbiYjNDM7ICAgIGVsc2U6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogZmFsc2VcbiAgIC0gaWY6XG4gICAgICAgcHJvcGVydGllczpcbiAgICAgICAgIGNvbXBhdGlibGU6XG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZmMzMjBiMzczNjU2Zi4uZGRhNGQyMTFiN2RiNCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTIzNzM4LDYgJiM0MzsyMzczOCwxNSBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sXG4gRjpcdHNvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9zYWkuKlxuIFxuJiM0MztST0NLQ0hJUCBYUENTIERSSVZFUlxuJiM0MztNOlx0Q29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXG4mIzQzO0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4mIzQzO0w6XHRsaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnXG4mIzQzO1M6XHRNYWludGFpbmVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcbiYjNDM7RjpcdGluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbiYjNDM7XG4gUk9DS0VSIERSSVZFUlxuIE06XHRKaXJpIFBpcmtvIFx1MDAzY2ppcmlAcmVzbnVsbGkudXNcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbkBAIC0zLDYgJiM0MzszLDcgQEBcbiAvZHRzLXYxLztcbiBcbiAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcGluY3RybC9yb2NrY2hpcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3Mvc29jL3JvY2tjaGlwLHZvcDIuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3JrMzU2OC5kdHNpXCYjMzQ7XG5AQCAtMjQyLDYgJiM0MzsyNDMsNyBAQCBcdTAwMjZjb21icGh5MSB7XG4gXG4gXHUwMDI2Y29tYnBoeTIge1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XHRyb2NrY2hpcCxzZ21paS1tYWMtc2VsID0gXHUwMDNjMFx1MDAzZTtcbiB9O1xuIFxuIFx1MDAyNmNwdTAge1xuQEAgLTI2MCw5ICYjNDM7MjYyLDE4IEBAIFx1MDAyNmNwdTMge1xuIFx0Y3B1LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZkZF9jcHVcdTAwM2U7XG4gfTtcbiBcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXG4mIzQzOy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqL1xuIFx1MDAyNmdtYWMwIHtcbi1cdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrcyA9IFx1MDAzY1x1MDAyNmNydSBTQ0xLX0dNQUMwX1JYX1RYXHUwMDNlO1xuJiM0MztcdGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSBcdTAwM2NcdTAwMjZ4cGNzX2dtYWMwX2Nsa1x1MDAzZTtcbiYjNDM7XHRwY3MtaGFuZGxlID0gXHUwMDNjXHUwMDI2eHBjc19taWkwXHUwMDNlO1xuJiM0MztcdG1hbmFnZWQgPSBcJiMzNDtpbi1iYW5kLXN0YXR1c1wmIzM0OztcbiYjNDM7XHRwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2c2dtaWlfcGh5XHUwMDNlO1xuJiM0MztcdHBoeS1tb2RlID0gXCYjMzQ7c2dtaWlcJiMzNDs7XG4mIzQzO1x0cGh5LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZjY18zdjNcdTAwM2U7XG4mIzQzO1x0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4mIzQzO1x0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Z21hYzBfbWlpbVx1MDAzZTtcbiYjNDM7XHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuIH07XG4gXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXG5AQCAtMzQxLDYgJiM0MzszNTIsMzYgQEAgXHUwMDI2aTJzMF84Y2gge1xuIFx0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiB9O1xuIFxuJiM0MztcdTAwMjZtZGlvMCB7XG4mIzQzO1x0c2dtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcJiMzNDs7XG4mIzQzO1x0XHRyZWcgPSBcdTAwM2MweDNcdTAwM2U7XG4mIzQzO1x0XHRtYXgtc3BlZWQgPSBcdTAwM2MxMDAwXHUwMDNlO1xuJiM0MztcdFx0cmVzZXQtYXNzZXJ0LXVzID0gXHUwMDNjMjAwMDBcdTAwM2U7XG4mIzQzO1x0XHRyZXNldC1kZWFzc2VydC11cyA9IFx1MDAzYzEwMDAwMFx1MDAzZTtcbiYjNDM7XHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzMgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiYjNDM7XG4mIzQzO1x0XHRsZWRzIHtcbiYjNDM7XHRcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MztcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0XHRsZWRAMSB7XG4mIzQzO1x0XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlx1MDAzZTtcbiYjNDM7XHRcdFx0XHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzO1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0XHRsZWRAMiB7XG4mIzQzO1x0XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbiYjNDM7XHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlx1MDAzZTtcbiYjNDM7XHRcdFx0XHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XG4mIzQzO1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwmIzM0O2tlZXBcJiMzNDs7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO307XG4mIzQzO1xuIFx1MDAyNm1kaW8xIHtcbiBcdHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7ZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcJiMzNDs7XG5AQCAtMzUwLDYgJiM0MzszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4gXHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEMwIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiBcdFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuIFx0XHR0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzE1MDBcdTAwM2U7XG4mIzQzO1xuJiM0MztcdFx0bGVkcyB7XG4mIzQzO1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDEge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcbiYjNDM7XHRcdFx0bGVkQDIge1xuJiM0MztcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4mIzQzO1x0XHRcdFx0Y29sb3IgPSBcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cdTAwM2U7XG4mIzQzO1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuJiM0MztcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcJiMzNDtrZWVwXCYjMzQ7O1xuJiM0MztcdFx0XHR9O1xuJiM0MztcdFx0fTtcbiBcdH07XG4gfTtcbiBcbkBAIC01ODYsMyAmIzQzOzY0NiwxMyBAQCBcdTAwMjZ4aW4zMmsge1xuIFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4gXHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZjbGszMmtfb3V0MVx1MDAzZTtcbiB9O1xuJiM0MztcbiYjNDM7XHUwMDI2eHBjcyB7XG4mIzQzO1x0c3RhdHVzID0gXCYjMzQ7b2theVwmIzM0OztcbiYjNDM7XHRwaHlzID0gXHUwMDNjXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcdTAwM2U7XG4mIzQzO1x0cGh5LW5hbWVzID0gXCYjMzQ7c2VyZGVzXCYjMzQ7O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7XHUwMDI2eHBjc19taWkwIHtcbiYjNDM7XHRzdGF0dXMgPSBcJiMzNDtva2F5XCYjMzQ7O1xuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXG5pbmRleCAzYmM2NTNmMDI3ZjFmLi45ODllMTY0YzBlYjM5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuQEAgLTExMCw2ICYjNDM7MTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHtcbiBcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4gXHR9O1xuIFxuJiM0MztcdHhwY3M6IHBjc0BmZGEwMDAwMCB7XG4mIzQzO1x0XHRjb21wYXRpYmxlID0gXCYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3NcJiMzNDs7XG4mIzQzO1x0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzO1x0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1x0XHRyZWcgPSBcdTAwM2MweDAgMHhmZGEwMDAwMCAweDAgMHgyMDAwMDBcdTAwM2U7XG4mIzQzO1x0XHRjbG9ja3MgPSBcdTAwM2NcdTAwMjZjcnUgUENMS19YUENTXHUwMDNlLCBcdTAwM2NcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stbmFtZXMgPSBcJiMzNDtjc3JcJiMzNDssIFwmIzM0O2VlZVwmIzM0OztcbiYjNDM7XHRcdHBvd2VyLWRvbWFpbnMgPSBcdTAwM2NcdTAwMjZwb3dlciBSSzM1NjhfUERfUElQRVx1MDAzZTtcbiYjNDM7XHRcdHN0YXR1cyA9IFwmIzM0O2Rpc2FibGVkXCYjMzQ7O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMDogcGNzLW1paUAwIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMTogcGNzLW1paUAxIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMjogcGNzLW1paUAyIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcbiYjNDM7XHRcdHhwY3NfbWlpMzogcGNzLW1paUAzIHtcbiYjNDM7XHRcdFx0cmVnID0gXHUwMDNjM1x1MDAzZTtcbiYjNDM7XHRcdFx0c3RhdHVzID0gXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHhwY3NfZ21hYzBfY2xrOiB4cGNzLWdtYWMwLWNsb2NrIHtcbiYjNDM7XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtmaXhlZC1jbG9ja1wmIzM0OztcbiYjNDM7XHRcdGNsb2NrLWZyZXF1ZW5jeSA9IFx1MDAzYzEyNTAwMDAwMFx1MDAzZTtcbiYjNDM7XHRcdGNsb2NrLW91dHB1dC1uYW1lcyA9IFwmIzM0O2Nsa19nbWFjMF94cGNzX21paVwmIzM0OztcbiYjNDM7XHRcdCNjbG9jay1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0eHBjc19nbWFjMV9jbGs6IHhwY3MtZ21hYzEtY2xvY2sge1xuJiM0MztcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O2ZpeGVkLWNsb2NrXCYjMzQ7O1xuJiM0MztcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuJiM0MztcdFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXCYjMzQ7Y2xrX2dtYWMxX3hwY3NfbWlpXCYjMzQ7O1xuJiM0MztcdFx0I2Nsb2NrLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XHR9O1xuJiM0MztcbiBcdHBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7XG4gXHRcdGNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmXCYjMzQ7LCBcJiMzNDtzeXNjb25cJiMzNDs7XG4gXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDBcdTAwM2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbmluZGV4IGUzZGQ1YWRkYTVhY2EuLjUwODhhY2MwNjk4MmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXG5AQCAtMTcwLDYgJiM0MzsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcbiBcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxuIFx0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuIFx0c2VsZWN0IE1GRF9TWVNDT05cbiYjNDM7XHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcbiBcdGhlbHBcbiBcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li5mZDVmMDFjODk0MWMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuQEAgLTYwMywxMyAmIzQzOzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbiBcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldCA9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDtcbiYjNDM7XHRpbnQgYWRkcjtcbiYjNDM7XG4mIzQzO1x0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OykpIHtcbiYjNDM7XHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OywgMCk7XG4mIzQzO1x0XHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xuJiM0MztcdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbiYjNDM7XHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXHUwMDNlbWlpLCBhZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChJU19FUlIoeHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbiYjNDM7XG4mIzQzO1x0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW50ZWxfbWdiZV9wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eHBjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIHtcbi1cdC8qIHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmVcbi1cdCAqIHNob3VsZCBhbHdheXMgYmUgYW4gWFBDUy4gVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgYWx3YXlzXG4tXHQgKiByZXR1cm4gdGhpcyBpZiBwcmVzZW50LlxuLVx0ICovXG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4gXHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuIH1cbiBcbkBAIC03MzMsNiAmIzQzOzc2Nyw4IEBAIHN0YXRpYyBpbnQgaW50ZWxfbWdiZV9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdCAgICBwbGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuIFx0XHRwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2sgPSBCSVRfVTMyKElOVEVMX01HQkVfWFBDU19BRERSKTtcbiBcdFx0cGxhdC1cdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4mIzQzO1x0XHRwbGF0LVx1MDAzZXBjc19pbml0ID0gaW50ZWxfbWdiZV9wY3NfaW5pdDtcbiYjNDM7XHRcdHBsYXQtXHUwMDNlcGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0O1xuIFx0XHRwbGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBpbnRlbF9tZ2JlX3NlbGVjdF9wY3M7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG5pbmRleCAxOWYzNGUxOGJmZWYyLi45YWYzMmMyNmY5YzE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbkBAIC04MSw4ICYjNDM7ODEsMTEgQEAgc3RhdGljIGludCByZW5lc2FzX2dtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4ge1xuLVx0aWYgKHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4tXHRcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5pbmRleCA4ZDcwNDJlNjg5MjYxLi5lNDdjYTFiZWM1YjhiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xuQEAgLTIwLDYgJiM0MzsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7c3RtbWFjX3BsYXRmb3JtLmhcJiMzNDtcbkBAIC00Nyw2ICYjNDM7NDgsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xuIFx0dm9pZCAoKnNldF90b19yZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0ICAgICBpbnQgdHhfZGVsYXksIGludCByeF9kZWxheSk7XG4gXHR2b2lkICgqc2V0X3RvX3JtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbiYjNDM7XHR2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7XG4gXHRpbnQgKCpzZXRfc3BlZWQpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxuIFx0XHRcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpO1xuIFx0dm9pZCAoKmludGVncmF0ZWRfcGh5X3Bvd2VydXApKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbkBAIC02Myw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xuIFx0Ym9vbCBjbG9ja19ncmZfcmVnX2luX3BocDtcbiBcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XG4gXHRib29sIHN1cHBvcnRzX3JtaWk7XG4mIzQzO1x0Ym9vbCBzdXBwb3J0c19zZ21paTtcbiBcdGJvb2wgcGhwX2dyZl9yZXF1aXJlZDtcbiBcdGJvb2wgcmVnc192YWxpZDtcbiBcdHUzMiByZWdzW107XG5AQCAtOTgsNiAmIzQzOzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEge1xuIFx0Ym9vbCBpbnRlZ3JhdGVkX3BoeTtcbiBcdGJvb2wgc3VwcG9ydHNfcmdtaWk7XG4gXHRib29sIHN1cHBvcnRzX3JtaWk7XG4mIzQzO1x0Ym9vbCBzdXBwb3J0c19zZ21paTtcbiBcbiBcdHN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzO1xuIFx0aW50IG51bV9jbGtzO1xuQEAgLTgwOSw2ICYjNDM7ODEzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Mjhfb3BzID0ge1xuICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xXHRcdDB4MDM4Y1xuIFxuIC8qIFJLMzU2OF9HUkZfR01BQzBfQ09OMSBcdTAwMjZcdTAwMjYgUkszNTY4X0dSRl9HTUFDMV9DT04xICovXG4mIzQzOyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJXHRcdEdSRl9DTFJfQklUKDcpXG4mIzQzOyNkZWZpbmUgUkszNTY4X0dNQUNfTU9ERV9TR01JSV9RU0dNSUlcdFx0R1JGX0JJVCg3KVxuICNkZWZpbmUgUkszNTY4X0dNQUNfRkxPV19DVFJMXHRcdFx0R1JGX0JJVCgzKVxuICNkZWZpbmUgUkszNTY4X0dNQUNfRkxPV19DVFJMX0NMUlx0XHRHUkZfQ0xSX0JJVCgzKVxuICNkZWZpbmUgUkszNTY4X0dNQUNfUlhDTEtfRExZX0VOQUJMRVx0XHRHUkZfQklUKDEpXG5AQCAtODUxLDE4ICYjNDM7ODU3LDMyIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbiYjNDM7XHRcdCAgICAgUkszNTY4X0dNQUNfTU9ERV9STUlJX1JHTUlJIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFIHxcbiBcdFx0ICAgICBSSzM1NjhfR01BQ19UWENMS19ETFlfRU5BQkxFKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgY29uMTtcbiYjNDM7XG4mIzQzO1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4mIzQzO1x0XHRcdFx0ICAgICBSSzM1NjhfR1JGX0dNQUMwX0NPTjE7XG4mIzQzO1xuJiM0MztcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJrX2dtYWNfb3BzIHJrMzU2OF9vcHMgPSB7XG4gXHQuaW5pdCA9IHJrMzU2OF9pbml0LFxuIFx0LnNldF90b19yZ21paSA9IHJrMzU2OF9zZXRfdG9fcmdtaWksXG4mIzQzO1x0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXG4mIzQzO1xuIFx0LnNldF9zcGVlZCA9IHJrX3NldF9jbGtfbWFjX3NwZWVkLFxuIFxuIFx0LmdtYWNfcGh5X2ludGZfc2VsX21hc2sgPSBHRU5NQVNLX1UxNig2LCA0KSxcbiBcbiBcdC5zdXBwb3J0c19ybWlpID0gdHJ1ZSxcbiYjNDM7XHQuc3VwcG9ydHNfc2dtaWkgPSB0cnVlLFxuIFxuIFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxuIFx0LnJlZ3MgPSB7XG5AQCAtMTIwOCw2ICYjNDM7MTIyOCw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRkZXZfZXJyKGJzcF9wcml2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCB0byBkaXNhYmxlIHBoeS1zdXBwbHlcXG5cJiMzNDspO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcHJpdi1cdTAwM2VkZXZpY2UtXHUwMDNlb2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ub2RlO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcbiYjNDM7XHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFwmIzM0O3Bjcy1oYW5kbGVcJiMzNDssIDApO1xuJiM0MztcdGlmICghcGNzX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGNzX25vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoeHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhwY3NfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuJiM0MztcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJrX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuJiM0MztcdFx0XHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKVxuQEAgLTEzMzAsNiAmIzQzOzEzODcsNyBAQCBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuIFxuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcmdtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JnbWlpO1xuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcm1paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19ybWlpIHx8ICEhb3BzLVx1MDAzZXNldF90b19ybWlpO1xuJiM0MztcdGJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3NnbWlpID0gb3BzLVx1MDAzZXN1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLVx1MDAzZXNldF90b19zZ21paTtcbiBcbiBcdGlmIChvcHMtXHUwMDNlaW5pdCkge1xuIFx0XHRyZXQgPSBvcHMtXHUwMDNlaW5pdChic3BfcHJpdik7XG5AQCAtMTM2MSw2ICYjNDM7MTQxOSwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuJiM0MztcdFx0aWYgKCFic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19zZ21paSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwmIzM0O3Vuc3VwcG9ydGVkIGludGVyZmFjZSAlZFwmIzM0OywgYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKTtcbkBAIC0xMzc5LDE2ICYjNDM7MTQ0MSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4mIzQzO1x0cmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXG4mIzQzO1x0XHRnb3RvIHNldF9tb2RlO1xuJiM0MztcbiBcdHJldCA9IHJrX2dldF9waHlfaW50Zl9zZWwoYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFxuIFx0aW50ZiA9IHJldDtcbiBcbi1cdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWdtYWNfcGh5X2ludGZfc2VsX21hc2sgfHxcbiBcdCAgICBic3BfcHJpdi1cdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKSB7XG4gXHRcdC8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovXG5AQCAtMTM5OSwxMCAmIzQzOzE0NjQsOCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgIGJzcF9wcml2LVx1MDAzZWdtYWNfcm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuIFx0aWYgKGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKSB7XG5AQCAtMTQxMCwxMyAmIzQzOzE0NzMsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdFx0XHQgICAgIGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKTtcbiBcbiBcdFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXHR9XG4gXG4tXHQvKnJtaWkgb3IgcmdtaWkqL1xuJiM0MztzZXRfbW9kZTpcbiYjNDM7XHQvKiBybWlpLCByZ21paSwgc2dtaWkgKi9cbiBcdHN3aXRjaCAoYnNwX3ByaXYtXHUwMDNlcGh5X2lmYWNlKSB7XG4gXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTpcbiBcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtpbml0IGZvciBSR01JSVxcblwmIzM0Oyk7XG5AQCAtMTQ0NywxNSAmIzQzOzE1MDksMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdGlmIChic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3JtaWkpXG4gXHRcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZXNldF90b19ybWlpKGJzcF9wcml2KTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4mIzQzO1x0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2luaXQgZm9yIFNHTUlJXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGlmIChic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3NnbWlpKVxuJiM0MztcdFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3NnbWlpKGJzcF9wcml2KTtcbiYjNDM7XHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O05PIGludGVyZmFjZSBkZWZpbmVkIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbiBcdHJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gY2xrX2Rpc2FibGU7XG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XG4gXG5AQCAtMTQ2Myw2ICYjNDM7MTUzMCwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGtfZGlzYWJsZTpcbiYjNDM7XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBya19nbWFjX3Bvd2VyZG93bihzdHJ1Y3QgcmtfcHJpdl9kYXRhICpnbWFjKVxuQEAgLTE0ODYsNiAmIzQzOzE1NTcsOSBAQCBzdGF0aWMgdm9pZCBya19nZXRfaW50ZXJmYWNlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHZvaWQgKmJzcF9wcml2LFxuIFxuIFx0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3JtaWkpXG4gXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdGlmIChyay1cdTAwM2VzdXBwb3J0c19zZ21paSlcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksIGludGVyZmFjZXMpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJrX3NldF9jbGtfdHhfcmF0ZSh2b2lkICpic3BfcHJpdl8sIHN0cnVjdCBjbGsgKmNsa190eF9pLFxuQEAgLTE2MDIsNiAmIzQzOzE2NzYsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbGF0X2RhdC1cdTAwM2VzdXNwZW5kID0gcmtfZ21hY19zdXNwZW5kO1xuIFx0cGxhdF9kYXQtXHUwMDNlcmVzdW1lID0gcmtfZ21hY19yZXN1bWU7XG4gXG4mIzQzO1x0aWYgKHBsYXRfZGF0LVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4mIzQzO1x0XHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdC8qIFNHTUlJIHJlcXVpcmVzIGEgUENTICovXG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4mIzQzO1x0XHRwbGF0X2RhdC1cdTAwM2VwY3NfaW5pdCA9IHJrX3Bjc19pbml0O1xuJiM0MztcdFx0cGxhdF9kYXQtXHUwMDNlcGNzX2V4aXQgPSBya19wY3NfZXhpdDtcbiYjNDM7XHRcdHBsYXRfZGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xuIFx0aWYgKElTX0VSUihwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdikpXG4gXHRcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVx1MDAzZWJzcF9wcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xuQEAgLTM1LDggJiM0MzszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHJ6bjFfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4mIzQzO1x0cHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ6bjFfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcbkBAIC01MzksOCAmIzQzOzUzOSwxMSBAQCBzdGF0aWMgaW50IHNvY2ZwZ2FfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bHlueF9wY3NfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbiYjNDM7XHRwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xuaW5kZXggYWZlOThmZjViZGNiMC4uZDJmNzdmMGMyMjNhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbkBAIC00MjYsMzYgJiM0Mzs0MjYsMTUgQEAgaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZGV2bm9kZSwgKnBjc25vZGU7XG4tXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7XG4tXHRpbnQgYWRkciwgcmV0O1xuLVxuLVx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpO1xuLVxuLVx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdCkge1xuLVx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQocHJpdik7XG4tXHR9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsIFwmIzM0O3Bjcy1oYW5kbGVcJiMzNDspKSB7XG4tXHRcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXCYjMzQ7cGNzLWhhbmRsZVwmIzM0OywgMCk7XG4tXHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG4tXHRcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xuLVx0XHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oeHBjcyk7XG4tXHR9IGVsc2UgaWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhIFx1MDAyNlx1MDAyNlxuLVx0XHQgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykge1xuLVx0XHRhZGRyID0gZmZzKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSAtIDE7XG4tXHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXHUwMDNlbWlpLCBhZGRyKTtcbi1cdFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdClcbiBcdFx0cmV0dXJuIDA7XG4tXHR9XG4gXG4mIzQzO1x0cmV0ID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KHByaXYpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi1cdTAwM2VkZXZpY2UsIHJldCwgXCYjMzQ7Tm8geFBDUyBmb3VuZFxcblwmIzM0Oyk7XG4gXG4tXHRpZiAoeHBjcylcbi1cdFx0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcbi1cbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IHhwY3M7XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDYzLDE0ICYjNDM7NDQyLDEwIEBAIHZvaWQgc3RtbWFjX3Bjc19jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQpXG4tXHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfZXhpdChwcml2KTtcbi1cbi1cdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuJiM0MztcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4mIzQzO1x0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KHByaXYpO1xuIH1cbiBcbiBzdHJ1Y3Qgc3RtbWFjX2Nsa19yYXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5pbmRleCBlNDE3ZmQ2NmY2NjBhLi44OGJjNDA3OTFlNjlmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXG5AQCAtMTIsNiAmIzQzOzEyLDI5IEBAIGNvbmZpZyBQQ1NfWFBDU1xuIFx0ICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXNcbiBcdCAgRGVzaWduV2FyZSBYUENTIGNvbnRyb2xsZXJzLlxuIFxuJiM0MztpZiBQQ1NfWFBDU1xuJiM0MztcbiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGRlZmF1bHQgUENTX1hQQ1NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBHZW5lcmljIERXWFBDUyBkcml2ZXIgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbiYjMzk7dCByZXF1aXJlIGFueVxuJiM0MztcdCAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybVxuJiM0MztcdCAgZGF0YSBmb3Igc2V0dXAuXG4mIzQzO1xuJiM0MztcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiYjNDM7XG4mIzQzO2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1JvY2tjaGlwIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBBUkNIX1JPQ0tDSElQXG4mIzQzO1x0ZGVwZW5kcyBvbiBPRiBcdTAwMjZcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLlxuJiM0MztcbiYjNDM7XHQgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiYjNDM7XG4mIzQzO2VuZGlmICMgUENTX1hQQ1NcbiYjNDM7XG4gY29uZmlnIFBDU19MWU5YXG4gXHR0cmlzdGF0ZVxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuaW5kZXggNGY3OTIwNjE4YjkwMC4uZjlmNmNmMjU3OGQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG5AQCAtMSwxMCAmIzQzOzEsMTEgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnNcbiBcbi1wY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFxcXG4tXHRcdFx0XHQgICBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXG4mIzQzO3Bjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vXG4gXG4gb2JqLSQoQ09ORklHX1BDU19YUENTKVx0XHQmIzQzOz0gcGNzX3hwY3Mub1xuJiM0MztvYmotJChDT05GSUdfUENTX1hQQ1NfUExBVEZPUk0pICYjNDM7PSBwY3MteHBjcy1wbGF0Lm9cbiYjNDM7b2JqLSQoQ09ORklHX1BDU19YUENTX1JPQ0tDSElQKSAmIzQzOz0gcGNzLXhwY3Mtcmsub1xuIG9iai0kKENPTkZJR19QQ1NfTFlOWClcdFx0JiM0Mzs9IHBjcy1seW54Lm9cbiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSlcdCYjNDM7PSBwY3MtbXRrLWx5bnhpLm9cbiBvYmotJChDT05GSUdfUENTX1JaTjFfTUlJQylcdCYjNDM7PSBwY3MtcnpuMS1taWljLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjhiY2FhMWE1Y2JiZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcbkBAIC0wLDAgJiM0MzsxLDU0MyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQmFzZWQgb24gdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBwbGF0Zm9ybSBkcml2ZXIuXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pblxuJiM0MzsgKlxuJiM0MzsgKiBBZGFwdGVkIGZvciBSb2NrY2hpcCBTb0NzLCB3aXRoIHJlZmVyZW5jZSB0byB0aGUgUm9ja2NoaXAgT0VNIGRyaXZlci5cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnRcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfcGxhdGZvcm0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG1fZG9tYWluLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cGNzLXhwY3MuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3Nfcmsge1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XHR2b2lkIF9faW9tZW0gKnJlZ19iYXNlO1xuJiM0MztcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XG4mIzQzO1x0c3RydWN0IGNsayAqY3NyX2NsaztcbiYjNDM7XHRzdHJ1Y3QgY2xrICplZWVfY2xrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHB0cmRpZmZfdCB4cGNzX3JrX2FkZHJfZm9ybWF0KGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRwdHJkaWZmX3QgY3NyO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVhZGwocHhwY3MtXHUwMDNlcmVnX2Jhc2UgJiM0MzsgKGNzciBcdTAwM2NcdTAwM2MgMikpIFx1MDAyNiAweGZmZmY7XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfcHV0KFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHB0cmRpZmZfdCBjc3I7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Y3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR3cml0ZWwodmFsLCBweHBjcy1cdTAwM2VyZWdfYmFzZSAmIzQzOyAoY3NyIFx1MDAzY1x1MDAzYyAyKSk7XG4mIzQzO1xuJiM0MztcdHBtX3J1bnRpbWVfcHV0KFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMVx0MlxuJiM0MzsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkyXHQzXG4mIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTNcdDRcbiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfUE1BUE1EXHQ2XG4mIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSVx0N1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIShhZGRyIFx1MDAzYyAwIHx8IGFkZHIgXHUwMDNlIDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoZGV2KSB7XG4mIzQzO1x0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbiYjNDM7XHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiByZWFkIHJlbWFwcGluZyB0byBNSUkgaXMgcGVyZm9ybWVkIGJ5IEhXICovXG4mIzQzO1x0c3dpdGNoIChhZGRyKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMjtcbiYjNDM7XHRjYXNlIDM6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChkZXYpIHtcbiYjNDM7XHRjYXNlIE1ESU9fTU1EX1BNQVBNRDpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xuJiM0MztcdGNhc2UgTURJT19NTURfVkVORDI6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTlhJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRhYmxlIG9ubHkgb24gTUlJICovXG4mIzQzO1x0c3dpdGNoIChyZWcpIHtcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9BTl9DVFJMOlxuJiM0MztcdGNhc2UgRFdfVlJfTUlJX0FOX0lOVFJfU1RTOlxuJiM0MztcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XG4mIzQzO1x0Y2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMTpcbiYjNDM7XHRjYXNlIERXX1ZSX01JSV9ESUdfQ1RSTDI6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGFkZHIpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgZGV2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbiYjNDM7XHRpZiAoZGV2IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDB4ZmZmZjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZywgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBkZXY7XG4mIzQzO1xuJiM0MztcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTtcbiYjNDM7XHRpZiAoZGV2IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3dyaXRlX3JlZyhweHBjcywgZGV2LCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4mIzQzO1x0aWYgKGRldiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAweGZmZmY7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTtcbiYjNDM7XHRpZiAoZGV2IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB4cGNzX3JrX3dyaXRlX3JlZyhweHBjcywgZGV2LCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZHdfeHBjc19yayAqeHBjc19ya19jcmVhdGVfZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuJiM0MztcbiYjNDM7XHRweHBjcyA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHhwY3MpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlcGRldiA9IHBkZXY7XG4mIzQzO1xuJiM0MztcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcHhwY3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHhwY3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHB4cGNzLVx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcJiMzNDtzZXJkZXNcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSkpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSksXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZ2V0IFNlckRlcyBQSFlcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcbiYjNDM7XHRwaHlfcG93ZXJfb2ZmKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuJiM0MztcdHBoeV9leGl0KHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuJiM0MztcbiYjNDM7XHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBwb3dlciBkb21haW4gaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgZW5hYmxlZCwgd2hpY2ggYWxsb3dzIHVzIHRvXG4mIzQzO1x0ICogZHluYW1pY2FsbHkgdHVybiB0aGUgQ1NSIGNsb2NrIG9uL29mZiB1c2luZyBQTSB3aGlsZSBrZWVwaW5nIHRoZSBQQ1NcbiYjNDM7XHQgKiBwb3dlcmVkIG9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfaW5pdChweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIHBtX2RvbWFpbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9wb3dlcl9vbihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBzZXJkZXNfcGh5O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmLCBweHBjcyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBTZXJEZXMgUEhZOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3NlcmRlc19waHk6XG4mIzQzO1x0cGh5X2V4aXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4mIzQzO3BtX2RvbWFpbjpcbiYjNDM7XHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9yZXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHB4cGNzLVx1MDAzZXBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJlc291cmNlICpyZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XG4mIzQzO1x0aWYgKCFyZXMpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtObyByZWctc3BhY2UgZm91bmRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmVzb3VyY2Vfc2l6ZShyZXMpIFx1MDAzYyBTWl8yTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgcmVnLXNwYWNlIHNpemVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2VyZWdfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VyZWdfYmFzZSkpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcy1cdTAwM2VyZWdfYmFzZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19leGl0X2Nsayh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVx1MDAzZWVlZV9jbGspO1xuJiM0MztcbiYjNDM7XHRwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHB4cGNzLVx1MDAzZWNzcl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBcJiMzNDtjc3JcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHhwY3MtXHUwMDNlY3NyX2NsaykpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlY3NyX2NsayksXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIGdldCBDU1IgY2xvY2tcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRweHBjcy1cdTAwM2VlZWVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCYjMzQ7ZWVlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspLFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBnZXQgRUVFIGNsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLVx1MDAzZWVlZV9jbGspO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gZW5hYmxlIEVFRSBjbG9ja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7XG4mIzQzO1x0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19leGl0X2NsaywgcHhwY3MpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bSBmb3IgRUVFIGNsb2NrOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTtcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGJ1cyA9IGRldm1fbWRpb2J1c19hbGxvY19zaXplKGRldiwgMCk7XG4mIzQzO1x0aWYgKCFidXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0YnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzXCYjMzQ7O1xuJiM0MztcdGJ1cy1cdTAwM2VyZWFkID0geHBjc19ya19yZWFkX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcbiYjNDM7XHRidXMtXHUwMDNlcmVhZF9jNDUgPSB4cGNzX3JrX3JlYWRfYzQ1O1xuJiM0MztcdGJ1cy1cdTAwM2V3cml0ZV9jNDUgPSB4cGNzX3JrX3dyaXRlX2M0NTtcbiYjNDM7XHRidXMtXHUwMDNlcGh5X21hc2sgPSB+MDtcbiYjNDM7XHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vwcml2ID0gcHhwY3M7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxuJiM0MztcdFx0IFwmIzM0O3JvY2tjaGlwX2R3eHBjcy0leFwmIzM0OywgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aWQpKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5lIGFic3RyYWN0aW5nIG91dFxuJiM0MztcdCAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnNcbiYjNDM7XHQgKiBhY2Nlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHhwY3MtXHUwMDNlYnVzID0gYnVzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XG4mIzQzO1x0aWYgKElTX0VSUihweHBjcykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXG4mIzQzO1x0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXG4mIzQzO1x0ICogdHJpZ2dlciBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChTRXJyb3IpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxuJiM0MztcdCAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIHNvZnQgcmVzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geHBjc19ya19pbml0X2J1cyhweHBjcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyb2NrY2hpcCxyazM1NjgteHBjc1wmIzM0OyB9LFxuJiM0MztcdHsgLyogc2VudGluZWwgKi8gfSxcbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwY3NfbnA7XG4mIzQzO1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuJiM0MztcdHN0cnVjdCBkd194cGNzICp4cGNzO1xuJiM0MztcdHUzMiBwb3J0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4mIzQzO1xuJiM0MztcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZwb3J0KSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiYjNDM7XHRwY3NfbnAgPSBvZl9nZXRfcGFyZW50KG5wKTtcbiYjNDM7XHRpZiAoIXBjc19ucClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkge1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvZl9tYXRjaF9ub2RlKHhwY3Nfcmtfb2ZfaWRzLCBwY3NfbnApKSB7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChwY3NfbnApO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xuJiM0MztcdG9mX25vZGVfcHV0KHBjc19ucCk7XG4mIzQzO1x0aWYgKCFwZGV2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4mIzQzO1xuJiM0MztcdGRldmljZV9sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcdGlmICghcHhwY3MgfHwgIXB4cGNzLVx1MDAzZWJ1cykge1xuJiM0MztcdFx0ZGV2aWNlX3VubG9jayhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXHUwMDNlYnVzLCAoaW50KXBvcnQpO1xuJiM0MztcdGRldmljZV91bmxvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChJU19FUlIoeHBjcykpIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuJiM0MztcdFx0cmV0dXJuIHhwY3M7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV9saW5rX2FkZChkZXYsIFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XG4mIzQzO1x0XHR4cGNzX2Rlc3Ryb3koeHBjcyk7XG4mIzQzO1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzQzO1x0cmV0dXJuIHhwY3M7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19ya19jcmVhdGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVx1MDAzZWNzcl9jbGspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLVx1MDAzZWNzcl9jbGspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcyxcbiYjNDM7XHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQsXG4mIzQzO1x0XHRcdCAgIHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUsXG4mIzQzO1x0XHRcdCAgIE5VTEwpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHBjc19ya19kcml2ZXIgPSB7XG4mIzQzO1x0LnByb2JlID0geHBjc19ya19wcm9iZSxcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtya194cGNzLWR3eHBjc1wmIzM0OyxcbiYjNDM7XHRcdC5wbSA9IHBtX3B0cihcdTAwMjZ4cGNzX3JrX3BtX29wcyksXG4mIzQzO1x0XHQub2ZfbWF0Y2hfdGFibGUgPSB4cGNzX3JrX29mX2lkcyxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0Mzttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHhwY3NfcmtfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NvaWEgUHJhbnQgXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuaW5kZXggMDMzN2UyYmNjMDEyNS4uNTBiOWNkZjk0ZmRhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuQEAgLTgxNiw5ICYjNDM7ODE2LDE0IEBAIHN0YXRpYyBpbnQgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoc3RydWN0IGR3X3hwY3MgKnhwY3MsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuJiM0MztcdC8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovXG4mIzQzO1x0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRpZiAobmVnX21vZGUgPT0gUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEKVxuIFx0XHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUixcbi1cdFx0XHRcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRcdFx0XHQgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTEwOTMsMTAgJiM0MzsxMDk4LDE1IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbi1cdGlmIChzdGF0ZS1cdTAwM2Vhbl9jb21wbGV0ZSlcbiYjNDM7XHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpIHtcbiYjNDM7XHRcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cbiBcdFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbiBcbiYjNDM7XHRcdC8qIEluaXRpYXRlIHRoZSBuZXh0IHJvdW5kIG9mIEFOICovXG4mIzQzO1x0XHR4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTlJFU1RBUlQpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3hwY3NfcGh5X3JlYWR5O1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDtcbiYjNDM7XHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMF9wb3J0X2VuO1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuO1xuIH07XG5AQCAtMjEyLDYgJiM0MzsyMTMsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2IHtcbiBcdGJvb2wgZW5hYmxlX3NzYztcbiBcdGJvb2wgZXh0X3JlZmNsaztcbiBcdHN0cnVjdCBjbGsgKnJlZmNsaztcbiYjNDM7XHR1MzIgc2dtaWlfbWFjX3NlbDtcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxuQEAgLTM3NSw2ICYjNDM7Mzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcbiBcbiBcdHByaXYtXHUwMDNlZXh0X3JlZmNsayA9IGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KGRldiwgXCYjMzQ7cm9ja2NoaXAsZXh0LXJlZmNsa1wmIzM0Oyk7XG4gXG4mIzQzO1x0cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcbiYjNDM7XHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcJiMzNDtyb2NrY2hpcCxzZ21paS1tYWMtc2VsXCYjMzQ7LCBcdTAwMjZwcml2LVx1MDAzZXNnbWlpX21hY19zZWwpO1xuJiM0MztcbiBcdHByaXYtXHUwMDNlcGh5X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgXCYjMzQ7cGh5XCYjMzQ7KTtcbiBcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cbiBcdGlmIChQVFJfRVJSKHByaXYtXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcbkBAIC04NzMsNiAmIzQzOzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcbiYjNDM7XHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaXBlX2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfc2dtaWlfbWFjX3NlbCxcbiYjNDM7XHRcdFx0XHRcdHByaXYtXHUwMDNlc2dtaWlfbWFjX3NlbCBcdTAwM2UgMCk7XG4gXHRcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cdTAwM2VwaXBlX2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfeHBjc19waHlfcmVhZHksIHRydWUpO1xuIFx0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGh5X2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfcGh5bW9kZV9zZWwsIHRydWUpO1xuIFx0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGh5X2dyZiwgXHUwMDI2Y2ZnLVx1MDAzZXBpcGVfc2VsX3FzZ21paSwgdHJ1ZSk7XG5AQCAtOTg0LDYgJiM0Mzs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7XG4gXHQuY29uM19mb3Jfc2F0YVx0XHQ9IHsgMHgwMDBjLCAxNSwgMCwgMHgwMCwgMHg0NDA3IH0sXG4gXHQvKiBwaXBlLWdyZiAqL1xuIFx0LnBpcGVfY29uMF9mb3Jfc2F0YVx0PSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LFxuJiM0MztcdC5waXBlX3NnbWlpX21hY19zZWxcdD0geyAweDAwNDAsIDEsIDEsIDB4MDAsIDB4MDEgfSxcbiBcdC5waXBlX3hwY3NfcGh5X3JlYWR5XHQ9IHsgMHgwMDQwLCAyLCAyLCAweDAwLCAweDAxIH0sXG4gXHQudTNvdGcwX3BvcnRfZW5cdFx0PSB7IDB4MDEwNCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG4gXHQudTNvdGcxX3BvcnRfZW5cdFx0PSB7IDB4MDE0NCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaCBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yODcyM2Q1YmQ3NWNjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG5AQCAtMCwwICYjNDM7MSwxMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsjaWZuZGVmIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxuJiM0MzsjZGVmaW5lIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWwgQ29kaW5nIFN1YmxheWVyIChYUENTKSBvbiBSb2NrY2hpcCBSSzM1NjggU29DcywgaW5jbHVkaW5nIGEgbmV3IHBsYXRmb3JtIGRyaXZlciAocGNzLXhwY3MtcmspLCBjb21icGh5IHVwZGF0ZXMsIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCBEVFMgbm9kZXMsIGFuZCByZWxhdGVkIHN0bW1hYy9wY3MteHBjcyBwbHVtYmluZyBhY3Jvc3MgZHdtYWMtcmssIGR3bWFjLWludGVsLCBkd21hYy1yZW5lc2FzLWdiZXRoLCBkd21hYy1yem4xLCBhbmQgZHdtYWMtc29jZnBnYS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiBkcml2ZXJzIGZvciBwaHlzaWNhbCBTb0MgcGxhdGZvcm0gZGV2aWNlcyBhbmQgdmVuZG9yLXNwZWNpZmljIE1BQ3MvUEhZcyAoUm9ja2NoaXAgUkszNTY4LCBJbnRlbCBTb0MgTUFDcywgUmVuZXNhcywgU29DIEZQR0EpIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVSAvIEdDRSBvbiBhbWQ2NCkuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGUwMDdjNzBlNzE0MzYyOGRlOWM1ZmQ4YzYzMzJhMDg3NGZkODEwYWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE5OjU1OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4wODUyZDBiY2I2NmEyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWwKQEAgLTAsMCAmIzQzOzEsMTEwIEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sIwomIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIwomIzQzOwomIzQzO3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1MKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gQ29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgUm9ja2NoaXAgUkszNTY4IFNvQyBpbnRlZ3JhdGVzIGEgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbAomIzQzOyAgQ29kaW5nIFN1YmxheWVyIChYUENTKS4KJiM0MzsgIFRoZSBQQ1MgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIChNQUMpCiYjNDM7ICBhbmQgdGhlIFBoeXNpY2FsIE1lZGl1bSBBdHRhY2htZW50IChQTUEpIHN1YmxheWVyIHRocm91Z2ggYSBNZWRpYQomIzQzOyAgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChHTUlJKS4KJiM0MzsKJiM0MzsgIFRoZSBYUENTIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIEFQQjMgYnVzIGFuZCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBhCiYjNDM7ICBOYW5lbmcgQ29tYm8gU2VyRGVzIFBIWS4KJiM0MzsgIEl0IHN1cHBvcnRzIDEwMDBCQVNFLVgsIFNHTUlJIGFuZCBRU0dNSUkgbW9kZXMuCiYjNDM7CiYjNDM7ICBUaGUgYmxvY2sgY29udGFpbnMgZm91ciBNSUkgcG9ydHMgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5IGVuYWJsZWQgYW5kCiYjNDM7ICByb3V0ZWQgdG8gb25lIG9mIHRoZSBFdGhlcm5ldCBHTUFDIGNvbnRyb2xsZXJzIHZpYSB0aGUgcGNzLWhhbmRsZQomIzQzOyAgcHJvcGVydHkgaW4gdGhlIE1BQyBkZXZpY2UgdHJlZSBub2RlLgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogcm9ja2NoaXAscmszNTY4LXhwY3MKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgICYjMzQ7I2FkZHJlc3MtY2VsbHMmIzM0OzoKJiM0MzsgICAgY29uc3Q6IDEKJiM0MzsKJiM0MzsgICYjMzQ7I3NpemUtY2VsbHMmIzM0OzoKJiM0MzsgICAgY29uc3Q6IDAKJiM0MzsKJiM0MzsgIGNsb2NrczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogQVBCMyBidXMgaW50ZXJmYWNlIGNsb2NrIChjbGtfY3NyX2kpLCByZXF1aXJlZCBmb3IgcmVnaXN0ZXIgYWNjZXNzCiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogRUVFIGNsb2NrIChjbGtfZWVlX2kpLCByZXF1aXJlZCBmb3IgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBvcGVyYXRpb24KJiM0MzsKJiM0MzsgIGNsb2NrLW5hbWVzOgomIzQzOyAgICBpdGVtczoKJiM0MzsgICAgICAtIGNvbnN0OiBjc3IKJiM0MzsgICAgICAtIGNvbnN0OiBlZWUKJiM0MzsKJiM0MzsgIHBoeXM6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICBwaHktbmFtZXM6CiYjNDM7ICAgIGNvbnN0OiBzZXJkZXMKJiM0MzsKJiM0MzsgIHBvd2VyLWRvbWFpbnM6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7cGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAmIzM0O15wY3MtbWlpQFswLTNdJCYjMzQ7OgomIzQzOyAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgT25lIG9mIHRoZSBmb3VyIE1JSSBwb3J0cyBvZiB0aGUgWFBDUy4gVGhlIHBvcnQgaXMgbGlua2VkIHRvIGFuCiYjNDM7ICAgICAgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIgdmlhIHRoZSBwY3MtaGFuZGxlIHByb3BlcnR5IGluIHRoZSBNQUMmIzM5O3MKJiM0MzsgICAgICBkZXZpY2UgdHJlZSBub2RlLgomIzQzOwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIHJlZzoKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuCiYjNDM7ICAgICAgICBlbnVtOiBbMCwgMSwgMiwgM10KJiM0MzsKJiM0MzsgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgLSByZWcKJiM0MzsKJiM0MzsgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtICYjMzQ7I2FkZHJlc3MtY2VsbHMmIzM0OwomIzQzOyAgLSAmIzM0OyNzaXplLWNlbGxzJiMzNDsKJiM0MzsgIC0gY2xvY2tzCiYjNDM7ICAtIGNsb2NrLW5hbWVzCiYjNDM7ICAtIHBoeXMKJiM0MzsgIC0gcGh5LW5hbWVzCiYjNDM7ICAtIHBvd2VyLWRvbWFpbnMKJiM0MzsKJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvY2xvY2svcmszNTY4LWNydS5oJmd0OwomIzQzOyAgICAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvcG93ZXIvcmszNTY4LXBvd2VyLmgmZ3Q7CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9waHkvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7ICAgIHBjc0BmZGEwMDAwMCB7CiYjNDM7ICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3MmIzM0OzsKJiM0MzsgICAgICByZWcgPSAmbHQ7MHhmZGEwMDAwMCAweDIwMDAwMCZndDs7CiYjNDM7ICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgY2xvY2tzID0gJmx0OyZhbXA7Y3J1IFBDTEtfWFBDUyZndDssICZsdDsmYW1wO2NydSBDTEtfWFBDU19FRUUmZ3Q7OwomIzQzOyAgICAgIGNsb2NrLW5hbWVzID0gJiMzNDtjc3ImIzM0OywgJiMzNDtlZWUmIzM0OzsKJiM0MzsgICAgICBwaHlzID0gJmx0OyZhbXA7Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUkmZ3Q7OwomIzQzOyAgICAgIHBoeS1uYW1lcyA9ICYjMzQ7c2VyZGVzJiMzNDs7CiYjNDM7ICAgICAgcG93ZXItZG9tYWlucyA9ICZsdDsmYW1wO3Bvd2VyIFJLMzU2OF9QRF9QSVBFJmd0OzsKJiM0MzsKJiM0MzsgICAgICBwY3MtbWlpQDAgewomIzQzOyAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgIH07CiYjNDM7ICAgIH07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbAppbmRleCAzNzliMDhiZDllOTdhLi44ZTg5OGJjZTlhZjczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWwKQEAgLTgwLDYgJiM0Mzs4MCwxNSBAQCBwcm9wZXJ0aWVzOgogICAgIGRlc2NyaXB0aW9uOgogICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuCiAKJiM0MzsgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMgomIzQzOyAgICBlbnVtOiBbMCwgMV0KJiM0MzsgICAgZGVmYXVsdDogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBTZWxlY3QgZ21hYzAgb3IgZ21hYzEgdG8gYmUgdXNlZCBhcyBTR01JSSBjb250cm9sbGVyLgomIzQzOyAgICAgIFRoZSBoYXJkd2FyZSByZXNldCB2YWx1ZSBpcyBHTUFDMSAoMSkuIFNldCB0aGlzIHRvIDAgdG8gcm91dGUKJiM0MzsgICAgICBTR01JSSB0byBHTUFDMC4KJiM0MzsKICAgJiMzNDsjcGh5LWNlbGxzJiMzNDs6CiAgICAgY29uc3Q6IDEKIApAQCAtMTA1LDYgJiM0MzsxMTQsMTAgQEAgYWxsT2Y6CiAgICAgICAgICAgbWF4SXRlbXM6IDEKICAgICAgICAgcmVzZXQtbmFtZXM6CiAgICAgICAgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IHRydWUKJiM0MzsgICAgZWxzZToKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogZmFsc2UKICAgLSBpZjoKICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgIGNvbXBhdGlibGU6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGZjMzIwYjM3MzY1NmYuLmRkYTRkMjExYjdkYjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0yMzczOCw2ICYjNDM7MjM3MzgsMTUgQEAgUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3JvY2tjaGlwLHJrMzU3Ni1zYWkueWFtbAogRjoJc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX3NhaS4qCiAKJiM0MztST0NLQ0hJUCBYUENTIERSSVZFUgomIzQzO006CUNvaWEgUHJhbnQgJmx0O2NvaWFwcmFudEBnbWFpbC5jb20mZ3Q7CiYjNDM7TDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwomIzQzO0w6CWxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYwomIzQzO0Y6CWluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmgKJiM0MzsKIFJPQ0tFUiBEUklWRVIKIE06CUppcmkgUGlya28gJmx0O2ppcmlAcmVzbnVsbGkudXMmZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0cyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzCmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzCkBAIC0zLDYgJiM0MzszLDcgQEAKIC9kdHMtdjEvOwogCiAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7ZHQtYmluZGluZ3MvcGluY3RybC9yb2NrY2hpcC5oJmd0OwogI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O3JrMzU2OC5kdHNpJiMzNDsKQEAgLTI0Miw2ICYjNDM7MjQzLDcgQEAgJmFtcDtjb21icGh5MSB7CiAKICZhbXA7Y29tYnBoeTIgewogCXN0YXR1cyA9ICYjMzQ7b2theSYjMzQ7OwomIzQzOwlyb2NrY2hpcCxzZ21paS1tYWMtc2VsID0gJmx0OzAmZ3Q7OwogfTsKIAogJmFtcDtjcHUwIHsKQEAgLTI2MCw5ICYjNDM7MjYyLDE4IEBAICZhbXA7Y3B1MyB7CiAJY3B1LXN1cHBseSA9ICZsdDsmYW1wO3ZkZF9jcHUmZ3Q7OwogfTsKIAotLyogTW90b3Jjb21tIFlUODUyMVNDIExBTiBwb3J0IChyZXF1aXJlIFNHTUlJKSAqLwomIzQzOy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqLwogJmFtcDtnbWFjMCB7Ci0Jc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwomIzQzOwlhc3NpZ25lZC1jbG9ja3MgPSAmbHQ7JmFtcDtjcnUgU0NMS19HTUFDMF9SWF9UWCZndDs7CiYjNDM7CWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSAmbHQ7JmFtcDt4cGNzX2dtYWMwX2NsayZndDs7CiYjNDM7CXBjcy1oYW5kbGUgPSAmbHQ7JmFtcDt4cGNzX21paTAmZ3Q7OwomIzQzOwltYW5hZ2VkID0gJiMzNDtpbi1iYW5kLXN0YXR1cyYjMzQ7OwomIzQzOwlwaHktaGFuZGxlID0gJmx0OyZhbXA7c2dtaWlfcGh5Jmd0OzsKJiM0MzsJcGh5LW1vZGUgPSAmIzM0O3NnbWlpJiMzNDs7CiYjNDM7CXBoeS1zdXBwbHkgPSAmbHQ7JmFtcDt2Y2NfM3YzJmd0OzsKJiM0MzsJcGluY3RybC1uYW1lcyA9ICYjMzQ7ZGVmYXVsdCYjMzQ7OwomIzQzOwlwaW5jdHJsLTAgPSAmbHQ7JmFtcDtnbWFjMF9taWltJmd0OzsKJiM0MzsJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiB9OwogCiAvKiBNb3RvcmNvbW0gWVQ4NTIxU0MgV0FOIHBvcnQgKi8KQEAgLTM0MSw2ICYjNDM7MzUyLDM2IEBAICZhbXA7aTJzMF84Y2ggewogCXN0YXR1cyA9ICYjMzQ7b2theSYjMzQ7OwogfTsKIAomIzQzOyZhbXA7bWRpbzAgewomIzQzOwlzZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyJiMzNDs7CiYjNDM7CQlyZWcgPSAmbHQ7MHgzJmd0OzsKJiM0MzsJCW1heC1zcGVlZCA9ICZsdDsxMDAwJmd0OzsKJiM0MzsJCXJlc2V0LWFzc2VydC11cyA9ICZsdDsyMDAwMCZndDs7CiYjNDM7CQlyZXNldC1kZWFzc2VydC11cyA9ICZsdDsxMDAwMDAmZ3Q7OwomIzQzOwkJcmVzZXQtZ3Bpb3MgPSAmbHQ7JmFtcDtncGlvMyBSS19QQzYgR1BJT19BQ1RJVkVfTE9XJmd0OzsKJiM0MzsKJiM0MzsJCWxlZHMgewomIzQzOwkJCSNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOwkJCSNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOwkJCWxlZEAxIHsKJiM0MzsJCQkJcmVnID0gJmx0OzEmZ3Q7OwomIzQzOwkJCQljb2xvciA9ICZsdDtMRURfQ09MT1JfSURfQU1CRVImZ3Q7OwomIzQzOwkJCQlmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7CQkJCWRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsJCQl9OwomIzQzOwomIzQzOwkJCWxlZEAyIHsKJiM0MzsJCQkJcmVnID0gJmx0OzImZ3Q7OwomIzQzOwkJCQljb2xvciA9ICZsdDtMRURfQ09MT1JfSURfR1JFRU4mZ3Q7OwomIzQzOwkJCQlmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47CiYjNDM7CQkJCWRlZmF1bHQtc3RhdGUgPSAmIzM0O2tlZXAmIzM0OzsKJiM0MzsJCQl9OwomIzQzOwkJfTsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwogJmFtcDttZGlvMSB7CiAJcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7CiAJCWNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZWVlODAyLjMtYzIyJiMzNDs7CkBAIC0zNTAsNiAmIzQzOzM5MSwyNSBAQCByZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHsKIAkJcmVzZXQtZ3Bpb3MgPSAmbHQ7JmFtcDtncGlvNCBSS19QQzAgR1BJT19BQ1RJVkVfTE9XJmd0OzsKIAkJcngtaW50ZXJuYWwtZGVsYXktcHMgPSAmbHQ7MTUwMCZndDs7CiAJCXR4LWludGVybmFsLWRlbGF5LXBzID0gJmx0OzE1MDAmZ3Q7OwomIzQzOwomIzQzOwkJbGVkcyB7CiYjNDM7CQkJI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7CQkJI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7CiYjNDM7CQkJbGVkQDEgewomIzQzOwkJCQlyZWcgPSAmbHQ7MSZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9BTUJFUiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CiYjNDM7CQkJbGVkQDIgewomIzQzOwkJCQlyZWcgPSAmbHQ7MiZndDs7CiYjNDM7CQkJCWNvbG9yID0gJmx0O0xFRF9DT0xPUl9JRF9HUkVFTiZndDs7CiYjNDM7CQkJCWZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX1dBTjsKJiM0MzsJCQkJZGVmYXVsdC1zdGF0ZSA9ICYjMzQ7a2VlcCYjMzQ7OwomIzQzOwkJCX07CiYjNDM7CQl9OwogCX07CiB9OwogCkBAIC01ODYsMyAmIzQzOzY0NiwxMyBAQCAmYW1wO3hpbjMyayB7CiAJcGluY3RybC1uYW1lcyA9ICYjMzQ7ZGVmYXVsdCYjMzQ7OwogCXBpbmN0cmwtMCA9ICZsdDsmYW1wO2NsazMya19vdXQxJmd0OzsKIH07CiYjNDM7CiYjNDM7JmFtcDt4cGNzIHsKJiM0MzsJc3RhdHVzID0gJiMzNDtva2F5JiMzNDs7CiYjNDM7CXBoeXMgPSAmbHQ7JmFtcDtjb21icGh5MiBQSFlfVFlQRV9TR01JSSZndDs7CiYjNDM7CXBoeS1uYW1lcyA9ICYjMzQ7c2VyZGVzJiMzNDs7CiYjNDM7fTsKJiM0MzsKJiM0MzsmYW1wO3hwY3NfbWlpMCB7CiYjNDM7CXN0YXR1cyA9ICYjMzQ7b2theSYjMzQ7OwomIzQzO307CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaQppbmRleCAzYmM2NTNmMDI3ZjFmLi45ODllMTY0YzBlYjM5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kKQEAgLTExMCw2ICYjNDM7MTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHsKIAkJc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwogCX07CiAKJiM0MzsJeHBjczogcGNzQGZkYTAwMDAwIHsKJiM0MzsJCWNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC14cGNzJiMzNDs7CiYjNDM7CQkjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsJCSNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwkJcmVnID0gJmx0OzB4MCAweGZkYTAwMDAwIDB4MCAweDIwMDAwMCZndDs7CiYjNDM7CQljbG9ja3MgPSAmbHQ7JmFtcDtjcnUgUENMS19YUENTJmd0OywgJmx0OyZhbXA7Y3J1IENMS19YUENTX0VFRSZndDs7CiYjNDM7CQljbG9jay1uYW1lcyA9ICYjMzQ7Y3NyJiMzNDssICYjMzQ7ZWVlJiMzNDs7CiYjNDM7CQlwb3dlci1kb21haW5zID0gJmx0OyZhbXA7cG93ZXIgUkszNTY4X1BEX1BJUEUmZ3Q7OwomIzQzOwkJc3RhdHVzID0gJiMzNDtkaXNhYmxlZCYjMzQ7OwomIzQzOwomIzQzOwkJeHBjc19taWkwOiBwY3MtbWlpQDAgewomIzQzOwkJCXJlZyA9ICZsdDswJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJeHBjc19taWkxOiBwY3MtbWlpQDEgewomIzQzOwkJCXJlZyA9ICZsdDsxJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJeHBjc19taWkyOiBwY3MtbWlpQDIgewomIzQzOwkJCXJlZyA9ICZsdDsyJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwomIzQzOwkJeHBjc19taWkzOiBwY3MtbWlpQDMgewomIzQzOwkJCXJlZyA9ICZsdDszJmd0OzsKJiM0MzsJCQlzdGF0dXMgPSAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7CQl9OwomIzQzOwl9OwomIzQzOwomIzQzOwl4cGNzX2dtYWMwX2NsazogeHBjcy1nbWFjMC1jbG9jayB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1jbG9jayYjMzQ7OwomIzQzOwkJY2xvY2stZnJlcXVlbmN5ID0gJmx0OzEyNTAwMDAwMCZndDs7CiYjNDM7CQljbG9jay1vdXRwdXQtbmFtZXMgPSAmIzM0O2Nsa19nbWFjMF94cGNzX21paSYjMzQ7OwomIzQzOwkJI2Nsb2NrLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwl9OwomIzQzOwomIzQzOwl4cGNzX2dtYWMxX2NsazogeHBjcy1nbWFjMS1jbG9jayB7CiYjNDM7CQljb21wYXRpYmxlID0gJiMzNDtmaXhlZC1jbG9jayYjMzQ7OwomIzQzOwkJY2xvY2stZnJlcXVlbmN5ID0gJmx0OzEyNTAwMDAwMCZndDs7CiYjNDM7CQljbG9jay1vdXRwdXQtbmFtZXMgPSAmIzM0O2Nsa19nbWFjMV94cGNzX21paSYjMzQ7OwomIzQzOwkJI2Nsb2NrLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwl9OwomIzQzOwogCXBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7CiAJCWNvbXBhdGlibGUgPSAmIzM0O3JvY2tjaGlwLHJrMzU2OC1waXBlLXBoeS1ncmYmIzM0OywgJiMzNDtzeXNjb24mIzM0OzsKIAkJcmVnID0gJmx0OzB4MCAweGZkYzcwMDAwIDB4MCAweDEwMDAmZ3Q7OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcKaW5kZXggZTNkZDVhZGRhNWFjYS4uNTA4OGFjYzA2OTgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnCkBAIC0xNzAsNiAmIzQzOzE3MCw3IEBAIGNvbmZpZyBEV01BQ19ST0NLQ0hJUAogCWRlZmF1bHQgQVJDSF9ST0NLQ0hJUAogCWRlcGVuZHMgb24gT0YgJmFtcDsmYW1wOyAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxFX1RFU1QpCiAJc2VsZWN0IE1GRF9TWVNDT04KJiM0MzsJc2VsZWN0IFBDU19YUENTX1JPQ0tDSElQCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYwppbmRleCBmNWY5ZmE2N2VjZDc3Li5mZDVmMDFjODk0MWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMKQEAgLTYwMywxMyAmIzQzOzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCkKIAlwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtuZWVkc19yZXNldCA9IHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlOwomIzQzOwlzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7CiYjNDM7CWludCBhZGRyOwomIzQzOwomIzQzOwlkZXZub2RlID0gZGV2X2Z3bm9kZShwcml2LSZndDtkZXZpY2UpOwomIzQzOwomIzQzOwlpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgJiMzNDtwY3MtaGFuZGxlJiMzNDspKSB7CiYjNDM7CQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7CiYjNDM7CQlmd25vZGVfaGFuZGxlX3B1dChwY3Nub2RlKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWFkZHIgPSBmZnMocHJpdi0mZ3Q7cGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2spIC0gMTsKJiM0MzsJCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKElTX0VSUih4cGNzKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKHhwY3MpOwomIzQzOwomIzQzOwl4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtJmd0O3BsYXQtJmd0O211bHRfZmFjdF8xMDBucyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7eHBjcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJeHBjc19kZXN0cm95KHByaXYtJmd0O2h3LSZndDt4cGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIHsKLQkvKiBwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmUKLQkgKiBzaG91bGQgYWx3YXlzIGJlIGFuIFhQQ1MuIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGFsd2F5cwotCSAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuCi0JICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKIAlyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LSZndDtody0mZ3Q7eHBjcyk7CiB9CiAKQEAgLTczMyw2ICYjNDM7NzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCSAgICBwbGF0LSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHsKIAkJcGxhdC0mZ3Q7bWRpb19idXNfZGF0YS0mZ3Q7cGNzX21hc2sgPSBCSVRfVTMyKElOVEVMX01HQkVfWFBDU19BRERSKTsKIAkJcGxhdC0mZ3Q7ZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0OwomIzQzOwkJcGxhdC0mZ3Q7cGNzX2V4aXQgPSBpbnRlbF9tZ2JlX3Bjc19leGl0OwogCQlwbGF0LSZndDtzZWxlY3RfcGNzID0gaW50ZWxfbWdiZV9zZWxlY3RfcGNzOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jCmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMKQEAgLTgxLDggJiM0Mzs4MSwxMSBAQCBzdGF0aWMgaW50IHJlbmVzYXNfZ21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0JaWYgKHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3BjcykKLQkJbWlpY19kZXN0cm95KHByaXYtJmd0O2h3LSZndDtwaHlsaW5rX3Bjcyk7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmMKaW5kZXggOGQ3MDQyZTY4OTI2MS4uZTQ3Y2ExYmVjNWI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jCkBAIC0yMCw2ICYjNDM7MjAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY3MvcGNzLXhwY3MtcmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7c3RtbWFjX3BsYXRmb3JtLmgmIzM0OwpAQCAtNDcsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHsKIAl2b2lkICgqc2V0X3RvX3JnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpOwogCXZvaWQgKCpzZXRfdG9fcm1paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpOwomIzQzOwl2b2lkICgqc2V0X3RvX3NnbWlpKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CiAJaW50ICgqc2V0X3NwZWVkKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdiwKIAkJCSBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQpOwogCXZvaWQgKCppbnRlZ3JhdGVkX3BoeV9wb3dlcnVwKShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdik7CkBAIC02Myw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMgewogCWJvb2wgY2xvY2tfZ3JmX3JlZ19pbl9waHA7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAJYm9vbCBwaHBfZ3JmX3JlcXVpcmVkOwogCWJvb2wgcmVnc192YWxpZDsKIAl1MzIgcmVnc1tdOwpAQCAtOTgsNiAmIzQzOzEwMSw3IEBAIHN0cnVjdCBya19wcml2X2RhdGEgewogCWJvb2wgaW50ZWdyYXRlZF9waHk7CiAJYm9vbCBzdXBwb3J0c19yZ21paTsKIAlib29sIHN1cHBvcnRzX3JtaWk7CiYjNDM7CWJvb2wgc3VwcG9ydHNfc2dtaWk7CiAKIAlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsKIAlpbnQgbnVtX2Nsa3M7CkBAIC04MDksNiAmIzQzOzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHsKICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xCQkweDAzOGMKIAogLyogUkszNTY4X0dSRl9HTUFDMF9DT04xICZhbXA7JmFtcDsgUkszNTY4X0dSRl9HTUFDMV9DT04xICovCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkJCUdSRl9DTFJfQklUKDcpCiYjNDM7I2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1NHTUlJX1FTR01JSQkJR1JGX0JJVCg3KQogI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkwJCQlHUkZfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTF9DTFIJCUdSRl9DTFJfQklUKDMpCiAjZGVmaW5lIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUJCUdSRl9CSVQoMSkKQEAgLTg1MSwxOCAmIzQzOzg1NywzMiBAQCBzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3JnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LAogCQkgICAgIFJLMzU2OF9HTUFDX0NMS19UWF9ETF9DRkcodHhfZGVsYXkpKTsKIAogCXJlZ21hcF93cml0ZShic3BfcHJpdi0mZ3Q7Z3JmLCBjb24xLAomIzQzOwkJICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfAogCQkgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfAogCQkgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmszNTY4X3NldF90b19zZ21paShzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdikKJiM0Mzt7CiYjNDM7CXUzMiBjb24xOwomIzQzOwomIzQzOwljb24xID0gKGJzcF9wcml2LSZndDtpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6CiYjNDM7CQkJCSAgICAgUkszNTY4X0dSRl9HTUFDMF9DT04xOwomIzQzOwomIzQzOwlyZWdtYXBfd3JpdGUoYnNwX3ByaXYtJmd0O2dyZiwgY29uMSwgUkszNTY4X0dNQUNfTU9ERV9TR01JSV9RU0dNSUkpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTY4X29wcyA9IHsKIAkuaW5pdCA9IHJrMzU2OF9pbml0LAogCS5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLAomIzQzOwkuc2V0X3RvX3NnbWlpID0gcmszNTY4X3NldF90b19zZ21paSwKJiM0MzsKIAkuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsCiAKIAkuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLAogCiAJLnN1cHBvcnRzX3JtaWkgPSB0cnVlLAomIzQzOwkuc3VwcG9ydHNfc2dtaWkgPSB0cnVlLAogCiAJLnJlZ3NfdmFsaWQgPSB0cnVlLAogCS5yZWdzID0gewpAQCAtMTIwOCw2ICYjNDM7MTIyOCw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsICYjMzQ7ZmFpbCB0byBkaXNhYmxlIHBoeS1zdXBwbHlcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcmtfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtJmd0O2RldmljZS0mZ3Q7b2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTsKJiM0MzsJc3RydWN0IGR3X3hwY3MgKnhwY3M7CiYjNDM7CiYjNDM7CXBjc19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgJiMzNDtwY3MtaGFuZGxlJiMzNDssIDApOwomIzQzOwlpZiAoIXBjc19ub2RlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXhwY3MgPSB4cGNzX3JrX2NyZWF0ZShwcml2LSZndDtkZXZpY2UsIHBjc19ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQocGNzX25vZGUpOwomIzQzOwlpZiAoSVNfRVJSKHhwY3MpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoeHBjcyk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJrX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7CiYjNDM7CXByaXYtJmd0O2h3LSZndDt4cGNzID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiYjNDM7CQkJCQkgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKJiM0Mzt7CiYjNDM7CWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi0mZ3Q7aHctJmd0O3hwY3MpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkJCSAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LAogCQkJCQkgIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyAqb3BzKQpAQCAtMTMzMCw2ICYjNDM7MTM4Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmtfcHJpdl9kYXRhICpya19nbWFjX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAKIAlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfcmdtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fcmdtaWk7CiAJYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3JtaWkgfHwgISFvcHMtJmd0O3NldF90b19ybWlpOwomIzQzOwlic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkgPSBvcHMtJmd0O3N1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLSZndDtzZXRfdG9fc2dtaWk7CiAKIAlpZiAob3BzLSZndDtpbml0KSB7CiAJCXJldCA9IG9wcy0mZ3Q7aW5pdChic3BfcHJpdik7CkBAIC0xMzYxLDYgJiM0MzsxNDE5LDEwIEBAIHN0YXRpYyBpbnQgcmtfZ21hY19jaGVja19vcHMoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmICghYnNwX3ByaXYtJmd0O3N1cHBvcnRzX3JtaWkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJaWYgKCFic3BfcHJpdi0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGJzcF9wcml2LSZndDtkZXYsCiAJCQkmIzM0O3Vuc3VwcG9ydGVkIGludGVyZmFjZSAlZCYjMzQ7LCBic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKQEAgLTEzNzksMTYgJiM0MzsxNDQxLDE5IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKJiM0MzsJcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJCWdvdG8gc2V0X21vZGU7CiYjNDM7CiAJcmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKTsKIAlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlpbnRmID0gcmV0OwogCi0JcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWYgKGJzcF9wcml2LSZndDtnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8CiAJICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKSB7CiAJCS8qIElmIGRlZmluZWQsIGVuY29kZSB0aGUgcGh5X2ludGZfc2VsIHZhbHVlICovCkBAIC0xMzk5LDEwICYjNDM7MTQ2NCw4IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wb3dlcnVwKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KQogCQkJCSAgICAgIGJzcF9wcml2LSZndDtnbWFjX3JtaWlfbW9kZV9tYXNrKTsKIAogCQlyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCiAJaWYgKGJzcF9wcml2LSZndDtjbG9jay5ybWlpX21vZGVfbWFzaykgewpAQCAtMTQxMCwxMyAmIzQzOzE0NzMsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCQkJICAgICBic3BfcHJpdi0mZ3Q7Y2xvY2sucm1paV9tb2RlX21hc2spOwogCiAJCXJldCA9IHJrX3dyaXRlX2Nsb2NrX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7Ci0JCWlmIChyZXQgJmx0OyAwKSB7Ci0JCQlnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gY2xrX2Rpc2FibGU7CiAJfQogCi0JLypybWlpIG9yIHJnbWlpKi8KJiM0MztzZXRfbW9kZToKJiM0MzsJLyogcm1paSwgcmdtaWksIHNnbWlpICovCiAJc3dpdGNoIChic3BfcHJpdi0mZ3Q7cGh5X2lmYWNlKSB7CiAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6CiAJCWRldl9pbmZvKGRldiwgJiMzNDtpbml0IGZvciBSR01JSVxuJiMzNDspOwpAQCAtMTQ0NywxNSAmIzQzOzE1MDksMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWlmIChic3BfcHJpdi0mZ3Q7b3BzLSZndDtzZXRfdG9fcm1paSkKIAkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19ybWlpKGJzcF9wcml2KTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O2luaXQgZm9yIFNHTUlJXG4mIzM0Oyk7CiYjNDM7CQlpZiAoYnNwX3ByaXYtJmd0O29wcy0mZ3Q7c2V0X3RvX3NnbWlpKQomIzQzOwkJCWJzcF9wcml2LSZndDtvcHMtJmd0O3NldF90b19zZ21paShic3BfcHJpdik7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGRldiwgJiMzNDtOTyBpbnRlcmZhY2UgZGVmaW5lZCFcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGNsa19kaXNhYmxlOwogCX0KIAogCXJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTsKLQlpZiAocmV0KSB7Ci0JCWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwotCQlyZXR1cm4gcmV0OwotCX0KJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2xrX2Rpc2FibGU7CiAKIAlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CiAKQEAgLTE0NjMsNiAmIzQzOzE1MzAsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCiAJCWJzcF9wcml2LSZndDtvcHMtJmd0O2ludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xrX2Rpc2FibGU6CiYjNDM7CWdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBya19nbWFjX3Bvd2VyZG93bihzdHJ1Y3QgcmtfcHJpdl9kYXRhICpnbWFjKQpAQCAtMTQ4Niw2ICYjNDM7MTU1Nyw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsCiAKIAlpZiAocmstJmd0O3N1cHBvcnRzX3JtaWkpCiAJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChyay0mZ3Q7c3VwcG9ydHNfc2dtaWkpCiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTsKIH0KIAogc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSwKQEAgLTE2MDIsNiAmIzQzOzE2NzYsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcGxhdF9kYXQtJmd0O3N1c3BlbmQgPSBya19nbWFjX3N1c3BlbmQ7CiAJcGxhdF9kYXQtJmd0O3Jlc3VtZSA9IHJrX2dtYWNfcmVzdW1lOwogCiYjNDM7CWlmIChwbGF0X2RhdC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJCS8qIFNHTUlJIGNsb2NrIGFsd2F5cyBydW5zIGF0IDEyNSBNSHogKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtzZXRfY2xrX3R4X3JhdGUgPSBOVUxMOwomIzQzOwomIzQzOwkJLyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi8KJiM0MzsJCXBsYXRfZGF0LSZndDtkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwbGF0X2RhdC0mZ3Q7cGNzX2luaXQgPSBya19wY3NfaW5pdDsKJiM0MzsJCXBsYXRfZGF0LSZndDtwY3NfZXhpdCA9IHJrX3Bjc19leGl0OwomIzQzOwkJcGxhdF9kYXQtJmd0O3NlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzOwomIzQzOwl9CiYjNDM7CiAJcGxhdF9kYXQtJmd0O2JzcF9wcml2ID0gcmtfZ21hY19zZXR1cChwZGV2LCBwbGF0X2RhdCwgZGF0YSk7CiAJaWYgKElTX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpKQogCQlyZXR1cm4gUFRSX0VSUihwbGF0X2RhdC0mZ3Q7YnNwX3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jCmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMKQEAgLTM1LDggJiM0MzszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogCiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLQlpZiAocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKQotCQltaWljX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1paWNfZGVzdHJveShwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpOwomIzQzOwlwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MgPSBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jCmluZGV4IDFkN2YwYTU3ZDI4ODkuLjZkNGJjMWZlOGY3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMKQEAgLTUzOSw4ICYjNDM7NTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiAKIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewotCWlmIChwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCi0JCWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJaWYgKCFwcml2LSZndDtody0mZ3Q7cGh5bGlua19wY3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWx5bnhfcGNzX2Rlc3Ryb3kocHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzKTsKJiM0MzsJcHJpdi0mZ3Q7aHctJmd0O3BoeWxpbmtfcGNzID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqc29jZnBnYV9kd21hY19zZWxlY3RfcGNzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jCmluZGV4IGFmZTk4ZmY1YmRjYjAuLmQyZjc3ZjBjMjIzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtNDI2LDM2ICYjNDM7NDI2LDE1IEBAIGludCBzdG1tYWNfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmRldm5vZGUsICpwY3Nub2RlOwotCXN0cnVjdCBkd194cGNzICp4cGNzID0gTlVMTDsKLQlpbnQgYWRkciwgcmV0OwotCi0JZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi0mZ3Q7ZGV2aWNlKTsKLQotCWlmIChwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdCkgewotCQlyZXQgPSBwcml2LSZndDtwbGF0LSZndDtwY3NfaW5pdChwcml2KTsKLQl9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7KSkgewotCQlwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsICYjMzQ7cGNzLWhhbmRsZSYjMzQ7LCAwKTsKLQkJeHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTsKLQkJZndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgaWYgKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEgJmFtcDsmYW1wOwotCQkgICBwcml2LSZndDtwbGF0LSZndDttZGlvX2J1c19kYXRhLSZndDtwY3NfbWFzaykgewotCQlhZGRyID0gZmZzKHByaXYtJmd0O3BsYXQtJmd0O21kaW9fYnVzX2RhdGEtJmd0O3Bjc19tYXNrKSAtIDE7Ci0JCXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtJmd0O21paSwgYWRkcik7Ci0JCXJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTsKLQl9IGVsc2UgewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3BsYXQtJmd0O3Bjc19pbml0KQogCQlyZXR1cm4gMDsKLQl9CiAKJiM0MzsJcmV0ID0gcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2luaXQocHJpdik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUocHJpdi0mZ3Q7ZGV2aWNlLCByZXQsICYjMzQ7Tm8geFBDUyBmb3VuZFxuJiMzNDspOwogCi0JaWYgKHhwY3MpCi0JCXhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi0mZ3Q7cGxhdC0mZ3Q7bXVsdF9mYWN0XzEwMG5zKTsKLQotCXByaXYtJmd0O2h3LSZndDt4cGNzID0geHBjczsKLQogCXJldHVybiAwOwogfQogCkBAIC00NjMsMTQgJiM0Mzs0NDIsMTAgQEAgdm9pZCBzdG1tYWNfcGNzX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JaWYgKHByaXYtJmd0O3BsYXQtJmd0O3Bjc19leGl0KQotCQlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKLQotCWlmICghcHJpdi0mZ3Q7aHctJmd0O3hwY3MpCiYjNDM7CWlmICghcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGNzX2V4aXQpCiAJCXJldHVybjsKIAotCXhwY3NfZGVzdHJveShwcml2LSZndDtody0mZ3Q7eHBjcyk7Ci0JcHJpdi0mZ3Q7aHctJmd0O3hwY3MgPSBOVUxMOwomIzQzOwlwcml2LSZndDtwbGF0LSZndDtwY3NfZXhpdChwcml2KTsKIH0KIAogc3RydWN0IHN0bW1hY19jbGtfcmF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCmluZGV4IGU0MTdmZDY2ZjY2MGEuLjg4YmM0MDc5MWU2OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCkBAIC0xMiw2ICYjNDM7MTIsMjkgQEAgY29uZmlnIFBDU19YUENTCiAJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBhbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXMKIAkgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy4KIAomIzQzO2lmIFBDU19YUENTCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1BMQVRGT1JNCiYjNDM7CXRyaXN0YXRlICYjMzQ7R2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydCYjMzQ7CiYjNDM7CWRlZmF1bHQgUENTX1hQQ1MKJiM0MzsJaGVscAomIzQzOwkgIEdlbmVyaWMgRFdYUENTIGRyaXZlciBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJiMzOTt0IHJlcXVpcmUgYW55CiYjNDM7CSAgcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybQomIzQzOwkgIGRhdGEgZm9yIHNldHVwLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuCiYjNDM7CiYjNDM7Y29uZmlnIFBDU19YUENTX1JPQ0tDSElQCiYjNDM7CXRyaXN0YXRlICYjMzQ7Um9ja2NoaXAgWFBDUyBjb250cm9sbGVyIHN1cHBvcnQmIzM0OwomIzQzOwlkZWZhdWx0IEFSQ0hfUk9DS0NISVAKJiM0MzsJZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVCkKJiM0MzsJaGVscAomIzQzOwkgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLgomIzQzOwomIzQzOwkgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS4KJiM0MzsKJiM0MztlbmRpZiAjIFBDU19YUENTCiYjNDM7CiBjb25maWcgUENTX0xZTlgKIAl0cmlzdGF0ZQogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZQppbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlCkBAIC0xLDEwICYjNDM7MSwxMSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnMKIAotcGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFwKLQkJCQkgICBwY3MteHBjcy1ueHAubyBwY3MteHBjcy13eC5vCiYjNDM7cGNzX3hwY3MtJChDT05GSUdfUENTX1hQQ1MpCTo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gubwogCiBvYmotJChDT05GSUdfUENTX1hQQ1MpCQkmIzQzOz0gcGNzX3hwY3MubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgJiM0Mzs9IHBjcy14cGNzLXBsYXQubwomIzQzO29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgJiM0Mzs9IHBjcy14cGNzLXJrLm8KIG9iai0kKENPTkZJR19QQ1NfTFlOWCkJCSYjNDM7PSBwY3MtbHlueC5vCiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSkJJiM0Mzs9IHBjcy1tdGstbHlueGkubwogb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpCSYjNDM7PSBwY3MtcnpuMS1taWljLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uNjhiY2FhMWE1Y2JiZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jCkBAIC0wLDAgJiM0MzsxLDU0MyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIEJhc2VkIG9uIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIFhQQ1MgcGxhdGZvcm0gZHJpdmVyLgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pbgomIzQzOyAqCiYjNDM7ICogQWRhcHRlZCBmb3IgUm9ja2NoaXAgU29Dcywgd2l0aCByZWZlcmVuY2UgdG8gdGhlIFJvY2tjaGlwIE9FTSBkcml2ZXIuCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnQKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX3BsYXRmb3JtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcG1fZG9tYWluLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BtX3J1bnRpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Bjcy14cGNzLmgmIzM0OwomIzQzOwomIzQzO3N0cnVjdCBkd194cGNzX3JrIHsKJiM0MzsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1czsKJiM0MzsJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKJiM0MzsJc3RydWN0IHBoeSAqc2VyZGVzX3BoeTsKJiM0MzsJc3RydWN0IGNsayAqY3NyX2NsazsKJiM0MzsJc3RydWN0IGNsayAqZWVlX2NsazsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBwdHJkaWZmX3QgeHBjc19ya19hZGRyX2Zvcm1hdChpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIEZJRUxEX1BSRVAoMHg3MDAwMCwgZGV2KSB8IEZJRUxEX1BSRVAoMHhmZmZmLCByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJcHRyZGlmZl90IGNzcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJY3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7CiYjNDM7CiYjNDM7CXJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRsKHB4cGNzLSZndDtyZWdfYmFzZSAmIzQzOyAoY3NyICZsdDsmbHQ7IDIpKSAmYW1wOyAweGZmZmY7CiYjNDM7CiYjNDM7CXBtX3J1bnRpbWVfcHV0KCZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2Rldik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9yZWcoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzLCBpbnQgZGV2LCBpbnQgcmVnLCB1MTYgdmFsKQomIzQzO3sKJiM0MzsJcHRyZGlmZl90IGNzcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJY3NyID0geHBjc19ya19hZGRyX2Zvcm1hdChkZXYsIHJlZyk7CiYjNDM7CiYjNDM7CXJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXdyaXRlbCh2YWwsIHB4cGNzLSZndDtyZWdfYmFzZSAmIzQzOyAoY3NyICZsdDsmbHQ7IDIpKTsKJiM0MzsKJiM0MzsJcG1fcnVudGltZV9wdXQoJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTEJMgomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTIJMwomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTMJNAomIzQzOyNkZWZpbmUgUk9DS0NISVBfTU1EX1BNQVBNRAk2CiYjNDM7I2RlZmluZSBST0NLQ0hJUF9NTURfTUlJCTcKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShpbnQgYWRkcikKJiM0Mzt7CiYjNDM7CXJldHVybiAhKGFkZHIgJmx0OyAwIHx8IGFkZHIgJmd0OyAzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGRldikgewomIzQzOwljYXNlIE1ESU9fTU1EX1BNQVBNRDoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EOwomIzQzOwljYXNlIE1ESU9fTU1EX1ZFTkQyOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVOWElPOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHJlYWQgcmVtYXBwaW5nIHRvIE1JSSBpcyBwZXJmb3JtZWQgYnkgSFcgKi8KJiM0MzsJc3dpdGNoIChhZGRyKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJOwomIzQzOwljYXNlIDE6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMjsKJiM0MzsJY2FzZSAzOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJc3dpdGNoIChkZXYpIHsKJiM0MzsJY2FzZSBNRElPX01NRF9QTUFQTUQ6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDsKJiM0MzsJY2FzZSBNRElPX01NRF9WRU5EMjoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0YWJsZSBvbmx5IG9uIE1JSSAqLwomIzQzOwlzd2l0Y2ggKHJlZykgewomIzQzOwljYXNlIERXX1ZSX01JSV9BTl9DVFJMOgomIzQzOwljYXNlIERXX1ZSX01JSV9BTl9JTlRSX1NUUzoKJiM0MzsJY2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMDoKJiM0MzsJY2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMToKJiM0MzsJY2FzZSBEV19WUl9NSUlfRElHX0NUUkwyOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGFkZHIpIHsKJiM0MzsJY2FzZSAwOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMTsKJiM0MzsJY2FzZSAyOgomIzQzOwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyOwomIzQzOwljYXNlIDM6CiYjNDM7CQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtJmd0O3ByaXY7CiYjNDM7CWludCBkZXY7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpOwomIzQzOwlpZiAoZGV2ICZsdDsgMCkKJiM0MzsJCXJldHVybiAweGZmZmY7CiYjNDM7CiYjNDM7CXJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtJmd0O3ByaXY7CiYjNDM7CWludCBkZXY7CiYjNDM7CiYjNDM7CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTsKJiM0MzsJaWYgKGRldiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2LCBpbnQgcmVnKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CWRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7CiYjNDM7CWlmIChkZXYgJmx0OyAwKQomIzQzOwkJcmV0dXJuIDB4ZmZmZjsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTsKJiM0MzsJaWYgKGRldiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkd194cGNzX3JrICp4cGNzX3JrX2NyZWF0ZV9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7CiYjNDM7CiYjNDM7CXB4cGNzID0gZGV2bV9remFsbG9jKCZhbXA7cGRldi0mZ3Q7ZGV2LCBzaXplb2YoKnB4cGNzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHhwY3MpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O3BkZXYgPSBwZGV2OwomIzQzOwomIzQzOwlkZXZfc2V0X2RydmRhdGEoJmFtcDtwZGV2LSZndDtkZXYsIHB4cGNzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHB4cGNzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O3NlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAmIzM0O3NlcmRlcyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7c2VyZGVzX3BoeSkpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtJmd0O3NlcmRlc19waHkpLAomIzQzOwkJCQkJJiMzNDtGYWlsZWQgdG8gZ2V0IFNlckRlcyBQSFlcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZih2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlwaHlfcG93ZXJfb2ZmKHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MzsJcGh5X2V4aXQocHhwY3MtJmd0O3NlcmRlc19waHkpOwomIzQzOwomIzQzOwlkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3B4cGNzLSZndDtwZGV2LSZndDtkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwb3dlciBkb21haW4gaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgZW5hYmxlZCwgd2hpY2ggYWxsb3dzIHVzIHRvCiYjNDM7CSAqIGR5bmFtaWNhbGx5IHR1cm4gdGhlIENTUiBjbG9jayBvbi9vZmYgdXNpbmcgUE0gd2hpbGUga2VlcGluZyB0aGUgUENTCiYjNDM7CSAqIHBvd2VyZWQgb24uCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIHRydWUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gcG93ZXIgb24gcG93ZXItZG9tYWluc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBwaHlfaW5pdChweHBjcy0mZ3Q7c2VyZGVzX3BoeSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBpbml0IFNlckRlcyBQSFlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gcG1fZG9tYWluOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9wb3dlcl9vbihweHBjcy0mZ3Q7c2VyZGVzX3BoeSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBwb3dlciBvbiBTZXJEZXMgUEhZXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIHNlcmRlc19waHk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb2ZmLCBweHBjcyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBTZXJEZXMgUEhZOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3NlcmRlc19waHk6CiYjNDM7CXBoeV9leGl0KHB4cGNzLSZndDtzZXJkZXNfcGh5KTsKJiM0MztwbV9kb21haW46CiYjNDM7CWRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgZmFsc2UpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9yZXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHB4cGNzLSZndDtwZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IHJlc291cmNlICpyZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiYjNDM7CWlmICghcmVzKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtObyByZWctc3BhY2UgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXNvdXJjZV9zaXplKHJlcykgJmx0OyBTWl8yTSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCByZWctc3BhY2Ugc2l6ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHhwY3MtJmd0O3JlZ19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7cmVnX2Jhc2UpKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHhwY3MtJmd0O3JlZ19iYXNlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeHBjc19ya19leGl0X2Nsayh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtweHBjcy0mZ3Q7cGRldi0mZ3Q7ZGV2OwomIzQzOwomIzQzOwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtJmd0O2VlZV9jbGspOwomIzQzOwomIzQzOwlwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O2Nzcl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAmIzM0O2NzciYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7Y3NyX2NsaykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtJmd0O2Nzcl9jbGspLAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIGdldCBDU1IgY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHhwY3MtJmd0O2VlZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAmIzM0O2VlZSYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcy0mZ3Q7ZWVlX2NsaykpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtJmd0O2VlZV9jbGspLAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIGdldCBFRUUgY2xvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHB4cGNzLSZndDtlZWVfY2xrKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CiYjNDM7CXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3NfcmtfZXhpdF9jbGssIHB4cGNzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIEVFRSBjbG9jazogJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHhwY3MtJmd0O3BkZXYtJmd0O2RldjsKJiM0MzsJc3RhdGljIGF0b21pY190IGlkID0gQVRPTUlDX0lOSVQoLTEpOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIDApOwomIzQzOwlpZiAoIWJ1cykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlidXMtJmd0O25hbWUgPSAmIzM0O1JvY2tjaGlwIERXIFhQQ1MgTUNJL0FQQjMmIzM0OzsKJiM0MzsJYnVzLSZndDtyZWFkID0geHBjc19ya19yZWFkX2MyMjsKJiM0MzsJYnVzLSZndDt3cml0ZSA9IHhwY3Nfcmtfd3JpdGVfYzIyOwomIzQzOwlidXMtJmd0O3JlYWRfYzQ1ID0geHBjc19ya19yZWFkX2M0NTsKJiM0MzsJYnVzLSZndDt3cml0ZV9jNDUgPSB4cGNzX3JrX3dyaXRlX2M0NTsKJiM0MzsJYnVzLSZndDtwaHlfbWFzayA9IH4wOwomIzQzOwlidXMtJmd0O3BhcmVudCA9IGRldjsKJiM0MzsJYnVzLSZndDtwcml2ID0gcHhwY3M7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGJ1cy0mZ3Q7aWQsIE1JSV9CVVNfSURfU0laRSwKJiM0MzsJCSAmIzM0O3JvY2tjaGlwX2R3eHBjcy0leCYjMzQ7LCBhdG9taWNfaW5jX3JldHVybigmYW1wO2lkKSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE1ESU8tYnVzIGhlcmUgc2VydmVzIGFzIGp1c3QgYSBiYWNrLWVuZCBlbmdpbmUgYWJzdHJhY3Rpbmcgb3V0CiYjNDM7CSAqIHRoZSBNRElPIGFuZCBNQ0kvQVBCMyBJTyBpbnRlcmZhY2VzIHV0aWxpemVkIGZvciB0aGUgUm9ja2NoaXAgRFdYUENTIENTUnMKJiM0MzsJICogYWNjZXNzLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlweHBjcy0mZ3Q7YnVzID0gYnVzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB4cGNzX3JrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXB4cGNzID0geHBjc19ya19jcmVhdGVfZGF0YShwZGV2KTsKJiM0MzsJaWYgKElTX0VSUihweHBjcykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihweHBjcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBYUENTIG1heSBiZSBhdHRhY2hlZCB0byBhIHBvd2VyIGRvbWFpbiAoZS5nLiBQRF9QSVBFKS4gVGhlIGRvbWFpbgomIzQzOwkgKiBtdXN0IGJlIHBvd2VyZWQgb24gYmVmb3JlIGFueSByZWdpc3RlciBhY2Nlc3MsIG90aGVyd2lzZSB0aGUgU29DIHdpbGwKJiM0MzsJICogdHJpZ2dlciBhIHN5bmNocm9ub3VzIGV4dGVybmFsIGFib3J0IChTRXJyb3IpLgomIzQzOwkgKgomIzQzOwkgKiBBY2Nlc3NpbmcgdGhlIFhQQ1MgcmVnaXN0ZXJzIGFsc28gcmVxdWlyZXMgYSBUWCBjbG9jayBmcm9tIHRoZSBTZXJEZXMsCiYjNDM7CSAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIHNvZnQgcmVzZXQuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfaW5pdChweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB4cGNzX3JrX2luaXRfcmVzKHB4cGNzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHhwY3NfcmtfaW5pdF9jbGsocHhwY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geHBjc19ya19pbml0X2J1cyhweHBjcyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeHBjc19ya19vZl9pZHNbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cm9ja2NoaXAscmszNTY4LXhwY3MmIzM0OyB9LAomIzQzOwl7IC8qIHNlbnRpbmVsICovIH0sCiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4cGNzX3JrX29mX2lkcyk7CiYjNDM7CiYjNDM7c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25wOwomIzQzOwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7CiYjNDM7CXN0cnVjdCBkd194cGNzICp4cGNzOwomIzQzOwl1MzIgcG9ydDsKJiM0MzsKJiM0MzsJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwomIzQzOwomIzQzOwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICYjMzQ7cmVnJiMzNDssICZhbXA7cG9ydCkpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKJiM0MzsKJiM0MzsJaWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZSgoaW50KXBvcnQpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiYjNDM7CiYjNDM7CS8qIFRoZSBYUENTIHBkZXYgaXMgYXR0YWNoZWQgdG8gdGhlIHBhcmVudCBub2RlICovCiYjNDM7CXBjc19ucCA9IG9mX2dldF9wYXJlbnQobnApOwomIzQzOwlpZiAoIXBjc19ucCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwomIzQzOwomIzQzOwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGNzX25wKSkgewomIzQzOwkJb2Zfbm9kZV9wdXQocGNzX25wKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghb2ZfbWF0Y2hfbm9kZSh4cGNzX3JrX29mX2lkcywgcGNzX25wKSkgewomIzQzOwkJb2Zfbm9kZV9wdXQocGNzX25wKTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBjc19ucCk7CiYjNDM7CW9mX25vZGVfcHV0KHBjc19ucCk7CiYjNDM7CWlmICghcGRldikKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwomIzQzOwomIzQzOwlkZXZpY2VfbG9jaygmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CXB4cGNzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiYjNDM7CWlmICghcHhwY3MgfHwgIXB4cGNzLSZndDtidXMpIHsKJiM0MzsJCWRldmljZV91bmxvY2soJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwkJcHV0X2RldmljZSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKJiM0MzsJfQomIzQzOwomIzQzOwl4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihweHBjcy0mZ3Q7YnVzLCAoaW50KXBvcnQpOwomIzQzOwlkZXZpY2VfdW5sb2NrKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUih4cGNzKSkgewomIzQzOwkJcHV0X2RldmljZSgmYW1wO3BkZXYtJmd0O2Rldik7CiYjNDM7CQlyZXR1cm4geHBjczsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV9saW5rX2FkZChkZXYsICZhbXA7cGRldi0mZ3Q7ZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7CiYjNDM7CQl4cGNzX2Rlc3Ryb3koeHBjcyk7CiYjNDM7CQlwdXRfZGV2aWNlKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtwZGV2LSZndDtkZXYpOwomIzQzOwlyZXR1cm4geHBjczsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19ya19jcmVhdGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CWNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy0mZ3Q7Y3NyX2Nsayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtJmd0O2Nzcl9jbGspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVGSU5FX1JVTlRJTUVfREVWX1BNX09QUyh4cGNzX3JrX3BtX29wcywKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCwKJiM0MzsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lLAomIzQzOwkJCSAgIE5VTEwpOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhwY3NfcmtfZHJpdmVyID0gewomIzQzOwkucHJvYmUgPSB4cGNzX3JrX3Byb2JlLAomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O3JrX3hwY3MtZHd4cGNzJiMzNDssCiYjNDM7CQkucG0gPSBwbV9wdHIoJmFtcDt4cGNzX3JrX3BtX29wcyksCiYjNDM7CQkub2ZfbWF0Y2hfdGFibGUgPSB4cGNzX3JrX29mX2lkcywKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1JvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q29pYSBQcmFudCAmbHQ7Y29pYXByYW50QGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCmluZGV4IDAzMzdlMmJjYzAxMjUuLjUwYjljZGY5NGZkYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jCkBAIC04MTYsOSAmIzQzOzgxNiwxNCBAQCBzdGF0aWMgaW50IHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLAogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiYjNDM7CS8qIENsZWFyIENMMzcgQU4gY29tcGxldGUgc3RhdHVzICovCiYjNDM7CXJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIERXX1ZSX01JSV9BTl9JTlRSX1NUUywgMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAlpZiAobmVnX21vZGUgPT0gUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEKQogCQlyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUiwKLQkJCQkgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CQkJCSBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwOTMsMTAgJiM0MzsxMDk4LDE1IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovCi0JaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkKJiM0MzsJaWYgKHN0YXRlLSZndDthbl9jb21wbGV0ZSkgewomIzQzOwkJLyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqLwogCQl4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApOwogCiYjNDM7CQkvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqLwomIzQzOwkJeHBjc19tb2RpZnkoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLCBCTUNSX0FOUkVTVEFSVCwKJiM0MzsJCQkgICAgQk1DUl9BTlJFU1RBUlQpOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jIGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMKQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwwX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwxX3NlbDsKJiM0MzsJc3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfc2dtaWlfbWFjX3NlbDsKIAlzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47CiAJc3RydWN0IGNvbWJwaHlfcmVnIHUzb3RnMV9wb3J0X2VuOwogfTsKQEAgLTIxMiw2ICYjNDM7MjEzLDcgQEAgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfcHJpdiB7CiAJYm9vbCBlbmFibGVfc3NjOwogCWJvb2wgZXh0X3JlZmNsazsKIAlzdHJ1Y3QgY2xrICpyZWZjbGs7CiYjNDM7CXUzMiBzZ21paV9tYWNfc2VsOwogfTsKIAogc3RhdGljIHZvaWQgcm9ja2NoaXBfY29tYnBoeV91cGRhdGVsKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYsCkBAIC0zNzUsNiAmIzQzOzM3Nyw5IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfY29tYnBoeV9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByb2NrY2hpcF9jb21icGh5CiAKIAlwcml2LSZndDtleHRfcmVmY2xrID0gZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCAmIzM0O3JvY2tjaGlwLGV4dC1yZWZjbGsmIzM0Oyk7CiAKJiM0MzsJcHJpdi0mZ3Q7c2dtaWlfbWFjX3NlbCA9IDE7CiYjNDM7CWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICYjMzQ7cm9ja2NoaXAsc2dtaWktbWFjLXNlbCYjMzQ7LCAmYW1wO3ByaXYtJmd0O3NnbWlpX21hY19zZWwpOwomIzQzOwogCXByaXYtJmd0O3BoeV9yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X2V4Y2x1c2l2ZShkZXYsICYjMzQ7cGh5JiMzNDspOwogCS8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi8KIAlpZiAoUFRSX0VSUihwcml2LSZndDtwaHlfcnN0KSA9PSAtRU5PRU5UKQpAQCAtODczLDYgJiM0Mzs4NzgsOCBAQCBzdGF0aWMgaW50IHJrMzU2OF9jb21icGh5X2NmZyhzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2KQogCQlicmVhazsKIAogCWNhc2UgUEhZX1RZUEVfU0dNSUk6CiYjNDM7CQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BpcGVfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV9zZ21paV9tYWNfc2VsLAomIzQzOwkJCQkJcHJpdi0mZ3Q7c2dtaWlfbWFjX3NlbCAmZ3Q7IDApOwogCQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BpcGVfZ3JmLCAmYW1wO2NmZy0mZ3Q7cGlwZV94cGNzX3BoeV9yZWFkeSwgdHJ1ZSk7CiAJCXJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi0mZ3Q7cGh5X2dyZiwgJmFtcDtjZmctJmd0O3BpcGVfcGh5bW9kZV9zZWwsIHRydWUpOwogCQlyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtJmd0O3BoeV9ncmYsICZhbXA7Y2ZnLSZndDtwaXBlX3NlbF9xc2dtaWksIHRydWUpOwpAQCAtOTg0LDYgJiM0Mzs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7CiAJLmNvbjNfZm9yX3NhdGEJCT0geyAweDAwMGMsIDE1LCAwLCAweDAwLCAweDQ0MDcgfSwKIAkvKiBwaXBlLWdyZiAqLwogCS5waXBlX2NvbjBfZm9yX3NhdGEJPSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LAomIzQzOwkucGlwZV9zZ21paV9tYWNfc2VsCT0geyAweDAwNDAsIDEsIDEsIDB4MDAsIDB4MDEgfSwKIAkucGlwZV94cGNzX3BoeV9yZWFkeQk9IHsgMHgwMDQwLCAyLCAyLCAweDAwLCAweDAxIH0sCiAJLnUzb3RnMF9wb3J0X2VuCQk9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSwKIAkudTNvdGcxX3BvcnRfZW4JCT0geyAweDAxNDQsIDE1LCAwLCAweDAxODEsIDB4MTEwMCB9LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaCBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjg3MjNkNWJkNzVjYwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmgKQEAgLTAsMCAmIzQzOzEsMTEgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9ICiYjNDM7I2RlZmluZSBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Bjcy9wY3MteHBjcy5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMTUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXM6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBwYXRjaCBzZXJpZXMsIGZvY3VzaW5nIG9uIHRoZSBgYW1kNjRgIGFyY2hpdGVjdHVyZS4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGxheSBvdXQgdGhlIGNoYW5nZXMsIHJpZ2h0PyBJJiMzOTttIHNlZWluZyBhIGJ1bmNoIG9mIGZpbGVzOiBkb2N1bWVudGF0aW9uIGJpbmRpbmdzLCB0aGUgYE1BSU5UQUlORVJTYCBmaWxlIChhbHdheXMgaW1wb3J0YW50ISksIHNldmVyYWwgRFRTIGZpbGVzIGZvciBSb2NrY2hpcCBTb0NzIChgcmszNTY4YCksIHNvbWUgYEtjb25maWdgIGFuZCBgTWFrZWZpbGVgIHVwZGF0ZXMgaW4gbmV0d29yayBkcml2ZXJzLCBhbmQgdGhlbiBhIHNsZXcgb2YgZHJpdmVyIGZpbGVzOiBSb2NrY2hpcC1zcGVjaWZpYyBvbmVzIGZvciBQQ1MgYW5kIFBIWSAoYHBjcy14cGNzLXJrLmNgLCBgcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBgZHdtYWMtcmsuY2ApLCBwbHVzIGEgc2V0IG9mIGBzdG1tYWNgIHJlZmFjdG9yaW5nIHRvdWNoZXMgZm9yIHZhcmlvdXMgYGR3bWFjYCBkcml2ZXJzIChgZHdtYWMtaW50ZWwuY2AsIGBkd21hYy1yZW5lc2FzLWdiZXRoLmNgLCBgZHdtYWMtcnpuMS5jYCwgYGR3bWFjLXNvY2ZwZ2EuY2ApIGFuZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy4KCkFoYSEgVGhpcyBicmVha3MgZG93biBuaWNlbHkuIFdlJiMzOTt2ZSBnb3QgZGlzdGluY3QgYXJlYXMgb2YgY29uY2VybjogdGhlIFJvY2tjaGlwIFNvQy1zcGVjaWZpYyBjb2RlLCB0YXJnZXRpbmcgQVJNL0FSTTY0IHBsYXRmb3JtcywgYW5kIHRoZW4gdGhlIG1vcmUgZ2VuZXJpYyBgc3RtbWFjYCB1cGRhdGVzLCBzb21lIG9mIHdoaWNoIHNlZW0gdG8gaW52b2x2ZSBJbnRlbCBoYXJkd2FyZSAoYGR3bWFjLWludGVsLmNgKS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBzdG1tYWNfbWRpby5jYCBtb2RpZmljYXRpb25zLCBlc3BlY2lhbGx5IGBzdG1tYWNfcGNzX3NldHVwKClgIGFuZCBgc3RtbWFjX3Bjc19jbGVhbigpYC4gQW5kIG9mIGNvdXJzZSB0aGUgUENTLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYHhwY3NfY29uZmlnX2FuZWdfYzM3X3NnbWlpKClgIGFuZCBgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKClgIGluIGBwY3MteHBjcy5jYC4KCk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gZm9yIGBhbWQ2NGAgaXMgdGhpczogY2FuIEkgZXZlbiByZWFjaCBgc3RtbWFjYCwgYGR3bWFjLWludGVsYCwgb3IgdGhlIGBwY3MteHBjc2AgY29tcG9uZW50cyB0aHJvdWdoIHN5emthbGxlciwgc3RhbmRhcmQgUUVNVSBzZXR1cHMsIG9yIHdpbGwgdGhpcyByZXF1aXJlIHZlcnkgc3BlY2lmaWMgcGh5c2ljYWwgUENJIGRldmljZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IEkgbmVlZCB0byBrbm93IGlmIHRoZXNlIGFyZSBldmVuIHZpYWJsZSB0YXJnZXRzIGZvciBmdXp6aW5nIG9uIGBhbWQ2NGAuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gYGR3bWFjLWludGVsLmNgLCB0aGUgYHN0bW1hY2AgY29kZSwgYW5kIGBwY3MteHBjc2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgZW11bGF0aW9uIHN1cHBvcnQgaW4gUUVNVSBvciBpZiB0aGVzZSBjYW4gYmUgcmVhY2hlZCB0aHJvdWdoIHNvbWUgdmlydHVhbCBidXMgb3Igc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzLgoKVGltZSB0byBzZWFyY2ghIExldCYjMzk7cyBnZXQgdGhlIGdyZXBwZXIgb3Igc2VhcmNoIHRvb2xzIGdvaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5jb3ZlciBhYm91dCB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGVzZSBjb21wb25lbnRzIG9uIGFuIGBhbWQ2NGAgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludGVsX21nYmVfY29tbW9uX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTY0MT1zdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo2NTA6c3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02NTEtXHRcdFx0XHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc5Nj1zdGF0aWMgaW50IGVobF9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODE5Olx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgyMC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NTk9c3RhdGljIGludCB0Z2xfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3NzpcdHJldHVybiBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHBkZXYsIHBsYXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzgtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTAzND1zdGF0aWMgaW50IGFkbG5fY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDU2Olx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjIzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBkd21hYy1pbnRlbCBEcml2ZXIqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZHdtYWMtaW50ZWwuY2AuIEZyb20gdGhlIG5hbWUgYWxvbmUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFdGhlcm5ldCBNQUMgY29udHJvbGxlcnMsIHNwZWNpZmljYWxseSB0aG9zZSBmb3VuZCBpbiBFbGtoYXJ0IExha2UgKEVITCksIFRpZ2VyIExha2UgKFRHTCksIGFuZCBBbGRlciBMYWtlLU4gKEFETE4pIHBsYXRmb3Jtcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcywgcHJlY2lzZWx5ICp3aGljaCogZGV2aWNlcyBkb2VzIHRoaXMgZHJpdmVyIGludGVuZCB0byBwcm9iZSBhbmQgbWFuYWdlPyBVbmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBQQ0kgZGV2aWNlIElEcywgb3IgcGVyaGFwcyBldmVuIHZlbmRvciBJRHMsIHRoYXQgdGhpcyBkcml2ZXIgc3VwcG9ydHMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGFuZCwgZnJhbmtseSwgZm9yIGVuc3VyaW5nIEkmIzM5O20gZXZlbiBsb29raW5nIGF0IHRoZSByaWdodCBwaWVjZSBvZiBjb2RlIGZvciB0aGUgdGFzayBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRyaXZlciBhY3R1YWxseSBwcm9iZXMgZm9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZXZpY2UgSURzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTQ1MT1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaW50ZWxfZXRoX3BjaV9pZF90YWJsZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjE0NTM6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGludGVsX2V0aF9wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xNDU0LVx0Lm5hbWUgPSBcJiMzNDtpbnRlbC1ldGgtcGNpXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTQ2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTQ2Mzptb2R1bGVfcGNpX2RyaXZlcihpbnRlbF9ldGhfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3NzEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHRoYXQmIzM5O3MgZXZlbiAqcmVhY2hhYmxlKiB3aXRoaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgR0NFIG9yIFFFTVUgb24gYW4gYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVyIGZpbGVzOiBgZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNgLCBgZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBhbmQgc2V2ZXJhbCBgc3RtbWFjYCB2YXJpYW50cyAoYGR3bWFjLXJrYCwgYGR3bWFjLXJlbmVzYXMtZ2JldGhgLCBgZHdtYWMtcnpuMWAsIGBkd21hYy1zb2NmcGdhYCwgYGR3bWFjLWludGVsYCwgYHN0bW1hY19tZGlvLmNgLCBhbmQgYHBjcy14cGNzLmNgKS4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBlYWNoIGZpbGUgYWdhaW5zdCB0aGUgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7IG91dGxpbmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXNlIGRyaXZlcnMgZm9yIGhhcmR3YXJlIHRoYXQmIzM5O3MgKmVtdWxhdGVkKiBpbiBRRU1VPwoKQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGR3bWFjLWludGVsYCBpcyBzcGVjaWZpYyB0byBJbnRlbCBTb0NzIGxpa2UgRWxraGFydCBMYWtlLCBUaWdlciBMYWtlLCBhbmQgQWxkZXIgTGFrZS1OLiBUaG9zZSBhcmUgKnBoeXNpY2FsKiBTb0NzOyBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gU2FtZSBmb3IgYHBjcy14cGNzLXJrYCBhbmQgYGR3bWFjLXJrYCwgd2hpY2ggYXJlIFJvY2tjaGlwIFJLMzU2OCBTb0MgcGxhdGZvcm0gZGV2aWNlcy4gVGhleSYjMzk7cmUgRFQtYmFzZWQgQVJNNjQgaGFyZHdhcmUsIHNvIGRlZmluaXRlbHkgbm90IGluIGEgc3RhbmRhcmQgeDg2IFFFTVUgc2V0dXAuIGBkd21hYy1yZW5lc2FzLWdiZXRoYCwgYGR3bWFjLXJ6bjFgLCBhbmQgYGR3bWFjLXNvY2ZwZ2FgIGFyZSBwbGF0Zm9ybSBkcml2ZXJzIGZvciBSZW5lc2FzIGFuZCBJbnRlbCBTb0MgRlBHQSBBUk0vUklTQy1WIGJvYXJkcy4gVGhleSBkb24mIzM5O3QgYXBwZWFyIGluIHg4Ni9hbWQ2NCBlbXVsYXRpb24uCgpgc3RtbWFjX21kaW8uY2AgaXMgcGFydCBvZiB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgZHJpdmVyLiBJdCBvbmx5IHJ1bnMgb24gc3RtbWFjIGhhcmR3YXJlLCBhbmQgbm9uZSBvZiB0aG9zZSBhcmUgZW11bGF0ZWQgaW4gbXkgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGBwY3MteHBjcy5jYCwgd2hpY2ggaXMgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBkcml2ZXIsIGluc3RhbnRpYXRlZCBieSBzdG1tYWMgb3IgZHdjIHhwY3MgZGV2aWNlcy4KCk5vdywgSSYjMzk7bSB0aGlua2luZywgY291bGQgKmFueSogdmlydHVhbCBidXMgb3Igc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIGluc3RhbnRpYXRlIGBzdG1tYWNgIG9yIGBwY3MteHBjc2A/IEkmIzM5O20gdGhpbmtpbmcgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgdmlydGlvLCBldGMuIE5vbmUgb2YgdGhvc2UgSSBjYW4gdGhpbmsgb2YgZG8uIFRoZXkgaGF2ZSB0aGVpciBvd24gbmV0d29yayBkZXZpY2VzIGFuZCBkb24mIzM5O3QgcmVseSBvbiBzdG1tYWMgb3IgcGNzLXhwY3MuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrOiBEbyAqYW55KiB2aXJ0dWFsIGRyaXZlcnMsIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYG5ldGtpdGAsIGB2ZXRoYCwgYGR1bW15YCwgYHRlYW1gLCBgYm9uZGAsIG9yIGB1c2JuZXRgLCB1dGlsaXplIGBzdG1tYWNgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgYHBoeWxpbmtgIHdpdGggYHBjcy14cGNzYD8gUGh5bGluayAqaXMqIHVzZWQgYnkgRXRoZXJuZXQgZHJpdmVycywgYnV0IGBwY3MteHBjc2AgaXMgYSBQQ1MgZHJpdmVyIGZvciBTeW5vcHN5cyBEVyBYUENTLCB3aGljaCBpcyB1c2VkIGJ5ICpwaHlzaWNhbCogRXRoZXJuZXQgTUFDcywgbm90IHZpcnR1YWwgb25lcy4gSSYjMzk7bSBnb2luZyB0byBncmVwIGZvciBgeHBjc19jcmVhdGVgIGFjcm9zcyB0aGUga2VybmVsIHRvIGJlIGNlcnRhaW4sIGJ1dCBzbyBmYXIgdGhlIHBhdGggdG8gZnV6emluZyBsb29rcyBibG9ja2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hwY3NfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTMyMT1zdGF0aWMgaW50IGtzejk0NzdfcGNzX2NyZWF0ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0NS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjM0NjpcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KGJ1cywgMCk7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDctXHRpZiAoSVNfRVJSKHBjcykpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQxMjpcdFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoYnVzLCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMy1cdFx0aWYgKElTX0VSUihwY3MpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmM9MTk3PWludCBmYm5pY19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIwNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jOjIwNTpcdHBjcyA9IHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KGZiZC1cdTAwM2VtZGlvX2J1cywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYy0yMDYtXHRpZiAoSVNfRVJSKHBjcykpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTYwNj1zdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE1LVx0XHRwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsIFwmIzM0O3Bjcy1oYW5kbGVcJiMzNDssIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo2MTY6XHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTYxNy1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTktXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjIwOlx0XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVx1MDAzZW1paSwgYWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTYyMS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTEyNj1zdGF0aWMgaW50IHR4Z2JlX21kaW9fcGNzX2luaXQoc3RydWN0IHR4Z2JlICp0eGdiZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTU0Olx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYobWlpX2J1cywgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1NS1cdGlmIChJU19FUlIocGNzKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYz00NDc9c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy00OTEtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYzo0OTI6XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihweHBjcy1cdTAwM2VidXMsIChpbnQpcG9ydCk7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy00OTMtXHRkZXZpY2VfdW5sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYz0xNDk5PXN0YXRpYyBpbnQgeHBjc19pZGVudGlmeShzdHJ1Y3QgZHdfeHBjcyAqeHBjcylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTE4LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTUxOTpzdGF0aWMgc3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX2RhdGEoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTUyMC17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM9MTU3MT1zdGF0aWMgaW50IHhwY3NfaW5pdF9pZChzdHJ1Y3QgZHdfeHBjcyAqeHBjcylcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTg1LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTU4NjpzdGF0aWMgc3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1ODcte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1OTAtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTkxOlx0eHBjcyA9IHhwY3NfY3JlYXRlX2RhdGEobWRpb2Rldik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNTkyLVx0aWYgKElTX0VSUih4cGNzKSlcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjIyLS8qKlxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTYyMzogKiB4cGNzX2NyZWF0ZV9tZGlvZGV2KCkgLSBjcmVhdGUgYSBEVyB4UENTIGluc3RhbmNlIHdpdGggdGhlIE1ESU8gQGFkZHJcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MjQtICogQGJ1czogcG9pbnRlciB0byB0aGUgTURJTy1idXMgZGVzY3JpcHRvciBmb3IgdGhlIGRldmljZSB0byBiZSBsb29rZWQgYXRcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjMwLSAqL1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTYzMTpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzIte1xuLS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MzktXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjQwOlx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY0MS1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NDI6XHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY0MzpcdCAqIHN1Y2Nlc3NmdWwuIElmIHhwY3NfY3JlYXRlKCkgZmFpbHMsIHRoaXMgd2lsbCBmcmVlIHRoZSBtZGlvXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjQ0LVx0ICogZGV2aWNlIGhlcmUuIEluIGFueSBjYXNlLCB3ZSBkb24mIzM5O3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjUxLX1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTI6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjUzLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY1NDpzdHJ1Y3QgcGh5bGlua19wY3MgKnhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyKVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1NS17XG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1Ny1cbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTg6XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihidXMsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1OS1cdGlmIChJU19FUlIoeHBjcykpXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY2My19XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjY0OkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjUtXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY2LS8qKlxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NzogKiB4cGNzX2NyZWF0ZV9md25vZGUoKSAtIENyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2UgZnJvbSBAZndub2RlXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY4LSAqIEBmd25vZGU6IGZ3bm9kZSBoYW5kbGUgcG9pbmluZyB0byB0aGUgRFcgWFBDUyBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc1LSAqL1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY3NjpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc3LXtcbi0tXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjg3LVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY4ODpcdHhwY3MgPSB4cGNzX2NyZWF0ZShtZGlvZGV2KTtcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2ODktXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjkwOlx0LyogeHBjc19jcmVhdGUoKSBoYXMgdGFrZW4gYSByZWZjb3VudCBvbiB0aGUgbWRpb2RldiBpZiBpdCB3YXNcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2OTE6XHQgKiBzdWNjZXNzZnVsLiBJZiB4cGNzX2NyZWF0ZSgpIGZhaWxzLCB0aGlzIHdpbGwgZnJlZSB0aGUgbWRpb1xuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5Mi1cdCAqIGRldmljZSBoZXJlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJiMzOTt0IG5lZWQgdG8gaG9sZCBvdXIgcmVmZXJlbmNlXG4tLVxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5OS19XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNzAwOkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX2Z3bm9kZSk7XG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNzAxLVxuLS1cbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg9NTU9dm9pZCB4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHN0cnVjdCBkd194cGNzICp4cGNzLCB1OCBtdWx0X2ZhY3QpO1xuaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MuaDo1NjpzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oOjU3OnN0cnVjdCBkd194cGNzICp4cGNzX2NyZWF0ZV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSk7XG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oLTU4LXZvaWQgeHBjc19kZXN0cm95KHN0cnVjdCBkd194cGNzICp4cGNzKTtcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmgtNTktXG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oOjYwOnN0cnVjdCBwaHlsaW5rX3BjcyAqeHBjc19jcmVhdGVfcGNzX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xuaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MuaC02MS12b2lkIHhwY3NfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE5OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzAyCgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDcwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEZ1enppbmcgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGhlcmUmIzM5O3MgbXkgdGFrZTogSXQmIzM5O3MgYWxsIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciBzcGVjaWZpYywgcGh5c2ljYWwgaGFyZHdhcmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGRyaXZlcnMgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggWFBDUyBFdGhlcm5ldCBQQ1MsIHNvbWUgYWNjb21wYW55aW5nIFJvY2tjaGlwIG5hbmVuZyBjb21icGh5IGFuZCBkd21hYy1yayBkcml2ZXJzLCBhbmQgdmFyaW91cyBzdG1tYWMvcGNzLXhwY3MgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMsIGluY2x1ZGluZyBJbnRlbC9SZW5lc2FzL0FsdGVyYSBzdG1tYWMgZ2x1ZS4KClRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCAqYWxsKiBvZiB0aGlzIGNvZGUgZnVuZGFtZW50YWxseSByZWxpZXMgb24gcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCYjMzk7cyAqbm90KiBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIG9uIGFtZDY0LiAgVGhlIGRyaXZlcnMgYXJlIHRhaWxvcmVkIGZvciBzcGVjaWZpYyBTb0NzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQ3MsIFJlbmVzYXMgU29DcywgZXRjLikgYW5kIHZlbmRvci1zcGVjaWZpYyBjb250cm9sbGVycy4gVGhpcyBpbmNsdWRlcyBtb2RpZmljYXRpb25zIGluIHRoZSBkZXZpY2UgdHJlZXMgdG9vLgoKRXNzZW50aWFsbHksIHRoZXJlJiMzOTtzIG5vIHdheSBzeXprYWxsZXIsIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cCwgaXMgZ29pbmcgdG8gYmUgYWJsZSB0byBldmVuICp0b3VjaCogdGhpcyBjb2RlLiBJdCYjMzk7cyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgYXJlIGp1c3QgdG9vIHRpZ2h0LgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBlbXB0eS4gSSYjMzk7bSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxOTo1NjwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NTY6MDAuNDQyMzMxNDU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3ODI4NzcyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjowMC40NDIzMzY1NzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MjgxOTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUwMDdjNzBlNzE0MzYyOGRlOWM1ZmQ4YzYzMzJhMDg3NGZkODEwYWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxOTo1NTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wODUyZDBiY2I2NmEyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sXFxuQEAgLTAsMCArMSwxMTAgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1NcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gQ29pYSBQcmFudCBcXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgUm9ja2NoaXAgUkszNTY4IFNvQyBpbnRlZ3JhdGVzIGEgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbFxcbisgIENvZGluZyBTdWJsYXllciAoWFBDUykuXFxuKyAgVGhlIFBDUyBwcm92aWRlcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgKE1BQylcXG4rICBhbmQgdGhlIFBoeXNpY2FsIE1lZGl1bSBBdHRhY2htZW50IChQTUEpIHN1YmxheWVyIHRocm91Z2ggYSBNZWRpYVxcbisgIEluZGVwZW5kZW50IEludGVyZmFjZSAoR01JSSkuXFxuK1xcbisgIFRoZSBYUENTIGlzIGFjY2Vzc2VkIG92ZXIgdGhlIEFQQjMgYnVzIGFuZCBpbnRlcm5hbGx5IGNvbm5lY3RlZCB0byBhXFxuKyAgTmFuZW5nIENvbWJvIFNlckRlcyBQSFkuXFxuKyAgSXQgc3VwcG9ydHMgMTAwMEJBU0UtWCwgU0dNSUkgYW5kIFFTR01JSSBtb2Rlcy5cXG4rXFxuKyAgVGhlIGJsb2NrIGNvbnRhaW5zIGZvdXIgTUlJIHBvcnRzIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZFxcbisgIHJvdXRlZCB0byBvbmUgb2YgdGhlIEV0aGVybmV0IEdNQUMgY29udHJvbGxlcnMgdmlhIHRoZSBwY3MtaGFuZGxlXFxuKyAgcHJvcGVydHkgaW4gdGhlIE1BQyBkZXZpY2UgdHJlZSBub2RlLlxcbitcXG4rcHJvcGVydGllczpcXG4rICBjb21wYXRpYmxlOlxcbisgICAgY29uc3Q6IHJvY2tjaGlwLHJrMzU2OC14cGNzXFxuK1xcbisgIHJlZzpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIFxcXCIjYWRkcmVzcy1jZWxsc1xcXCI6XFxuKyAgICBjb25zdDogMVxcbitcXG4rICBcXFwiI3NpemUtY2VsbHNcXFwiOlxcbisgICAgY29uc3Q6IDBcXG4rXFxuKyAgY2xvY2tzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2Vzc1xcbisgICAgICAtIGRlc2NyaXB0aW9uOiBFRUUgY2xvY2sgKGNsa19lZWVfaSksIHJlcXVpcmVkIGZvciBFbmVyZ3kgRWZmaWNpZW50IEV0aGVybmV0IG9wZXJhdGlvblxcbitcXG4rICBjbG9jay1uYW1lczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGNvbnN0OiBjc3JcXG4rICAgICAgLSBjb25zdDogZWVlXFxuK1xcbisgIHBoeXM6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBwaHktbmFtZXM6XFxuKyAgICBjb25zdDogc2VyZGVzXFxuK1xcbisgIHBvd2VyLWRvbWFpbnM6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXFxcIl5wY3MtbWlpQFswLTNdJFxcXCI6XFxuKyAgICB0eXBlOiBvYmplY3RcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBPbmUgb2YgdGhlIGZvdXIgTUlJIHBvcnRzIG9mIHRoZSBYUENTLiBUaGUgcG9ydCBpcyBsaW5rZWQgdG8gYW5cXG4rICAgICAgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIgdmlhIHRoZSBwY3MtaGFuZGxlIHByb3BlcnR5IGluIHRoZSBNQUMnc1xcbisgICAgICBkZXZpY2UgdHJlZSBub2RlLlxcbitcXG4rICAgIHByb3BlcnRpZXM6XFxuKyAgICAgIHJlZzpcXG4rICAgICAgICBkZXNjcmlwdGlvbjogTUlJIHBvcnQgbnVtYmVyLlxcbisgICAgICAgIGVudW06IFswLCAxLCAyLCAzXVxcbitcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIHJlZ1xcbitcXG4rICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSByZWdcXG4rICAtIFxcXCIjYWRkcmVzcy1jZWxsc1xcXCJcXG4rICAtIFxcXCIjc2l6ZS1jZWxsc1xcXCJcXG4rICAtIGNsb2Nrc1xcbisgIC0gY2xvY2stbmFtZXNcXG4rICAtIHBoeXNcXG4rICAtIHBoeS1uYW1lc1xcbisgIC0gcG93ZXItZG9tYWluc1xcbitcXG4rYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yazM1NjgtY3J1LmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcG93ZXIvcmszNTY4LXBvd2VyLmhcXHUwMDNlXFxuKyAgICAjaW5jbHVkZSBcXHUwMDNjZHQtYmluZGluZ3MvcGh5L3BoeS5oXFx1MDAzZVxcbitcXG4rICAgIHBjc0BmZGEwMDAwMCB7XFxuKyAgICAgIGNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiO1xcbisgICAgICByZWcgPSBcXHUwMDNjMHhmZGEwMDAwMCAweDIwMDAwMFxcdTAwM2U7XFxuKyAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZjcnUgUENMS19YUENTXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZjcnUgQ0xLX1hQQ1NfRUVFXFx1MDAzZTtcXG4rICAgICAgY2xvY2stbmFtZXMgPSBcXFwiY3NyXFxcIiwgXFxcImVlZVxcXCI7XFxuKyAgICAgIHBoeXMgPSBcXHUwMDNjXFx1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXFx1MDAzZTtcXG4rICAgICAgcGh5LW5hbWVzID0gXFxcInNlcmRlc1xcXCI7XFxuKyAgICAgIHBvd2VyLWRvbWFpbnMgPSBcXHUwMDNjXFx1MDAyNnBvd2VyIFJLMzU2OF9QRF9QSVBFXFx1MDAzZTtcXG4rXFxuKyAgICAgIHBjcy1taWlAMCB7XFxuKyAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICB9O1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcXG5pbmRleCAzNzliMDhiZDllOTdhLi44ZTg5OGJjZTlhZjczIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXFxuQEAgLTgwLDYgKzgwLDE1IEBAIHByb3BlcnRpZXM6XFxuICAgICBkZXNjcmlwdGlvbjpcXG4gICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuXFxuIFxcbisgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6XFxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcXG4rICAgIGVudW06IFswLCAxXVxcbisgICAgZGVmYXVsdDogMVxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFNlbGVjdCBnbWFjMCBvciBnbWFjMSB0byBiZSB1c2VkIGFzIFNHTUlJIGNvbnRyb2xsZXIuXFxuKyAgICAgIFRoZSBoYXJkd2FyZSByZXNldCB2YWx1ZSBpcyBHTUFDMSAoMSkuIFNldCB0aGlzIHRvIDAgdG8gcm91dGVcXG4rICAgICAgU0dNSUkgdG8gR01BQzAuXFxuK1xcbiAgIFxcXCIjcGh5LWNlbGxzXFxcIjpcXG4gICAgIGNvbnN0OiAxXFxuIFxcbkBAIC0xMDUsNiArMTE0LDEwIEBAIGFsbE9mOlxcbiAgICAgICAgICAgbWF4SXRlbXM6IDFcXG4gICAgICAgICByZXNldC1uYW1lczpcXG4gICAgICAgICAgIG1heEl0ZW1zOiAxXFxuKyAgICAgICAgcm9ja2NoaXAsc2dtaWktbWFjLXNlbDogdHJ1ZVxcbisgICAgZWxzZTpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiBmYWxzZVxcbiAgIC0gaWY6XFxuICAgICAgIHByb3BlcnRpZXM6XFxuICAgICAgICAgY29tcGF0aWJsZTpcXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IGZjMzIwYjM3MzY1NmYuLmRkYTRkMjExYjdkYjQgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0yMzczOCw2ICsyMzczOCwxNSBAQCBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sXFxuIEY6XFx0c291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX3NhaS4qXFxuIFxcbitST0NLQ0hJUCBYUENTIERSSVZFUlxcbitNOlxcdENvaWEgUHJhbnQgXFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cXHUwMDNlXFxuK0w6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbitMOlxcdGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWxcXG4rRjpcXHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xcbitGOlxcdGluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXG4rXFxuIFJPQ0tFUiBEUklWRVJcXG4gTTpcXHRKaXJpIFBpcmtvIFxcdTAwM2NqaXJpQHJlc251bGxpLnVzXFx1MDAzZVxcbiBMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xcbmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcXG4rKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xcbkBAIC0zLDYgKzMsNyBAQFxcbiAvZHRzLXYxLztcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9waW5jdHJsL3JvY2tjaGlwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9zb2Mvcm9ja2NoaXAsdm9wMi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwicmszNTY4LmR0c2lcXFwiXFxuQEAgLTI0Miw2ICsyNDMsNyBAQCBcXHUwMDI2Y29tYnBoeTEge1xcbiBcXG4gXFx1MDAyNmNvbWJwaHkyIHtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbitcXHRyb2NrY2hpcCxzZ21paS1tYWMtc2VsID0gXFx1MDAzYzBcXHUwMDNlO1xcbiB9O1xcbiBcXG4gXFx1MDAyNmNwdTAge1xcbkBAIC0yNjAsOSArMjYyLDE4IEBAIFxcdTAwMjZjcHUzIHtcXG4gXFx0Y3B1LXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2dmRkX2NwdVxcdTAwM2U7XFxuIH07XFxuIFxcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXFxuKy8qIE1vdG9yY29tbSBZVDg1MjFTQyBMQU4gcG9ydCAqL1xcbiBcXHUwMDI2Z21hYzAge1xcbi1cXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHRhc3NpZ25lZC1jbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBTQ0xLX0dNQUMwX1JYX1RYXFx1MDAzZTtcXG4rXFx0YXNzaWduZWQtY2xvY2stcGFyZW50cyA9IFxcdTAwM2NcXHUwMDI2eHBjc19nbWFjMF9jbGtcXHUwMDNlO1xcbitcXHRwY3MtaGFuZGxlID0gXFx1MDAzY1xcdTAwMjZ4cGNzX21paTBcXHUwMDNlO1xcbitcXHRtYW5hZ2VkID0gXFxcImluLWJhbmQtc3RhdHVzXFxcIjtcXG4rXFx0cGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2c2dtaWlfcGh5XFx1MDAzZTtcXG4rXFx0cGh5LW1vZGUgPSBcXFwic2dtaWlcXFwiO1xcbitcXHRwaHktc3VwcGx5ID0gXFx1MDAzY1xcdTAwMjZ2Y2NfM3YzXFx1MDAzZTtcXG4rXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4rXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZnbWFjMF9taWltXFx1MDAzZTtcXG4rXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXFxuQEAgLTM0MSw2ICszNTIsMzYgQEAgXFx1MDAyNmkyczBfOGNoIHtcXG4gXFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbiB9O1xcbiBcXG4rXFx1MDAyNm1kaW8wIHtcXG4rXFx0c2dtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjJcXFwiO1xcbitcXHRcXHRyZWcgPSBcXHUwMDNjMHgzXFx1MDAzZTtcXG4rXFx0XFx0bWF4LXNwZWVkID0gXFx1MDAzYzEwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1hc3NlcnQtdXMgPSBcXHUwMDNjMjAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1kZWFzc2VydC11cyA9IFxcdTAwM2MxMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRyZXNldC1ncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzMgUktfUEM2IEdQSU9fQUNUSVZFX0xPV1xcdTAwM2U7XFxuK1xcbitcXHRcXHRsZWRzIHtcXG4rXFx0XFx0XFx0I2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdCNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rXFx0XFx0XFx0bGVkQDEge1xcbitcXHRcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGNvbG9yID0gXFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlxcdTAwM2U7XFxuK1xcdFxcdFxcdFxcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcXG4rXFx0XFx0XFx0XFx0ZGVmYXVsdC1zdGF0ZSA9IFxcXCJrZWVwXFxcIjtcXG4rXFx0XFx0XFx0fTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAyIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfR1JFRU5cXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9MQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK307XFxuK1xcbiBcXHUwMDI2bWRpbzEge1xcbiBcXHRyZ21paV9waHk6IGV0aGVybmV0LXBoeUAzIHtcXG4gXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlxcXCI7XFxuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XFxuIFxcdFxcdHJlc2V0LWdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvNCBSS19QQzAgR1BJT19BQ1RJVkVfTE9XXFx1MDAzZTtcXG4gXFx0XFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcXHUwMDNjMTUwMFxcdTAwM2U7XFxuIFxcdFxcdHR4LWludGVybmFsLWRlbGF5LXBzID0gXFx1MDAzYzE1MDBcXHUwMDNlO1xcbitcXG4rXFx0XFx0bGVkcyB7XFxuK1xcdFxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHQjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuK1xcdFxcdFxcdGxlZEAxIHtcXG4rXFx0XFx0XFx0XFx0cmVnID0gXFx1MDAzYzFcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRjb2xvciA9IFxcdTAwM2NMRURfQ09MT1JfSURfQU1CRVJcXHUwMDNlO1xcbitcXHRcXHRcXHRcXHRmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9XQU47XFxuK1xcdFxcdFxcdFxcdGRlZmF1bHQtc3RhdGUgPSBcXFwia2VlcFxcXCI7XFxuK1xcdFxcdFxcdH07XFxuK1xcbitcXHRcXHRcXHRsZWRAMiB7XFxuK1xcdFxcdFxcdFxcdHJlZyA9IFxcdTAwM2MyXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0Y29sb3IgPSBcXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXFx1MDAzZTtcXG4rXFx0XFx0XFx0XFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xcbitcXHRcXHRcXHRcXHRkZWZhdWx0LXN0YXRlID0gXFxcImtlZXBcXFwiO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHR9O1xcbiBcXHR9O1xcbiB9O1xcbiBcXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcXHUwMDI2eGluMzJrIHtcXG4gXFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4gXFx0cGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZjbGszMmtfb3V0MVxcdTAwM2U7XFxuIH07XFxuK1xcbitcXHUwMDI2eHBjcyB7XFxuK1xcdHN0YXR1cyA9IFxcXCJva2F5XFxcIjtcXG4rXFx0cGh5cyA9IFxcdTAwM2NcXHUwMDI2Y29tYnBoeTIgUEhZX1RZUEVfU0dNSUlcXHUwMDNlO1xcbitcXHRwaHktbmFtZXMgPSBcXFwic2VyZGVzXFxcIjtcXG4rfTtcXG4rXFxuK1xcdTAwMjZ4cGNzX21paTAge1xcbitcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuK307XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuaW5kZXggM2JjNjUzZjAyN2YxZi4uOTg5ZTE2NGMwZWIzOSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXFxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxcbkBAIC0xMTAsNiArMTEwLDUxIEBAIHNhdGEwOiBzYXRhQGZjMDAwMDAwIHtcXG4gXFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4gXFx0fTtcXG4gXFxuK1xcdHhwY3M6IHBjc0BmZGEwMDAwMCB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiO1xcbitcXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0I3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdHJlZyA9IFxcdTAwM2MweDAgMHhmZGEwMDAwMCAweDAgMHgyMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNmNydSBQQ0xLX1hQQ1NcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmNydSBDTEtfWFBDU19FRUVcXHUwMDNlO1xcbitcXHRcXHRjbG9jay1uYW1lcyA9IFxcXCJjc3JcXFwiLCBcXFwiZWVlXFxcIjtcXG4rXFx0XFx0cG93ZXItZG9tYWlucyA9IFxcdTAwM2NcXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcXHUwMDNlO1xcbitcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXG4rXFx0XFx0eHBjc19taWkwOiBwY3MtbWlpQDAge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcbitcXHRcXHR4cGNzX21paTE6IHBjcy1taWlAMSB7XFxuK1xcdFxcdFxcdHJlZyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rXFx0XFx0XFx0c3RhdHVzID0gXFxcImRpc2FibGVkXFxcIjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdHhwY3NfbWlpMjogcGNzLW1paUAyIHtcXG4rXFx0XFx0XFx0cmVnID0gXFx1MDAzYzJcXHUwMDNlO1xcbitcXHRcXHRcXHRzdGF0dXMgPSBcXFwiZGlzYWJsZWRcXFwiO1xcbitcXHRcXHR9O1xcbitcXG4rXFx0XFx0eHBjc19taWkzOiBwY3MtbWlpQDMge1xcbitcXHRcXHRcXHRyZWcgPSBcXHUwMDNjM1xcdTAwM2U7XFxuK1xcdFxcdFxcdHN0YXR1cyA9IFxcXCJkaXNhYmxlZFxcXCI7XFxuK1xcdFxcdH07XFxuK1xcdH07XFxuK1xcbitcXHR4cGNzX2dtYWMwX2NsazogeHBjcy1nbWFjMC1jbG9jayB7XFxuK1xcdFxcdGNvbXBhdGlibGUgPSBcXFwiZml4ZWQtY2xvY2tcXFwiO1xcbitcXHRcXHRjbG9jay1mcmVxdWVuY3kgPSBcXHUwMDNjMTI1MDAwMDAwXFx1MDAzZTtcXG4rXFx0XFx0Y2xvY2stb3V0cHV0LW5hbWVzID0gXFxcImNsa19nbWFjMF94cGNzX21paVxcXCI7XFxuK1xcdFxcdCNjbG9jay1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFx0fTtcXG4rXFxuK1xcdHhwY3NfZ21hYzFfY2xrOiB4cGNzLWdtYWMxLWNsb2NrIHtcXG4rXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJmaXhlZC1jbG9ja1xcXCI7XFxuK1xcdFxcdGNsb2NrLWZyZXF1ZW5jeSA9IFxcdTAwM2MxMjUwMDAwMDBcXHUwMDNlO1xcbitcXHRcXHRjbG9jay1vdXRwdXQtbmFtZXMgPSBcXFwiY2xrX2dtYWMxX3hwY3NfbWlpXFxcIjtcXG4rXFx0XFx0I2Nsb2NrLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXHR9O1xcbitcXG4gXFx0cGlwZV9waHlfZ3JmMDogc3lzY29uQGZkYzcwMDAwIHtcXG4gXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJyb2NrY2hpcCxyazM1NjgtcGlwZS1waHktZ3JmXFxcIiwgXFxcInN5c2NvblxcXCI7XFxuIFxcdFxcdHJlZyA9IFxcdTAwM2MweDAgMHhmZGM3MDAwMCAweDAgMHgxMDAwXFx1MDAzZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcXG5pbmRleCBlM2RkNWFkZGE1YWNhLi41MDg4YWNjMDY5ODJlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnXFxuQEAgLTE3MCw2ICsxNzAsNyBAQCBjb25maWcgRFdNQUNfUk9DS0NISVBcXG4gXFx0ZGVmYXVsdCBBUkNIX1JPQ0tDSElQXFxuIFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgKEFSQ0hfUk9DS0NISVAgfHwgQ09NUElMRV9URVNUKVxcbiBcXHRzZWxlY3QgTUZEX1NZU0NPTlxcbitcXHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcXG4gXFx0aGVscFxcbiBcXHQgIFN1cHBvcnQgZm9yIEV0aGVybmV0IGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszMjg4IFNvQy5cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXFxuaW5kZXggZjVmOWZhNjdlY2Q3Ny4uZmQ1ZjAxYzg5NDFjMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xcbkBAIC02MDMsMTMgKzYwMyw0NyBAQCBzdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcXG4gXFx0cGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGludGVsX21nYmVfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3MgPSBOVUxMO1xcbitcXHRpbnQgYWRkcjtcXG4rXFxuK1xcdGRldm5vZGUgPSBkZXZfZndub2RlKHByaXYtXFx1MDAzZWRldmljZSk7XFxuK1xcbitcXHRpZiAoZndub2RlX3Byb3BlcnR5X3ByZXNlbnQoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiKSkge1xcbitcXHRcXHRwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsIFxcXCJwY3MtaGFuZGxlXFxcIiwgMCk7XFxuK1xcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XFxuK1xcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRhZGRyID0gZmZzKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrKSAtIDE7XFxuK1xcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXFx1MDAzZW1paSwgYWRkcik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChJU19FUlIoeHBjcykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xcbitcXG4rXFx0eHBjc19jb25maWdfZWVlX211bHRfZmFjdCh4cGNzLCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSB4cGNzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaW50ZWxfbWdiZV9wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0eHBjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKTtcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICppbnRlbF9tZ2JlX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4ge1xcbi1cXHQvKiBwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VoYXNfeHBjcyBoYXMgYmVlbiBzZXQgdHJ1ZSwgc28gdGhlcmVcXG4tXFx0ICogc2hvdWxkIGFsd2F5cyBiZSBhbiBYUENTLiBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBhbHdheXNcXG4tXFx0ICogcmV0dXJuIHRoaXMgaWYgcHJlc2VudC5cXG4tXFx0ICovXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbiB9XFxuIFxcbkBAIC03MzMsNiArNzY3LDggQEAgc3RhdGljIGludCBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHQgICAgcGxhdC1cXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7XFxuIFxcdFxcdHBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrID0gQklUX1UzMihJTlRFTF9NR0JFX1hQQ1NfQUREUik7XFxuIFxcdFxcdHBsYXQtXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGxhdC1cXHUwMDNlcGNzX2luaXQgPSBpbnRlbF9tZ2JlX3Bjc19pbml0O1xcbitcXHRcXHRwbGF0LVxcdTAwM2VwY3NfZXhpdCA9IGludGVsX21nYmVfcGNzX2V4aXQ7XFxuIFxcdFxcdHBsYXQtXFx1MDAzZXNlbGVjdF9wY3MgPSBpbnRlbF9tZ2JlX3NlbGVjdF9wY3M7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xcbmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmVuZXNhcy1nYmV0aC5jXFxuQEAgLTgxLDggKzgxLDExIEBAIHN0YXRpYyBpbnQgcmVuZXNhc19nbWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gXFxuIHN0YXRpYyB2b2lkIHJlbmVzYXNfZ21hY19wY3NfZXhpdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIHtcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcylcXG4tXFx0XFx0bWlpY19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtaWljX2Rlc3Ryb3kocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKTtcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzID0gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmVuZXNhc19nbWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xcbmluZGV4IDhkNzA0MmU2ODkyNjEuLmU0N2NhMWJlYzViOGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwic3RtbWFjX3BsYXRmb3JtLmhcXFwiXFxuQEAgLTQ3LDYgKzQ4LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcXG4gXFx0dm9pZCAoKnNldF90b19yZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXFxuIFxcdFxcdFxcdCAgICAgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpO1xcbiBcXHR2b2lkICgqc2V0X3RvX3JtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcXG4rXFx0dm9pZCAoKnNldF90b19zZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xcbiBcXHRpbnQgKCpzZXRfc3BlZWQpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxcbiBcXHRcXHRcXHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwgaW50IHNwZWVkKTtcXG4gXFx0dm9pZCAoKmludGVncmF0ZWRfcGh5X3Bvd2VydXApKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcXG5AQCAtNjMsNiArNjUsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xcbiBcXHRib29sIGNsb2NrX2dyZl9yZWdfaW5fcGhwO1xcbiBcXHRib29sIHN1cHBvcnRzX3JnbWlpO1xcbiBcXHRib29sIHN1cHBvcnRzX3JtaWk7XFxuK1xcdGJvb2wgc3VwcG9ydHNfc2dtaWk7XFxuIFxcdGJvb2wgcGhwX2dyZl9yZXF1aXJlZDtcXG4gXFx0Ym9vbCByZWdzX3ZhbGlkO1xcbiBcXHR1MzIgcmVnc1tdO1xcbkBAIC05OCw2ICsxMDEsNyBAQCBzdHJ1Y3QgcmtfcHJpdl9kYXRhIHtcXG4gXFx0Ym9vbCBpbnRlZ3JhdGVkX3BoeTtcXG4gXFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcXG4gXFx0Ym9vbCBzdXBwb3J0c19ybWlpO1xcbitcXHRib29sIHN1cHBvcnRzX3NnbWlpO1xcbiBcXG4gXFx0c3RydWN0IGNsa19idWxrX2RhdGEgKmNsa3M7XFxuIFxcdGludCBudW1fY2xrcztcXG5AQCAtODA5LDYgKzgxMyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgcmszNTI4X29wcyA9IHtcXG4gI2RlZmluZSBSSzM1NjhfR1JGX0dNQUMxX0NPTjFcXHRcXHQweDAzOGNcXG4gXFxuIC8qIFJLMzU2OF9HUkZfR01BQzBfQ09OMSBcXHUwMDI2XFx1MDAyNiBSSzM1NjhfR1JGX0dNQUMxX0NPTjEgKi9cXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUlcXHRcXHRHUkZfQ0xSX0JJVCg3KVxcbisjZGVmaW5lIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJXFx0XFx0R1JGX0JJVCg3KVxcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTFxcdFxcdFxcdEdSRl9CSVQoMylcXG4gI2RlZmluZSBSSzM1NjhfR01BQ19GTE9XX0NUUkxfQ0xSXFx0XFx0R1JGX0NMUl9CSVQoMylcXG4gI2RlZmluZSBSSzM1NjhfR01BQ19SWENMS19ETFlfRU5BQkxFXFx0XFx0R1JGX0JJVCgxKVxcbkBAIC04NTEsMTggKzg1NywzMiBAQCBzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3JnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LFxcbiBcXHRcXHQgICAgIFJLMzU2OF9HTUFDX0NMS19UWF9ETF9DRkcodHhfZGVsYXkpKTtcXG4gXFxuIFxcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cXHUwMDNlZ3JmLCBjb24xLFxcbitcXHRcXHQgICAgIFJLMzU2OF9HTUFDX01PREVfUk1JSV9SR01JSSB8XFxuIFxcdFxcdCAgICAgUkszNTY4X0dNQUNfUlhDTEtfRExZX0VOQUJMRSB8XFxuIFxcdFxcdCAgICAgUkszNTY4X0dNQUNfVFhDTEtfRExZX0VOQUJMRSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fc2dtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuK3tcXG4rXFx0dTMyIGNvbjE7XFxuK1xcbitcXHRjb24xID0gKGJzcF9wcml2LVxcdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XFxuK1xcdFxcdFxcdFxcdCAgICAgUkszNTY4X0dSRl9HTUFDMF9DT04xO1xcbitcXG4rXFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVxcdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Njhfb3BzID0ge1xcbiBcXHQuaW5pdCA9IHJrMzU2OF9pbml0LFxcbiBcXHQuc2V0X3RvX3JnbWlpID0gcmszNTY4X3NldF90b19yZ21paSxcXG4rXFx0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXFxuK1xcbiBcXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXFxuIFxcbiBcXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxcbiBcXG4gXFx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxcbitcXHQuc3VwcG9ydHNfc2dtaWkgPSB0cnVlLFxcbiBcXG4gXFx0LnJlZ3NfdmFsaWQgPSB0cnVlLFxcbiBcXHQucmVncyA9IHtcXG5AQCAtMTIwOCw2ICsxMjI4LDQzIEBAIHN0YXRpYyB2b2lkIHJrX3BoeV9wb3dlcmRvd24oc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGRldl9lcnIoYnNwX3ByaXYtXFx1MDAzZWRldiwgXFxcImZhaWwgdG8gZGlzYWJsZSBwaHktc3VwcGx5XFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtXFx1MDAzZWRldmljZS1cXHUwMDNlb2Zfbm9kZTtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwY3Nfbm9kZTtcXG4rXFx0c3RydWN0IGR3X3hwY3MgKnhwY3M7XFxuK1xcbitcXHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFxcXCJwY3MtaGFuZGxlXFxcIiwgMCk7XFxuK1xcdGlmICghcGNzX25vZGUpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXFx1MDAzZWRldmljZSwgcGNzX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XFxuK1xcdGlmIChJU19FUlIoeHBjcykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHhwY3MpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSB4cGNzO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhwY3NfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcmtfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIHhwY3NfdG9fcGh5bGlua19wY3MocHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgKm9wcylcXG5AQCAtMTMzMCw2ICsxMzg3LDcgQEAgc3RhdGljIHN0cnVjdCBya19wcml2X2RhdGEgKnJrX2dtYWNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4gXFxuIFxcdGJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19yZ21paSA9IG9wcy1cXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19yZ21paTtcXG4gXFx0YnNwX3ByaXYtXFx1MDAzZXN1cHBvcnRzX3JtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3JtaWkgfHwgISFvcHMtXFx1MDAzZXNldF90b19ybWlpO1xcbitcXHRic3BfcHJpdi1cXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXFx1MDAzZXN1cHBvcnRzX3NnbWlpIHx8ICEhb3BzLVxcdTAwM2VzZXRfdG9fc2dtaWk7XFxuIFxcbiBcXHRpZiAob3BzLVxcdTAwM2Vpbml0KSB7XFxuIFxcdFxcdHJldCA9IG9wcy1cXHUwMDNlaW5pdChic3BfcHJpdik7XFxuQEAgLTEzNjEsNiArMTQxOSwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfY2hlY2tfb3BzKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxcbiBcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19ybWlpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxcbitcXHRcXHRpZiAoIWJzcF9wcml2LVxcdTAwM2VzdXBwb3J0c19zZ21paSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRkZXZfZXJyKGJzcF9wcml2LVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcXCJ1bnN1cHBvcnRlZCBpbnRlcmZhY2UgJWRcXFwiLCBic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKTtcXG5AQCAtMTM3OSwxNiArMTQ0MSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuK1xcdHJldCA9IGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgdHJ1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoYnNwX3ByaXYtXFx1MDAzZXBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpXFxuK1xcdFxcdGdvdG8gc2V0X21vZGU7XFxuK1xcbiBcXHRyZXQgPSBya19nZXRfcGh5X2ludGZfc2VsKGJzcF9wcml2LVxcdTAwM2VwaHlfaWZhY2UpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFxuIFxcdGludGYgPSByZXQ7XFxuIFxcbi1cXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0aWYgKGJzcF9wcml2LVxcdTAwM2VnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8XFxuIFxcdCAgICBic3BfcHJpdi1cXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzaykge1xcbiBcXHRcXHQvKiBJZiBkZWZpbmVkLCBlbmNvZGUgdGhlIHBoeV9pbnRmX3NlbCB2YWx1ZSAqL1xcbkBAIC0xMzk5LDEwICsxNDY0LDggQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdFxcdFxcdCAgICAgIGJzcF9wcml2LVxcdTAwM2VnbWFjX3JtaWlfbW9kZV9tYXNrKTtcXG4gXFxuIFxcdFxcdHJldCA9IHJrX3dyaXRlX2dtYWNfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spIHtcXG5AQCAtMTQxMCwxMyArMTQ3MywxMiBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcXG4gXFx0XFx0XFx0XFx0ICAgICBic3BfcHJpdi1cXHUwMDNlY2xvY2sucm1paV9tb2RlX21hc2spO1xcbiBcXG4gXFx0XFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcdH1cXG4gXFxuLVxcdC8qcm1paSBvciByZ21paSovXFxuK3NldF9tb2RlOlxcbitcXHQvKiBybWlpLCByZ21paSwgc2dtaWkgKi9cXG4gXFx0c3dpdGNoIChic3BfcHJpdi1cXHUwMDNlcGh5X2lmYWNlKSB7XFxuIFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxcbiBcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJpbml0IGZvciBSR01JSVxcXFxuXFxcIik7XFxuQEAgLTE0NDcsMTUgKzE1MDksMjAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGlmIChic3BfcHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfdG9fcm1paSlcXG4gXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdFxcdGRldl9pbmZvKGRldiwgXFxcImluaXQgZm9yIFNHTUlJXFxcXG5cXFwiKTtcXG4rXFx0XFx0aWYgKGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZXNldF90b19zZ21paSlcXG4rXFx0XFx0XFx0YnNwX3ByaXYtXFx1MDAzZW9wcy1cXHUwMDNlc2V0X3RvX3NnbWlpKGJzcF9wcml2KTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiTk8gaW50ZXJmYWNlIGRlZmluZWQhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBjbGtfZGlzYWJsZTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gcmtfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHR9XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2xrX2Rpc2FibGU7XFxuIFxcbiBcXHRwbV9ydW50aW1lX2dldF9zeW5jKGRldik7XFxuIFxcbkBAIC0xNDYzLDYgKzE1MzAsMTAgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXFxuIFxcdFxcdGJzcF9wcml2LVxcdTAwM2VvcHMtXFx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitjbGtfZGlzYWJsZTpcXG4rXFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXFxuQEAgLTE0ODYsNiArMTU1Nyw5IEBAIHN0YXRpYyB2b2lkIHJrX2dldF9pbnRlcmZhY2VzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdm9pZCAqYnNwX3ByaXYsXFxuIFxcbiBcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3JtaWkpXFxuIFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfUk1JSSwgaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRpZiAocmstXFx1MDAzZXN1cHBvcnRzX3NnbWlpKVxcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcXG5AQCAtMTYwMiw2ICsxNjc2LDE3IEBAIHN0YXRpYyBpbnQgcmtfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwbGF0X2RhdC1cXHUwMDNlc3VzcGVuZCA9IHJrX2dtYWNfc3VzcGVuZDtcXG4gXFx0cGxhdF9kYXQtXFx1MDAzZXJlc3VtZSA9IHJrX2dtYWNfcmVzdW1lO1xcbiBcXG4rXFx0aWYgKHBsYXRfZGF0LVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRcXHQvKiBTR01JSSBjbG9jayBhbHdheXMgcnVucyBhdCAxMjUgTUh6ICovXFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xcbitcXG4rXFx0XFx0LyogU0dNSUkgcmVxdWlyZXMgYSBQQ1MgKi9cXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZWRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGxhdF9kYXQtXFx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XFxuK1xcdFxcdHBsYXRfZGF0LVxcdTAwM2VwY3NfZXhpdCA9IHJrX3Bjc19leGl0O1xcbitcXHRcXHRwbGF0X2RhdC1cXHUwMDNlc2VsZWN0X3BjcyA9IHJrX3NlbGVjdF9wY3M7XFxuK1xcdH1cXG4rXFxuIFxcdHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdiA9IHJrX2dtYWNfc2V0dXAocGRldiwgcGxhdF9kYXQsIGRhdGEpO1xcbiBcXHRpZiAoSVNfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdikpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHBsYXRfZGF0LVxcdTAwM2Vic3BfcHJpdik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuY1xcbmluZGV4IDEzNjM0OTY1YmMxOWEuLjAxZGY0Nzc2ZWRiM2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXFxuQEAgLTM1LDggKzM1LDExIEBAIHN0YXRpYyBpbnQgcnpuMV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCByem4xX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRtaWljX2Rlc3Ryb3kocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1paWNfZGVzdHJveShwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MpO1xcbitcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb2NmcGdhLmNcXG5pbmRleCAxZDdmMGE1N2QyODg5Li42ZDRiYzFmZThmNzUxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xcbkBAIC01MzksOCArNTM5LDExIEBAIHN0YXRpYyBpbnQgc29jZnBnYV9kd21hY19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIFxcbiBzdGF0aWMgdm9pZCBzb2NmcGdhX2R3bWFjX3Bjc19leGl0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRpZiAocHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbi1cXHRcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlaHctXFx1MDAzZXBoeWxpbmtfcGNzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRseW54X3Bjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3Bjcyk7XFxuK1xcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuaW5kZXggYWZlOThmZjViZGNiMC4uZDJmNzdmMGMyMjNhNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1xcbkBAIC00MjYsMzYgKzQyNiwxNSBAQCBpbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cylcXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpkZXZub2RlLCAqcGNzbm9kZTtcXG4tXFx0c3RydWN0IGR3X3hwY3MgKnhwY3MgPSBOVUxMO1xcbi1cXHRpbnQgYWRkciwgcmV0O1xcbi1cXG4tXFx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKTtcXG4tXFxuLVxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdCkge1xcbi1cXHRcXHRyZXQgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdChwcml2KTtcXG4tXFx0fSBlbHNlIGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcXFwicGNzLWhhbmRsZVxcXCIpKSB7XFxuLVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcXG4tXFx0XFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcXG4tXFx0fSBlbHNlIGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEtXFx1MDAzZXBjc19tYXNrKSB7XFxuLVxcdFxcdGFkZHIgPSBmZnMocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlcGNzX21hc2spIC0gMTtcXG4tXFx0XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cXHUwMDNlbWlpLCBhZGRyKTtcXG4tXFx0XFx0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHhwY3MpO1xcbi1cXHR9IGVsc2Uge1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfaW5pdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4gXFxuK1xcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19pbml0KHByaXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShwcml2LVxcdTAwM2VkZXZpY2UsIHJldCwgXFxcIk5vIHhQQ1MgZm91bmRcXFxcblxcXCIpO1xcbiBcXG4tXFx0aWYgKHhwY3MpXFxuLVxcdFxcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbXVsdF9mYWN0XzEwMG5zKTtcXG4tXFxuLVxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzID0geHBjcztcXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00NjMsMTQgKzQ0MiwxMCBAQCB2b2lkIHN0bW1hY19wY3NfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIHtcXG4gXFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbi1cXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcGNzX2V4aXQpXFxuLVxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBjc19leGl0KHByaXYpO1xcbi1cXG4tXFx0aWYgKCFwcml2LVxcdTAwM2Vody1cXHUwMDNleHBjcylcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfZXhpdClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0eHBjc19kZXN0cm95KHByaXYtXFx1MDAzZWh3LVxcdTAwM2V4cGNzKTtcXG4tXFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXhwY3MgPSBOVUxMO1xcbitcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwY3NfZXhpdChwcml2KTtcXG4gfVxcbiBcXG4gc3RydWN0IHN0bW1hY19jbGtfcmF0ZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXG5pbmRleCBlNDE3ZmQ2NmY2NjBhLi44OGJjNDA3OTFlNjlmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcXG5AQCAtMTIsNiArMTIsMjkgQEAgY29uZmlnIFBDU19YUENTXFxuIFxcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIFN5bm9wc3lzXFxuIFxcdCAgRGVzaWduV2FyZSBYUENTIGNvbnRyb2xsZXJzLlxcbiBcXG4raWYgUENTX1hQQ1NcXG4rXFxuK2NvbmZpZyBQQ1NfWFBDU19QTEFURk9STVxcbitcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFxcXCJcXG4rXFx0ZGVmYXVsdCBQQ1NfWFBDU1xcbitcXHRoZWxwXFxuK1xcdCAgR2VuZXJpYyBEV1hQQ1MgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxcbitcXHQgIHBsYXRmb3JtIHNwZWNpZmljIGNvZGUgdG8gZnVuY3Rpb24gb3IgaXMgdXNpbmcgcGxhdGZvcm1cXG4rXFx0ICBkYXRhIGZvciBzZXR1cC5cXG4rXFxuK1xcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cXG4rXFxuK2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxcbitcXHR0cmlzdGF0ZSBcXFwiUm9ja2NoaXAgWFBDUyBjb250cm9sbGVyIHN1cHBvcnRcXFwiXFxuK1xcdGRlZmF1bHQgQVJDSF9ST0NLQ0hJUFxcbitcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcXG4rXFx0aGVscFxcbitcXHQgIFN1cHBvcnQgZm9yIFhQQ1MgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzM1NnggU29DLlxcbitcXG4rXFx0ICBJZiB5b3UgaGF2ZSBhIFJvY2tjaGlwIFNvQyB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuK1xcbitlbmRpZiAjIFBDU19YUENTXFxuK1xcbiBjb25maWcgUENTX0xZTlhcXG4gXFx0dHJpc3RhdGVcXG4gXFx0aGVscFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9wY3MvTWFrZWZpbGVcXG5pbmRleCA0Zjc5MjA2MThiOTAwLi5mOWY2Y2YyNTc4ZDcyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxcbkBAIC0xLDEwICsxLDExIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gIyBNYWtlZmlsZSBmb3IgTGludXggUENTIGRyaXZlcnNcXG4gXFxuLXBjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVxcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtcGxhdC5vIFxcXFxcXG4tXFx0XFx0XFx0XFx0ICAgcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xcbitwY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcXHQ6PSBwY3MteHBjcy5vIHBjcy14cGNzLW54cC5vIHBjcy14cGNzLXd4Lm9cXG4gXFxuIG9iai0kKENPTkZJR19QQ1NfWFBDUylcXHRcXHQrPSBwY3NfeHBjcy5vXFxuK29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgKz0gcGNzLXhwY3MtcGxhdC5vXFxuK29iai0kKENPTkZJR19QQ1NfWFBDU19ST0NLQ0hJUCkgKz0gcGNzLXhwY3Mtcmsub1xcbiBvYmotJChDT05GSUdfUENTX0xZTlgpXFx0XFx0Kz0gcGNzLWx5bngub1xcbiBvYmotJChDT05GSUdfUENTX01US19MWU5YSSlcXHQrPSBwY3MtbXRrLWx5bnhpLm9cXG4gb2JqLSQoQ09ORklHX1BDU19SWk4xX01JSUMpXFx0Kz0gcGNzLXJ6bjEtbWlpYy5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjY4YmNhYTFhNWNiYmZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcXG5AQCAtMCwwICsxLDU0MyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcXG4rICpcXG4rICogQmFzZWQgb24gdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBwbGF0Zm9ybSBkcml2ZXIuXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBTZW1pblxcbisgKlxcbisgKiBBZGFwdGVkIGZvciBSb2NrY2hpcCBTb0NzLCB3aXRoIHJlZmVyZW5jZSB0byB0aGUgUm9ja2NoaXAgT0VNIGRyaXZlci5cXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IENvaWEgUHJhbnRcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRvbWljLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9kb21haW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInBjcy14cGNzLmhcXFwiXFxuK1xcbitzdHJ1Y3QgZHdfeHBjc19yayB7XFxuK1xcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdHZvaWQgX19pb21lbSAqcmVnX2Jhc2U7XFxuK1xcdHN0cnVjdCBwaHkgKnNlcmRlc19waHk7XFxuK1xcdHN0cnVjdCBjbGsgKmNzcl9jbGs7XFxuK1xcdHN0cnVjdCBjbGsgKmVlZV9jbGs7XFxuK307XFxuK1xcbitzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcXG4re1xcbitcXHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0cHRyZGlmZl90IGNzcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xcbitcXG4rXFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWFkbChweHBjcy1cXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFxcdTAwM2NcXHUwMDNjIDIpKSBcXHUwMDI2IDB4ZmZmZjtcXG4rXFxuK1xcdHBtX3J1bnRpbWVfcHV0KFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3dyaXRlX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0cHRyZGlmZl90IGNzcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xcbitcXG4rXFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR3cml0ZWwodmFsLCBweHBjcy1cXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFxcdTAwM2NcXHUwMDNjIDIpKTtcXG4rXFxuK1xcdHBtX3J1bnRpbWVfcHV0KFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTFcXHQyXFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcXHQzXFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTNcXHQ0XFxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX1BNQVBNRFxcdDZcXG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXFx0N1xcbitcXG4rc3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXFxuK3tcXG4rXFx0cmV0dXJuICEoYWRkciBcXHUwMDNjIDAgfHwgYWRkciBcXHUwMDNlIDMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZylcXG4re1xcbitcXHRzd2l0Y2ggKGRldikge1xcbitcXHRjYXNlIE1ESU9fTU1EX1BNQVBNRDpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9QTUFQTUQ7XFxuK1xcdGNhc2UgTURJT19NTURfVkVORDI6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOWElPO1xcbitcXHR9XFxuK1xcbitcXHQvKiByZWFkIHJlbWFwcGluZyB0byBNSUkgaXMgcGVyZm9ybWVkIGJ5IEhXICovXFxuK1xcdHN3aXRjaCAoYWRkcikge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMTtcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7XFxuK1xcdGNhc2UgMzpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3dpdGNoIChkZXYpIHtcXG4rXFx0Y2FzZSBNRElPX01NRF9QTUFQTUQ6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EO1xcbitcXHRjYXNlIE1ESU9fTU1EX1ZFTkQyOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFx0fVxcbitcXG4rXFx0LyogV3JpdGFibGUgb25seSBvbiBNSUkgKi9cXG4rXFx0c3dpdGNoIChyZWcpIHtcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcXG4rXFx0Y2FzZSBEV19WUl9NSUlfQU5fSU5UUl9TVFM6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDA6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XFxuK1xcdGNhc2UgRFdfVlJfTUlJX0RJR19DVFJMMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKGFkZHIpIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xcbitcXHRjYXNlIDM6XFxuK1xcdFxcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGRldjtcXG4rXFxuK1xcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgZGV2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoYWRkciwgZGV2LCByZWcpO1xcbitcXHRpZiAoZGV2IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4rXFxuK1xcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIGRldiwgcmVnKTtcXG4rXFx0aWYgKGRldiBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHhwY3Nfcmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBkd194cGNzX3JrICp4cGNzX3JrX2NyZWF0ZV9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXG4rXFx0cHhwY3MgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpweHBjcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXB4cGNzKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4rXFxuK1xcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBweHBjcyk7XFxuK1xcbitcXHRyZXR1cm4gcHhwY3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbitcXG4rXFx0cHhwY3MtXFx1MDAzZXNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBcXFwic2VyZGVzXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBTZXJEZXMgUEhZXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHhwY3MtXFx1MDAzZXBkZXYtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHBoeV9wb3dlcl9vZmYocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRwaHlfZXhpdChweHBjcy1cXHUwMDNlc2VyZGVzX3BoeSk7XFxuK1xcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQsIHdoaWNoIGFsbG93cyB1cyB0b1xcbitcXHQgKiBkeW5hbWljYWxseSB0dXJuIHRoZSBDU1IgY2xvY2sgb24vb2ZmIHVzaW5nIFBNIHdoaWxlIGtlZXBpbmcgdGhlIFBDU1xcbitcXHQgKiBwb3dlcmVkIG9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCB0cnVlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBwb3dlciBvbiBwb3dlci1kb21haW5zXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGh5X2luaXQocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gcG1fZG9tYWluO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXFx1MDAzZXNlcmRlc19waHkpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIHNlcmRlc19waHk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHhwY3Nfcmtfc2VyZGVzX3BoeV9wb3dlcm9mZiwgcHhwY3MpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3NlcmRlc19waHk6XFxuK1xcdHBoeV9leGl0KHB4cGNzLVxcdTAwM2VzZXJkZXNfcGh5KTtcXG4rcG1fZG9tYWluOlxcbitcXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfcmVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcXG4re1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtXFx1MDAzZXBkZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbitcXG4rXFx0cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTtcXG4rXFx0aWYgKCFyZXMpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJObyByZWctc3BhY2UgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJlc291cmNlX3NpemUocmVzKSBcXHUwMDNjIFNaXzJNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCByZWctc3BhY2Ugc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlcmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xcbitcXHRpZiAoSVNfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSkpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHB4cGNzLVxcdTAwM2VyZWdfYmFzZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB4cGNzX3JrX2V4aXRfY2xrKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcbitcXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXFx1MDAzZWVlZV9jbGspO1xcbitcXG4rXFx0cG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19pbml0X2NsayhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnB4cGNzLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRweHBjcy1cXHUwMDNlY3NyX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFxcXCJjc3JcXFwiKTtcXG4rXFx0aWYgKElTX0VSUihweHBjcy1cXHUwMDNlY3NyX2NsaykpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihweHBjcy1cXHUwMDNlY3NyX2NsayksXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIGdldCBDU1IgY2xvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cHhwY3MtXFx1MDAzZWVlZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBcXFwiZWVlXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MtXFx1MDAzZWVlZV9jbGspKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXFx1MDAzZWVlZV9jbGspLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byBnZXQgRUVFIGNsb2NrXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cXHUwMDNlZWVlX2Nsayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gZW5hYmxlIEVFRSBjbG9ja1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xcbitcXHRwbV9ydW50aW1lX2VuYWJsZShkZXYpO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgeHBjc19ya19leGl0X2NsaywgcHhwY3MpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIEVFRSBjbG9jazogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9idXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZweHBjcy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdGF0aWMgYXRvbWljX3QgaWQgPSBBVE9NSUNfSU5JVCgtMSk7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRidXMgPSBkZXZtX21kaW9idXNfYWxsb2Nfc2l6ZShkZXYsIDApO1xcbitcXHRpZiAoIWJ1cylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRidXMtXFx1MDAzZW5hbWUgPSBcXFwiUm9ja2NoaXAgRFcgWFBDUyBNQ0kvQVBCM1xcXCI7XFxuK1xcdGJ1cy1cXHUwMDNlcmVhZCA9IHhwY3NfcmtfcmVhZF9jMjI7XFxuK1xcdGJ1cy1cXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcXG4rXFx0YnVzLVxcdTAwM2VyZWFkX2M0NSA9IHhwY3NfcmtfcmVhZF9jNDU7XFxuK1xcdGJ1cy1cXHUwMDNld3JpdGVfYzQ1ID0geHBjc19ya193cml0ZV9jNDU7XFxuK1xcdGJ1cy1cXHUwMDNlcGh5X21hc2sgPSB+MDtcXG4rXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuK1xcdGJ1cy1cXHUwMDNlcHJpdiA9IHB4cGNzO1xcbitcXG4rXFx0c25wcmludGYoYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLFxcbitcXHRcXHQgXFxcInJvY2tjaGlwX2R3eHBjcy0leFxcXCIsIGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZpZCkpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogTURJTy1idXMgaGVyZSBzZXJ2ZXMgYXMganVzdCBhIGJhY2stZW5kIGVuZ2luZSBhYnN0cmFjdGluZyBvdXRcXG4rXFx0ICogdGhlIE1ESU8gYW5kIE1DSS9BUEIzIElPIGludGVyZmFjZXMgdXRpbGl6ZWQgZm9yIHRoZSBSb2NrY2hpcCBEV1hQQ1MgQ1NSc1xcbitcXHQgKiBhY2Nlc3MuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHB4cGNzLVxcdTAwM2VidXMgPSBidXM7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRweHBjcyA9IHhwY3NfcmtfY3JlYXRlX2RhdGEocGRldik7XFxuK1xcdGlmIChJU19FUlIocHhwY3MpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgWFBDUyBtYXkgYmUgYXR0YWNoZWQgdG8gYSBwb3dlciBkb21haW4gKGUuZy4gUERfUElQRSkuIFRoZSBkb21haW5cXG4rXFx0ICogbXVzdCBiZSBwb3dlcmVkIG9uIGJlZm9yZSBhbnkgcmVnaXN0ZXIgYWNjZXNzLCBvdGhlcndpc2UgdGhlIFNvQyB3aWxsXFxuK1xcdCAqIHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoU0Vycm9yKS5cXG4rXFx0ICpcXG4rXFx0ICogQWNjZXNzaW5nIHRoZSBYUENTIHJlZ2lzdGVycyBhbHNvIHJlcXVpcmVzIGEgVFggY2xvY2sgZnJvbSB0aGUgU2VyRGVzLFxcbitcXHQgKiB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzb2Z0IHJlc2V0LlxcbitcXHQgKi9cXG4rXFx0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X2luaXQocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24ocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geHBjc19ya19pbml0X3JlcyhweHBjcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB4cGNzX3JrX2luaXRfY2xrKHB4cGNzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHhwY3NfcmtfaW5pdF9idXMocHhwY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhwY3Nfcmtfb2ZfaWRzW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicm9ja2NoaXAscmszNTY4LXhwY3NcXFwiIH0sXFxuK1xcdHsgLyogc2VudGluZWwgKi8gfSxcXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xcbitcXG4rc3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4re1xcbitcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ucDtcXG4rXFx0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xcbitcXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcztcXG4rXFx0dTMyIHBvcnQ7XFxuK1xcbitcXHRpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFxuK1xcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgXFxcInJlZ1xcXCIsIFxcdTAwMjZwb3J0KSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbitcXG4rXFx0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cXG4rXFx0cGNzX25wID0gb2ZfZ2V0X3BhcmVudChucCk7XFxuK1xcdGlmICghcGNzX25wKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4rXFxuK1xcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwY3NfbnApKSB7XFxuK1xcdFxcdG9mX25vZGVfcHV0KHBjc19ucCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIW9mX21hdGNoX25vZGUoeHBjc19ya19vZl9pZHMsIHBjc19ucCkpIHtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcdH1cXG4rXFxuK1xcdHBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBjc19ucCk7XFxuK1xcdG9mX25vZGVfcHV0KHBjc19ucCk7XFxuK1xcdGlmICghcGRldilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XFxuK1xcbitcXHRkZXZpY2VfbG9jayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0cHhwY3MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0aWYgKCFweHBjcyB8fCAhcHhwY3MtXFx1MDAzZWJ1cykge1xcbitcXHRcXHRkZXZpY2VfdW5sb2NrKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTtcXG4rXFx0fVxcbitcXG4rXFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG4rXFx0ZGV2aWNlX3VubG9jayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKElTX0VSUih4cGNzKSkge1xcbitcXHRcXHRwdXRfZGV2aWNlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbitcXHRcXHRyZXR1cm4geHBjcztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XFxuK1xcdFxcdHhwY3NfZGVzdHJveSh4cGNzKTtcXG4rXFx0XFx0cHV0X2RldmljZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuK1xcdHJldHVybiB4cGNzO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHhwY3NfcmtfY3JlYXRlKTtcXG4rXFxuK3N0YXRpYyBpbnQgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXG4rXFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLVxcdTAwM2Vjc3JfY2xrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXG4rXFx0cmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cXHUwMDNlY3NyX2Nsayk7XFxuK31cXG4rXFxuK3N0YXRpYyBERUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHhwY3NfcmtfcG1fb3BzLFxcbitcXHRcXHRcXHQgICB4cGNzX3JrX3BtX3J1bnRpbWVfc3VzcGVuZCxcXG4rXFx0XFx0XFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3Jlc3VtZSxcXG4rXFx0XFx0XFx0ICAgTlVMTCk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4cGNzX3JrX2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0geHBjc19ya19wcm9iZSxcXG4rXFx0LmRyaXZlciA9IHtcXG4rXFx0XFx0Lm5hbWUgPSBcXFwicmtfeHBjcy1kd3hwY3NcXFwiLFxcbitcXHRcXHQucG0gPSBwbV9wdHIoXFx1MDAyNnhwY3NfcmtfcG1fb3BzKSxcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0geHBjc19ya19vZl9pZHMsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeHBjc19ya19kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJSb2NrY2hpcCBYUENTIHBsYXRmb3JtIGRldmljZSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiQ29pYSBQcmFudCBcXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXFxuaW5kZXggMDMzN2UyYmNjMDEyNS4uNTBiOWNkZjk0ZmRhYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXFxuQEAgLTgxNiw5ICs4MTYsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbitcXHQvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqL1xcbitcXHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdGlmIChuZWdfbW9kZSA9PSBQSFlMSU5LX1BDU19ORUdfSU5CQU5EX0VOQUJMRUQpXFxuIFxcdFxcdHJldCA9IHhwY3Nfd3JpdGUoeHBjcywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLFxcbi1cXHRcXHRcXHRcXHQgbWRpb19jdHJsIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdFxcdFxcdFxcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xMDkzLDEwICsxMDk4LDE1IEBAIHN0YXRpYyBpbnQgeHBjc19nZXRfc3RhdGVfYzM3X3NnbWlpKHN0cnVjdCBkd194cGNzICp4cGNzLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqL1xcbi1cXHRpZiAoc3RhdGUtXFx1MDAzZWFuX2NvbXBsZXRlKVxcbitcXHRpZiAoc3RhdGUtXFx1MDAzZWFuX2NvbXBsZXRlKSB7XFxuK1xcdFxcdC8qIENsZWFyIEFOIGNvbXBsZXRlIHN0YXR1cyBvciBpbnRlcnJ1cHQgKi9cXG4gXFx0XFx0eHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcXG4gXFxuK1xcdFxcdC8qIEluaXRpYXRlIHRoZSBuZXh0IHJvdW5kIG9mIEFOICovXFxuK1xcdFxcdHhwY3NfbW9kaWZ5KHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUiwgQk1DUl9BTlJFU1RBUlQsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuYyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xcbisrKyBiL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXFxuQEAgLTE4Niw2ICsxODYsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcge1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV94cGNzX3BoeV9yZWFkeTtcXG4gXFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfcGNpZTFsMF9zZWw7XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDFfc2VsO1xcbitcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9zZ21paV9tYWNfc2VsO1xcbiBcXHRzdHJ1Y3QgY29tYnBoeV9yZWcgdTNvdGcwX3BvcnRfZW47XFxuIFxcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzFfcG9ydF9lbjtcXG4gfTtcXG5AQCAtMjEyLDYgKzIxMyw3IEBAIHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYge1xcbiBcXHRib29sIGVuYWJsZV9zc2M7XFxuIFxcdGJvb2wgZXh0X3JlZmNsaztcXG4gXFx0c3RydWN0IGNsayAqcmVmY2xrO1xcbitcXHR1MzIgc2dtaWlfbWFjX3NlbDtcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIHJvY2tjaGlwX2NvbWJwaHlfdXBkYXRlbChzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2ICpwcml2LFxcbkBAIC0zNzUsNiArMzc3LDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9jb21icGh5X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlcXG4gXFxuIFxcdHByaXYtXFx1MDAzZWV4dF9yZWZjbGsgPSBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsIFxcXCJyb2NrY2hpcCxleHQtcmVmY2xrXFxcIik7XFxuIFxcbitcXHRwcml2LVxcdTAwM2VzZ21paV9tYWNfc2VsID0gMTtcXG4rXFx0ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXFxcInJvY2tjaGlwLHNnbWlpLW1hYy1zZWxcXFwiLCBcXHUwMDI2cHJpdi1cXHUwMDNlc2dtaWlfbWFjX3NlbCk7XFxuK1xcbiBcXHRwcml2LVxcdTAwM2VwaHlfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9leGNsdXNpdmUoZGV2LCBcXFwicGh5XFxcIik7XFxuIFxcdC8qIGZhbGxiYWNrIHRvIG9sZCBiZWhhdmlvdXIgKi9cXG4gXFx0aWYgKFBUUl9FUlIocHJpdi1cXHUwMDNlcGh5X3JzdCkgPT0gLUVOT0VOVClcXG5AQCAtODczLDYgKzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcXG4rXFx0XFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVxcdTAwM2VwaXBlX2dyZiwgXFx1MDAyNmNmZy1cXHUwMDNlcGlwZV9zZ21paV9tYWNfc2VsLFxcbitcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VzZ21paV9tYWNfc2VsIFxcdTAwM2UgMCk7XFxuIFxcdFxcdHJvY2tjaGlwX2NvbWJwaHlfcGFyYW1fd3JpdGUocHJpdi1cXHUwMDNlcGlwZV9ncmYsIFxcdTAwMjZjZmctXFx1MDAzZXBpcGVfeHBjc19waHlfcmVhZHksIHRydWUpO1xcbiBcXHRcXHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXFx1MDAzZXBoeV9ncmYsIFxcdTAwMjZjZmctXFx1MDAzZXBpcGVfcGh5bW9kZV9zZWwsIHRydWUpO1xcbiBcXHRcXHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXFx1MDAzZXBoeV9ncmYsIFxcdTAwMjZjZmctXFx1MDAzZXBpcGVfc2VsX3FzZ21paSwgdHJ1ZSk7XFxuQEAgLTk4NCw2ICs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7XFxuIFxcdC5jb24zX2Zvcl9zYXRhXFx0XFx0PSB7IDB4MDAwYywgMTUsIDAsIDB4MDAsIDB4NDQwNyB9LFxcbiBcXHQvKiBwaXBlLWdyZiAqL1xcbiBcXHQucGlwZV9jb24wX2Zvcl9zYXRhXFx0PSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LFxcbitcXHQucGlwZV9zZ21paV9tYWNfc2VsXFx0PSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LFxcbiBcXHQucGlwZV94cGNzX3BoeV9yZWFkeVxcdD0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSxcXG4gXFx0LnUzb3RnMF9wb3J0X2VuXFx0XFx0PSB7IDB4MDEwNCwgMTUsIDAsIDB4MDE4MSwgMHgxMTAwIH0sXFxuIFxcdC51M290ZzFfcG9ydF9lblxcdFxcdD0geyAweDAxNDQsIDE1LCAwLCAweDAxODEsIDB4MTEwMCB9LFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjg3MjNkNWJkNzVjY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXFxuQEAgLTAsMCArMSwxMSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisjaWZuZGVmIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxcbisjZGVmaW5lIF9fTElOVVhfUENTX1hQQ1NfUk9DS0NISVBfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy5oXFx1MDAzZVxcbitcXG4rc3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucCk7XFxuK1xcbisjZW5kaWYgLyogX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjAxLjQwNjE4NTEyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQ4MTg5OTkyNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IFBoeXNpY2FsIENvZGluZyBTdWJsYXllciAoWFBDUykgb24gUm9ja2NoaXAgUkszNTY4IFNvQ3MsIGluY2x1ZGluZyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgKHBjcy14cGNzLXJrKSwgY29tYnBoeSB1cGRhdGVzLCBkZXZpY2UgdHJlZSBiaW5kaW5ncyBhbmQgRFRTIG5vZGVzLCBhbmQgcmVsYXRlZCBzdG1tYWMvcGNzLXhwY3MgcGx1bWJpbmcgYWNyb3NzIGR3bWFjLXJrLCBkd21hYy1pbnRlbCwgZHdtYWMtcmVuZXNhcy1nYmV0aCwgZHdtYWMtcnpuMSwgYW5kIGR3bWFjLXNvY2ZwZ2EuIEFsbCBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gZHJpdmVycyBmb3IgcGh5c2ljYWwgU29DIHBsYXRmb3JtIGRldmljZXMgYW5kIHZlbmRvci1zcGVjaWZpYyBNQUNzL1BIWXMgKFJvY2tjaGlwIFJLMzU2OCwgSW50ZWwgU29DIE1BQ3MsIFJlbmVzYXMsIFNvQyBGUEdBKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUgLyBHQ0Ugb24gYW1kNjQpLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTAwN2M3MGU3MTQzNjI4ZGU5YzVmZDhjNjMzMmEwODc0ZmQ4MTBhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTk6NTU6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDg1MmQwYmNiNjZhMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9wY3Mvcm9ja2NoaXAtZHd4cGNzLnlhbWxcbkBAIC0wLDAgKzEsMTEwIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcGNzL3JvY2tjaGlwLWR3eHBjcy55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBSb2NrY2hpcCBSSzM1NjggU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQQ1NcbitcbittYWludGFpbmVyczpcbisgIC0gQ29pYSBQcmFudCBcdTAwM2Njb2lhcHJhbnRAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246IHxcbisgIFJvY2tjaGlwIFJLMzU2OCBTb0MgaW50ZWdyYXRlcyBhIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgUGh5c2ljYWxcbisgIENvZGluZyBTdWJsYXllciAoWFBDUykuXG4rICBUaGUgUENTIHByb3ZpZGVzIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBNZWRpYSBBY2Nlc3MgQ29udHJvbCAoTUFDKVxuKyAgYW5kIHRoZSBQaHlzaWNhbCBNZWRpdW0gQXR0YWNobWVudCAoUE1BKSBzdWJsYXllciB0aHJvdWdoIGEgTWVkaWFcbisgIEluZGVwZW5kZW50IEludGVyZmFjZSAoR01JSSkuXG4rXG4rICBUaGUgWFBDUyBpcyBhY2Nlc3NlZCBvdmVyIHRoZSBBUEIzIGJ1cyBhbmQgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gYVxuKyAgTmFuZW5nIENvbWJvIFNlckRlcyBQSFkuXG4rICBJdCBzdXBwb3J0cyAxMDAwQkFTRS1YLCBTR01JSSBhbmQgUVNHTUlJIG1vZGVzLlxuK1xuKyAgVGhlIGJsb2NrIGNvbnRhaW5zIGZvdXIgTUlJIHBvcnRzIHRoYXQgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZFxuKyAgcm91dGVkIHRvIG9uZSBvZiB0aGUgRXRoZXJuZXQgR01BQyBjb250cm9sbGVycyB2aWEgdGhlIHBjcy1oYW5kbGVcbisgIHByb3BlcnR5IGluIHRoZSBNQUMgZGV2aWNlIHRyZWUgbm9kZS5cbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IHJvY2tjaGlwLHJrMzU2OC14cGNzXG4rXG4rICByZWc6XG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBcIiNhZGRyZXNzLWNlbGxzXCI6XG4rICAgIGNvbnN0OiAxXG4rXG4rICBcIiNzaXplLWNlbGxzXCI6XG4rICAgIGNvbnN0OiAwXG4rXG4rICBjbG9ja3M6XG4rICAgIGl0ZW1zOlxuKyAgICAgIC0gZGVzY3JpcHRpb246IEFQQjMgYnVzIGludGVyZmFjZSBjbG9jayAoY2xrX2Nzcl9pKSwgcmVxdWlyZWQgZm9yIHJlZ2lzdGVyIGFjY2Vzc1xuKyAgICAgIC0gZGVzY3JpcHRpb246IEVFRSBjbG9jayAoY2xrX2VlZV9pKSwgcmVxdWlyZWQgZm9yIEVuZXJneSBFZmZpY2llbnQgRXRoZXJuZXQgb3BlcmF0aW9uXG4rXG4rICBjbG9jay1uYW1lczpcbisgICAgaXRlbXM6XG4rICAgICAgLSBjb25zdDogY3NyXG4rICAgICAgLSBjb25zdDogZWVlXG4rXG4rICBwaHlzOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgcGh5LW5hbWVzOlxuKyAgICBjb25zdDogc2VyZGVzXG4rXG4rICBwb3dlci1kb21haW5zOlxuKyAgICBtYXhJdGVtczogMVxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXCJecGNzLW1paUBbMC0zXSRcIjpcbisgICAgdHlwZTogb2JqZWN0XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIE9uZSBvZiB0aGUgZm91ciBNSUkgcG9ydHMgb2YgdGhlIFhQQ1MuIFRoZSBwb3J0IGlzIGxpbmtlZCB0byBhblxuKyAgICAgIEV0aGVybmV0IE1BQyBjb250cm9sbGVyIHZpYSB0aGUgcGNzLWhhbmRsZSBwcm9wZXJ0eSBpbiB0aGUgTUFDJ3NcbisgICAgICBkZXZpY2UgdHJlZSBub2RlLlxuK1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIHJlZzpcbisgICAgICAgIGRlc2NyaXB0aW9uOiBNSUkgcG9ydCBudW1iZXIuXG4rICAgICAgICBlbnVtOiBbMCwgMSwgMiwgM11cbitcbisgICAgcmVxdWlyZWQ6XG4rICAgICAgLSByZWdcbitcbisgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcmVnXG4rICAtIFwiI2FkZHJlc3MtY2VsbHNcIlxuKyAgLSBcIiNzaXplLWNlbGxzXCJcbisgIC0gY2xvY2tzXG4rICAtIGNsb2NrLW5hbWVzXG4rICAtIHBoeXNcbisgIC0gcGh5LW5hbWVzXG4rICAtIHBvd2VyLWRvbWFpbnNcbitcbithZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9jbG9jay9yazM1NjgtY3J1LmhcdTAwM2VcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcG93ZXIvcmszNTY4LXBvd2VyLmhcdTAwM2VcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvcGh5L3BoeS5oXHUwMDNlXG4rXG4rICAgIHBjc0BmZGEwMDAwMCB7XG4rICAgICAgY29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIjtcbisgICAgICByZWcgPSBcdTAwM2MweGZkYTAwMDAwIDB4MjAwMDAwXHUwMDNlO1xuKyAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbisgICAgICBjbG9jay1uYW1lcyA9IFwiY3NyXCIsIFwiZWVlXCI7XG4rICAgICAgcGh5cyA9IFx1MDAzY1x1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXHUwMDNlO1xuKyAgICAgIHBoeS1uYW1lcyA9IFwic2VyZGVzXCI7XG4rICAgICAgcG93ZXItZG9tYWlucyA9IFx1MDAzY1x1MDAyNnBvd2VyIFJLMzU2OF9QRF9QSVBFXHUwMDNlO1xuK1xuKyAgICAgIHBjcy1taWlAMCB7XG4rICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgIH07XG4rICAgIH07XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LnlhbWxcbmluZGV4IDM3OWIwOGJkOWU5N2EuLjhlODk4YmNlOWFmNzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS55YW1sXG5AQCAtODAsNiArODAsMTUgQEAgcHJvcGVydGllczpcbiAgICAgZGVzY3JpcHRpb246XG4gICAgICAgU29tZSBhZGRpdGlvbmFsIHBpcGUgc2V0dGluZ3MgYXJlIGFjY2Vzc2VkIHRocm91Z2ggR1JGIHJlZ3MuXG4gXG4rICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOlxuKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzJcbisgICAgZW51bTogWzAsIDFdXG4rICAgIGRlZmF1bHQ6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgU2VsZWN0IGdtYWMwIG9yIGdtYWMxIHRvIGJlIHVzZWQgYXMgU0dNSUkgY29udHJvbGxlci5cbisgICAgICBUaGUgaGFyZHdhcmUgcmVzZXQgdmFsdWUgaXMgR01BQzEgKDEpLiBTZXQgdGhpcyB0byAwIHRvIHJvdXRlXG4rICAgICAgU0dNSUkgdG8gR01BQzAuXG4rXG4gICBcIiNwaHktY2VsbHNcIjpcbiAgICAgY29uc3Q6IDFcbiBcbkBAIC0xMDUsNiArMTE0LDEwIEBAIGFsbE9mOlxuICAgICAgICAgICBtYXhJdGVtczogMVxuICAgICAgICAgcmVzZXQtbmFtZXM6XG4gICAgICAgICAgIG1heEl0ZW1zOiAxXG4rICAgICAgICByb2NrY2hpcCxzZ21paS1tYWMtc2VsOiB0cnVlXG4rICAgIGVsc2U6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHJvY2tjaGlwLHNnbWlpLW1hYy1zZWw6IGZhbHNlXG4gICAtIGlmOlxuICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICBjb21wYXRpYmxlOlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGZjMzIwYjM3MzY1NmYuLmRkYTRkMjExYjdkYjQgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMzczOCw2ICsyMzczOCwxNSBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcm9ja2NoaXAscmszNTc2LXNhaS55YW1sXG4gRjpcdHNvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9zYWkuKlxuIFxuK1JPQ0tDSElQIFhQQ1MgRFJJVkVSXG4rTTpcdENvaWEgUHJhbnQgXHUwMDNjY29pYXByYW50QGdtYWlsLmNvbVx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rTDpcdGxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Bjcy9yb2NrY2hpcC1kd3hwY3MueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xuK0Y6XHRpbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXG4rXG4gUk9DS0VSIERSSVZFUlxuIE06XHRKaXJpIFBpcmtvIFx1MDAzY2ppcmlAcmVzbnVsbGkudXNcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXBob3RvbmljYXQuZHRzIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbmluZGV4IDU4YzEwNTJiYThlZjMuLjI1Y2FhNDQxOTg4NDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC1waG90b25pY2F0LmR0c1xuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjgtcGhvdG9uaWNhdC5kdHNcbkBAIC0zLDYgKzMsNyBAQFxuIC9kdHMtdjEvO1xuIFxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3BpbmN0cmwvcm9ja2NoaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL3NvYy9yb2NrY2hpcCx2b3AyLmhcdTAwM2VcbiAjaW5jbHVkZSBcInJrMzU2OC5kdHNpXCJcbkBAIC0yNDIsNiArMjQzLDcgQEAgXHUwMDI2Y29tYnBoeTEge1xuIFxuIFx1MDAyNmNvbWJwaHkyIHtcbiBcdHN0YXR1cyA9IFwib2theVwiO1xuK1x0cm9ja2NoaXAsc2dtaWktbWFjLXNlbCA9IFx1MDAzYzBcdTAwM2U7XG4gfTtcbiBcbiBcdTAwMjZjcHUwIHtcbkBAIC0yNjAsOSArMjYyLDE4IEBAIFx1MDAyNmNwdTMge1xuIFx0Y3B1LXN1cHBseSA9IFx1MDAzY1x1MDAyNnZkZF9jcHVcdTAwM2U7XG4gfTtcbiBcbi0vKiBNb3RvcmNvbW0gWVQ4NTIxU0MgTEFOIHBvcnQgKHJlcXVpcmUgU0dNSUkpICovXG4rLyogTW90b3Jjb21tIFlUODUyMVNDIExBTiBwb3J0ICovXG4gXHUwMDI2Z21hYzAge1xuLVx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0YXNzaWduZWQtY2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFNDTEtfR01BQzBfUlhfVFhcdTAwM2U7XG4rXHRhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gXHUwMDNjXHUwMDI2eHBjc19nbWFjMF9jbGtcdTAwM2U7XG4rXHRwY3MtaGFuZGxlID0gXHUwMDNjXHUwMDI2eHBjc19taWkwXHUwMDNlO1xuK1x0bWFuYWdlZCA9IFwiaW4tYmFuZC1zdGF0dXNcIjtcbitcdHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZzZ21paV9waHlcdTAwM2U7XG4rXHRwaHktbW9kZSA9IFwic2dtaWlcIjtcbitcdHBoeS1zdXBwbHkgPSBcdTAwM2NcdTAwMjZ2Y2NfM3YzXHUwMDNlO1xuK1x0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuK1x0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Z21hYzBfbWlpbVx1MDAzZTtcbitcdHN0YXR1cyA9IFwib2theVwiO1xuIH07XG4gXG4gLyogTW90b3Jjb21tIFlUODUyMVNDIFdBTiBwb3J0ICovXG5AQCAtMzQxLDYgKzM1MiwzNiBAQCBcdTAwMjZpMnMwXzhjaCB7XG4gXHRzdGF0dXMgPSBcIm9rYXlcIjtcbiB9O1xuIFxuK1x1MDAyNm1kaW8wIHtcbitcdHNnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuK1x0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuK1x0XHRyZWcgPSBcdTAwM2MweDNcdTAwM2U7XG4rXHRcdG1heC1zcGVlZCA9IFx1MDAzYzEwMDBcdTAwM2U7XG4rXHRcdHJlc2V0LWFzc2VydC11cyA9IFx1MDAzYzIwMDAwXHUwMDNlO1xuK1x0XHRyZXNldC1kZWFzc2VydC11cyA9IFx1MDAzYzEwMDAwMFx1MDAzZTtcbitcdFx0cmVzZXQtZ3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMyBSS19QQzYgR1BJT19BQ1RJVkVfTE9XXHUwMDNlO1xuK1xuK1x0XHRsZWRzIHtcbitcdFx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0I3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuK1x0XHRcdGxlZEAxIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzFcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9BTUJFUlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1xuK1x0XHRcdGxlZEAyIHtcbitcdFx0XHRcdHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4rXHRcdFx0XHRjb2xvciA9IFx1MDAzY0xFRF9DT0xPUl9JRF9HUkVFTlx1MDAzZTtcbitcdFx0XHRcdGZ1bmN0aW9uID0gTEVEX0ZVTkNUSU9OX0xBTjtcbitcdFx0XHRcdGRlZmF1bHQtc3RhdGUgPSBcImtlZXBcIjtcbitcdFx0XHR9O1xuK1x0XHR9O1xuK1x0fTtcbit9O1xuK1xuIFx1MDAyNm1kaW8xIHtcbiBcdHJnbWlpX3BoeTogZXRoZXJuZXQtcGh5QDMge1xuIFx0XHRjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMlwiO1xuQEAgLTM1MCw2ICszOTEsMjUgQEAgcmdtaWlfcGh5OiBldGhlcm5ldC1waHlAMyB7XG4gXHRcdHJlc2V0LWdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzQgUktfUEMwIEdQSU9fQUNUSVZFX0xPV1x1MDAzZTtcbiBcdFx0cngtaW50ZXJuYWwtZGVsYXktcHMgPSBcdTAwM2MxNTAwXHUwMDNlO1xuIFx0XHR0eC1pbnRlcm5hbC1kZWxheS1wcyA9IFx1MDAzYzE1MDBcdTAwM2U7XG4rXG4rXHRcdGxlZHMge1xuK1x0XHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rXHRcdFx0bGVkQDEge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0FNQkVSXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXG4rXHRcdFx0bGVkQDIge1xuK1x0XHRcdFx0cmVnID0gXHUwMDNjMlx1MDAzZTtcbitcdFx0XHRcdGNvbG9yID0gXHUwMDNjTEVEX0NPTE9SX0lEX0dSRUVOXHUwMDNlO1xuK1x0XHRcdFx0ZnVuY3Rpb24gPSBMRURfRlVOQ1RJT05fV0FOO1xuK1x0XHRcdFx0ZGVmYXVsdC1zdGF0ZSA9IFwia2VlcFwiO1xuK1x0XHRcdH07XG4rXHRcdH07XG4gXHR9O1xuIH07XG4gXG5AQCAtNTg2LDMgKzY0NiwxMyBAQCBcdTAwMjZ4aW4zMmsge1xuIFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuIFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2Y2xrMzJrX291dDFcdTAwM2U7XG4gfTtcbitcbitcdTAwMjZ4cGNzIHtcbitcdHN0YXR1cyA9IFwib2theVwiO1xuK1x0cGh5cyA9IFx1MDAzY1x1MDAyNmNvbWJwaHkyIFBIWV9UWVBFX1NHTUlJXHUwMDNlO1xuK1x0cGh5LW5hbWVzID0gXCJzZXJkZXNcIjtcbit9O1xuK1xuK1x1MDAyNnhwY3NfbWlpMCB7XG4rXHRzdGF0dXMgPSBcIm9rYXlcIjtcbit9O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpXG5pbmRleCAzYmM2NTNmMDI3ZjFmLi45ODllMTY0YzBlYjM5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1NjguZHRzaVxuQEAgLTExMCw2ICsxMTAsNTEgQEAgc2F0YTA6IHNhdGFAZmMwMDAwMDAge1xuIFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4gXHR9O1xuIFxuK1x0eHBjczogcGNzQGZkYTAwMDAwIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIjtcbitcdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuK1x0XHQjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdHJlZyA9IFx1MDAzYzB4MCAweGZkYTAwMDAwIDB4MCAweDIwMDAwMFx1MDAzZTtcbitcdFx0Y2xvY2tzID0gXHUwMDNjXHUwMDI2Y3J1IFBDTEtfWFBDU1x1MDAzZSwgXHUwMDNjXHUwMDI2Y3J1IENMS19YUENTX0VFRVx1MDAzZTtcbitcdFx0Y2xvY2stbmFtZXMgPSBcImNzclwiLCBcImVlZVwiO1xuK1x0XHRwb3dlci1kb21haW5zID0gXHUwMDNjXHUwMDI2cG93ZXIgUkszNTY4X1BEX1BJUEVcdTAwM2U7XG4rXHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcbitcdFx0eHBjc19taWkwOiBwY3MtbWlpQDAge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1xuK1x0XHR4cGNzX21paTE6IHBjcy1taWlAMSB7XG4rXHRcdFx0cmVnID0gXHUwMDNjMVx1MDAzZTtcbitcdFx0XHRzdGF0dXMgPSBcImRpc2FibGVkXCI7XG4rXHRcdH07XG4rXG4rXHRcdHhwY3NfbWlpMjogcGNzLW1paUAyIHtcbitcdFx0XHRyZWcgPSBcdTAwM2MyXHUwMDNlO1xuK1x0XHRcdHN0YXR1cyA9IFwiZGlzYWJsZWRcIjtcbitcdFx0fTtcbitcbitcdFx0eHBjc19taWkzOiBwY3MtbWlpQDMge1xuK1x0XHRcdHJlZyA9IFx1MDAzYzNcdTAwM2U7XG4rXHRcdFx0c3RhdHVzID0gXCJkaXNhYmxlZFwiO1xuK1x0XHR9O1xuK1x0fTtcbitcbitcdHhwY3NfZ21hYzBfY2xrOiB4cGNzLWdtYWMwLWNsb2NrIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwiZml4ZWQtY2xvY2tcIjtcbitcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuK1x0XHRjbG9jay1vdXRwdXQtbmFtZXMgPSBcImNsa19nbWFjMF94cGNzX21paVwiO1xuK1x0XHQjY2xvY2stY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1x0fTtcbitcbitcdHhwY3NfZ21hYzFfY2xrOiB4cGNzLWdtYWMxLWNsb2NrIHtcbitcdFx0Y29tcGF0aWJsZSA9IFwiZml4ZWQtY2xvY2tcIjtcbitcdFx0Y2xvY2stZnJlcXVlbmN5ID0gXHUwMDNjMTI1MDAwMDAwXHUwMDNlO1xuK1x0XHRjbG9jay1vdXRwdXQtbmFtZXMgPSBcImNsa19nbWFjMV94cGNzX21paVwiO1xuK1x0XHQjY2xvY2stY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1x0fTtcbitcbiBcdHBpcGVfcGh5X2dyZjA6IHN5c2NvbkBmZGM3MDAwMCB7XG4gXHRcdGNvbXBhdGlibGUgPSBcInJvY2tjaGlwLHJrMzU2OC1waXBlLXBoeS1ncmZcIiwgXCJzeXNjb25cIjtcbiBcdFx0cmVnID0gXHUwMDNjMHgwIDB4ZmRjNzAwMDAgMHgwIDB4MTAwMFx1MDAzZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1xuaW5kZXggZTNkZDVhZGRhNWFjYS4uNTA4OGFjYzA2OTgyZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcbkBAIC0xNzAsNiArMTcwLDcgQEAgY29uZmlnIERXTUFDX1JPQ0tDSElQXG4gXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbiBcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbiBcdHNlbGVjdCBNRkRfU1lTQ09OXG4rXHRzZWxlY3QgUENTX1hQQ1NfUk9DS0NISVBcbiBcdGhlbHBcbiBcdCAgU3VwcG9ydCBmb3IgRXRoZXJuZXQgY29udHJvbGxlciBvbiBSb2NrY2hpcCBSSzMyODggU29DLlxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jXG5pbmRleCBmNWY5ZmE2N2VjZDc3Li5mZDVmMDFjODk0MWMxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuY1xuQEAgLTYwMywxMyArNjAzLDQ3IEBAIHN0YXRpYyB2b2lkIGNvbW1vbl9kZWZhdWx0X2RhdGEoc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KVxuIFx0cGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZW5lZWRzX3Jlc2V0ID0gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZGV2bm9kZSwgKnBjc25vZGU7XG4rXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7XG4rXHRpbnQgYWRkcjtcbitcbitcdGRldm5vZGUgPSBkZXZfZndub2RlKHByaXYtXHUwMDNlZGV2aWNlKTtcbitcbitcdGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChkZXZub2RlLCBcInBjcy1oYW5kbGVcIikpIHtcbitcdFx0cGNzbm9kZSA9IGZ3bm9kZV9maW5kX3JlZmVyZW5jZShkZXZub2RlLCBcInBjcy1oYW5kbGVcIiwgMCk7XG4rXHRcdHhwY3MgPSB4cGNzX2NyZWF0ZV9md25vZGUocGNzbm9kZSk7XG4rXHRcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xuK1x0fSBlbHNlIHtcbitcdFx0YWRkciA9IGZmcyhwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YS1cdTAwM2VwY3NfbWFzaykgLSAxO1xuK1x0XHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2Rldihwcml2LVx1MDAzZW1paSwgYWRkcik7XG4rXHR9XG4rXG4rXHRpZiAoSVNfRVJSKHhwY3MpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbitcbitcdHhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW11bHRfZmFjdF8xMDBucyk7XG4rXG4rXHRwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MgPSB4cGNzO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGludGVsX21nYmVfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdFx0XHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuLVx0LyogcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZWhhc194cGNzIGhhcyBiZWVuIHNldCB0cnVlLCBzbyB0aGVyZVxuLVx0ICogc2hvdWxkIGFsd2F5cyBiZSBhbiBYUENTLiBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBhbHdheXNcbi1cdCAqIHJldHVybiB0aGlzIGlmIHByZXNlbnQuXG4tXHQgKi9cbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbiBcdHJldHVybiB4cGNzX3RvX3BoeWxpbmtfcGNzKHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyk7XG4gfVxuIFxuQEAgLTczMyw2ICs3NjcsOCBAQCBzdGF0aWMgaW50IGludGVsX21nYmVfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHQgICAgcGxhdC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHtcbiBcdFx0cGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrID0gQklUX1UzMihJTlRFTF9NR0JFX1hQQ1NfQUREUik7XG4gXHRcdHBsYXQtXHUwMDNlZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuK1x0XHRwbGF0LVx1MDAzZXBjc19pbml0ID0gaW50ZWxfbWdiZV9wY3NfaW5pdDtcbitcdFx0cGxhdC1cdTAwM2VwY3NfZXhpdCA9IGludGVsX21nYmVfcGNzX2V4aXQ7XG4gXHRcdHBsYXQtXHUwMDNlc2VsZWN0X3BjcyA9IGludGVsX21nYmVfc2VsZWN0X3BjcztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbmluZGV4IDE5ZjM0ZTE4YmZlZjIuLjlhZjMyYzI2ZjljMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yZW5lc2FzLWdiZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJlbmVzYXMtZ2JldGguY1xuQEAgLTgxLDggKzgxLDExIEBAIHN0YXRpYyBpbnQgcmVuZXNhc19nbWFjX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiBcbiBzdGF0aWMgdm9pZCByZW5lc2FzX2dtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4rXHRcdHJldHVybjtcbitcbitcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyZW5lc2FzX2dtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJrLmNcbmluZGV4IDhkNzA0MmU2ODkyNjEuLmU0N2NhMWJlYzViOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJzdG1tYWNfcGxhdGZvcm0uaFwiXG5AQCAtNDcsNiArNDgsNyBAQCBzdHJ1Y3QgcmtfZ21hY19vcHMge1xuIFx0dm9pZCAoKnNldF90b19yZ21paSkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0ICAgICBpbnQgdHhfZGVsYXksIGludCByeF9kZWxheSk7XG4gXHR2b2lkICgqc2V0X3RvX3JtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbitcdHZvaWQgKCpzZXRfdG9fc2dtaWkpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KTtcbiBcdGludCAoKnNldF9zcGVlZCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdFx0IHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCk7XG4gXHR2b2lkICgqaW50ZWdyYXRlZF9waHlfcG93ZXJ1cCkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpO1xuQEAgLTYzLDYgKzY1LDcgQEAgc3RydWN0IHJrX2dtYWNfb3BzIHtcbiBcdGJvb2wgY2xvY2tfZ3JmX3JlZ19pbl9waHA7XG4gXHRib29sIHN1cHBvcnRzX3JnbWlpO1xuIFx0Ym9vbCBzdXBwb3J0c19ybWlpO1xuK1x0Ym9vbCBzdXBwb3J0c19zZ21paTtcbiBcdGJvb2wgcGhwX2dyZl9yZXF1aXJlZDtcbiBcdGJvb2wgcmVnc192YWxpZDtcbiBcdHUzMiByZWdzW107XG5AQCAtOTgsNiArMTAxLDcgQEAgc3RydWN0IHJrX3ByaXZfZGF0YSB7XG4gXHRib29sIGludGVncmF0ZWRfcGh5O1xuIFx0Ym9vbCBzdXBwb3J0c19yZ21paTtcbiBcdGJvb2wgc3VwcG9ydHNfcm1paTtcbitcdGJvb2wgc3VwcG9ydHNfc2dtaWk7XG4gXG4gXHRzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrcztcbiBcdGludCBudW1fY2xrcztcbkBAIC04MDksNiArODEzLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Mjhfb3BzID0ge1xuICNkZWZpbmUgUkszNTY4X0dSRl9HTUFDMV9DT04xXHRcdDB4MDM4Y1xuIFxuIC8qIFJLMzU2OF9HUkZfR01BQzBfQ09OMSBcdTAwMjZcdTAwMjYgUkszNTY4X0dSRl9HTUFDMV9DT04xICovXG4rI2RlZmluZSBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUlcdFx0R1JGX0NMUl9CSVQoNylcbisjZGVmaW5lIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJXHRcdEdSRl9CSVQoNylcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTFx0XHRcdEdSRl9CSVQoMylcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX0ZMT1dfQ1RSTF9DTFJcdFx0R1JGX0NMUl9CSVQoMylcbiAjZGVmaW5lIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEVcdFx0R1JGX0JJVCgxKVxuQEAgLTg1MSwxOCArODU3LDMyIEBAIHN0YXRpYyB2b2lkIHJrMzU2OF9zZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsXG4gXHRcdCAgICAgUkszNTY4X0dNQUNfQ0xLX1RYX0RMX0NGRyh0eF9kZWxheSkpO1xuIFxuIFx0cmVnbWFwX3dyaXRlKGJzcF9wcml2LVx1MDAzZWdyZiwgY29uMSxcbitcdFx0ICAgICBSSzM1NjhfR01BQ19NT0RFX1JNSUlfUkdNSUkgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1JYQ0xLX0RMWV9FTkFCTEUgfFxuIFx0XHQgICAgIFJLMzU2OF9HTUFDX1RYQ0xLX0RMWV9FTkFCTEUpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByazM1Njhfc2V0X3RvX3NnbWlpKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuK3tcbitcdHUzMiBjb24xO1xuK1xuK1x0Y29uMSA9IChic3BfcHJpdi1cdTAwM2VpZCA9PSAxKSA/IFJLMzU2OF9HUkZfR01BQzFfQ09OMSA6XG4rXHRcdFx0XHQgICAgIFJLMzU2OF9HUkZfR01BQzBfQ09OMTtcbitcbitcdHJlZ21hcF93cml0ZShic3BfcHJpdi1cdTAwM2VncmYsIGNvbjEsIFJLMzU2OF9HTUFDX01PREVfU0dNSUlfUVNHTUlJKTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBya19nbWFjX29wcyByazM1Njhfb3BzID0ge1xuIFx0LmluaXQgPSByazM1NjhfaW5pdCxcbiBcdC5zZXRfdG9fcmdtaWkgPSByazM1Njhfc2V0X3RvX3JnbWlpLFxuK1x0LnNldF90b19zZ21paSA9IHJrMzU2OF9zZXRfdG9fc2dtaWksXG4rXG4gXHQuc2V0X3NwZWVkID0gcmtfc2V0X2Nsa19tYWNfc3BlZWQsXG4gXG4gXHQuZ21hY19waHlfaW50Zl9zZWxfbWFzayA9IEdFTk1BU0tfVTE2KDYsIDQpLFxuIFxuIFx0LnN1cHBvcnRzX3JtaWkgPSB0cnVlLFxuK1x0LnN1cHBvcnRzX3NnbWlpID0gdHJ1ZSxcbiBcbiBcdC5yZWdzX3ZhbGlkID0gdHJ1ZSxcbiBcdC5yZWdzID0ge1xuQEAgLTEyMDgsNiArMTIyOCw0MyBAQCBzdGF0aWMgdm9pZCBya19waHlfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2KVxuIFx0XHRkZXZfZXJyKGJzcF9wcml2LVx1MDAzZWRldiwgXCJmYWlsIHRvIGRpc2FibGUgcGh5LXN1cHBseVxcblwiKTtcbiB9XG4gXG4rc3RhdGljIGludCBya19wY3NfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtXHUwMDNlZGV2aWNlLVx1MDAzZW9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjc19ub2RlO1xuK1x0c3RydWN0IGR3X3hwY3MgKnhwY3M7XG4rXG4rXHRwY3Nfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsIFwicGNzLWhhbmRsZVwiLCAwKTtcbitcdGlmICghcGNzX25vZGUpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0eHBjcyA9IHhwY3NfcmtfY3JlYXRlKHByaXYtXHUwMDNlZGV2aWNlLCBwY3Nfbm9kZSk7XG4rXHRvZl9ub2RlX3B1dChwY3Nfbm9kZSk7XG4rXHRpZiAoSVNfRVJSKHhwY3MpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUih4cGNzKTtcbitcbitcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IHhwY3M7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmtfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuK3tcbitcdGlmICghcHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJrX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuK1x0XHRcdFx0XHQgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4geHBjc190b19waHlsaW5rX3Bjcyhwcml2LVx1MDAzZWh3LVx1MDAzZXhwY3MpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCxcbiBcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcmtfZ21hY19vcHMgKm9wcylcbkBAIC0xMzMwLDYgKzEzODcsNyBAQCBzdGF0aWMgc3RydWN0IHJrX3ByaXZfZGF0YSAqcmtfZ21hY19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuIFxuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcmdtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfcmdtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3JnbWlpO1xuIFx0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfcm1paSA9IG9wcy1cdTAwM2VzdXBwb3J0c19ybWlpIHx8ICEhb3BzLVx1MDAzZXNldF90b19ybWlpO1xuK1x0YnNwX3ByaXYtXHUwMDNlc3VwcG9ydHNfc2dtaWkgPSBvcHMtXHUwMDNlc3VwcG9ydHNfc2dtaWkgfHwgISFvcHMtXHUwMDNlc2V0X3RvX3NnbWlpO1xuIFxuIFx0aWYgKG9wcy1cdTAwM2Vpbml0KSB7XG4gXHRcdHJldCA9IG9wcy1cdTAwM2Vpbml0KGJzcF9wcml2KTtcbkBAIC0xMzYxLDYgKzE0MTksMTAgQEAgc3RhdGljIGludCBya19nbWFjX2NoZWNrX29wcyhzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0aWYgKCFic3BfcHJpdi1cdTAwM2VzdXBwb3J0c19ybWlpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRicmVhaztcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuK1x0XHRpZiAoIWJzcF9wcml2LVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoYnNwX3ByaXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwidW5zdXBwb3J0ZWQgaW50ZXJmYWNlICVkXCIsIGJzcF9wcml2LVx1MDAzZXBoeV9pZmFjZSk7XG5AQCAtMTM3OSwxNiArMTQ0MSwxOSBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4rXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuK1x0XHRnb3RvIHNldF9tb2RlO1xuK1xuIFx0cmV0ID0gcmtfZ2V0X3BoeV9pbnRmX3NlbChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcbiBcdGludGYgPSByZXQ7XG4gXG4tXHRyZXQgPSBnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIHRydWUpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdGlmIChic3BfcHJpdi1cdTAwM2VnbWFjX3BoeV9pbnRmX3NlbF9tYXNrIHx8XG4gXHQgICAgYnNwX3ByaXYtXHUwMDNlZ21hY19ybWlpX21vZGVfbWFzaykge1xuIFx0XHQvKiBJZiBkZWZpbmVkLCBlbmNvZGUgdGhlIHBoeV9pbnRmX3NlbCB2YWx1ZSAqL1xuQEAgLTEzOTksMTAgKzE0NjQsOCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0XHRcdCAgICAgIGJzcF9wcml2LVx1MDAzZWdtYWNfcm1paV9tb2RlX21hc2spO1xuIFxuIFx0XHRyZXQgPSBya193cml0ZV9nbWFjX2dyZl9yZWcoYnNwX3ByaXYsIHZhbCk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHR9XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbiBcdGlmIChic3BfcHJpdi1cdTAwM2VjbG9jay5ybWlpX21vZGVfbWFzaykge1xuQEAgLTE0MTAsMTMgKzE0NzMsMTIgQEAgc3RhdGljIGludCBya19nbWFjX3Bvd2VydXAoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpXG4gXHRcdFx0XHQgICAgIGJzcF9wcml2LVx1MDAzZWNsb2NrLnJtaWlfbW9kZV9tYXNrKTtcbiBcbiBcdFx0cmV0ID0gcmtfd3JpdGVfY2xvY2tfZ3JmX3JlZyhic3BfcHJpdiwgdmFsKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdGdtYWNfY2xrX2VuYWJsZShic3BfcHJpdiwgZmFsc2UpO1xuLVx0XHRcdHJldHVybiByZXQ7XG4tXHRcdH1cbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFx0fVxuIFxuLVx0LypybWlpIG9yIHJnbWlpKi9cbitzZXRfbW9kZTpcbitcdC8qIHJtaWksIHJnbWlpLCBzZ21paSAqL1xuIFx0c3dpdGNoIChic3BfcHJpdi1cdTAwM2VwaHlfaWZhY2UpIHtcbiBcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOlxuIFx0XHRkZXZfaW5mbyhkZXYsIFwiaW5pdCBmb3IgUkdNSUlcXG5cIik7XG5AQCAtMTQ0NywxNSArMTUwOSwyMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0aWYgKGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fcm1paSlcbiBcdFx0XHRic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3JtaWkoYnNwX3ByaXYpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOlxuK1x0XHRkZXZfaW5mbyhkZXYsIFwiaW5pdCBmb3IgU0dNSUlcXG5cIik7XG4rXHRcdGlmIChic3BfcHJpdi1cdTAwM2VvcHMtXHUwMDNlc2V0X3RvX3NnbWlpKVxuK1x0XHRcdGJzcF9wcml2LVx1MDAzZW9wcy1cdTAwM2VzZXRfdG9fc2dtaWkoYnNwX3ByaXYpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl9lcnIoZGV2LCBcIk5PIGludGVyZmFjZSBkZWZpbmVkIVxcblwiKTtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBjbGtfZGlzYWJsZTtcbiBcdH1cbiBcbiBcdHJldCA9IHJrX3BoeV9wb3dlcnVwKGJzcF9wcml2KTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCBmYWxzZSk7XG4tXHRcdHJldHVybiByZXQ7XG4tXHR9XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNsa19kaXNhYmxlO1xuIFxuIFx0cG1fcnVudGltZV9nZXRfc3luYyhkZXYpO1xuIFxuQEAgLTE0NjMsNiArMTUzMCwxMCBAQCBzdGF0aWMgaW50IHJrX2dtYWNfcG93ZXJ1cChzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdilcbiBcdFx0YnNwX3ByaXYtXHUwMDNlb3BzLVx1MDAzZWludGVncmF0ZWRfcGh5X3Bvd2VydXAoYnNwX3ByaXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rY2xrX2Rpc2FibGU6XG4rXHRnbWFjX2Nsa19lbmFibGUoYnNwX3ByaXYsIGZhbHNlKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJrX2dtYWNfcG93ZXJkb3duKHN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMpXG5AQCAtMTQ4Niw2ICsxNTU3LDkgQEAgc3RhdGljIHZvaWQgcmtfZ2V0X2ludGVyZmFjZXMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB2b2lkICpic3BfcHJpdixcbiBcbiBcdGlmIChyay1cdTAwM2VzdXBwb3J0c19ybWlpKVxuIFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksIGludGVyZmFjZXMpO1xuK1xuK1x0aWYgKHJrLVx1MDAzZXN1cHBvcnRzX3NnbWlpKVxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLCBpbnRlcmZhY2VzKTtcbiB9XG4gXG4gc3RhdGljIGludCBya19zZXRfY2xrX3R4X3JhdGUodm9pZCAqYnNwX3ByaXZfLCBzdHJ1Y3QgY2xrICpjbGtfdHhfaSxcbkBAIC0xNjAyLDYgKzE2NzYsMTcgQEAgc3RhdGljIGludCBya19nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbGF0X2RhdC1cdTAwM2VzdXNwZW5kID0gcmtfZ21hY19zdXNwZW5kO1xuIFx0cGxhdF9kYXQtXHUwMDNlcmVzdW1lID0gcmtfZ21hY19yZXN1bWU7XG4gXG4rXHRpZiAocGxhdF9kYXQtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbitcdFx0LyogU0dNSUkgY2xvY2sgYWx3YXlzIHJ1bnMgYXQgMTI1IE1IeiAqL1xuK1x0XHRwbGF0X2RhdC1cdTAwM2VzZXRfY2xrX3R4X3JhdGUgPSBOVUxMO1xuK1xuK1x0XHQvKiBTR01JSSByZXF1aXJlcyBhIFBDUyAqL1xuK1x0XHRwbGF0X2RhdC1cdTAwM2VkZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4rXHRcdHBsYXRfZGF0LVx1MDAzZXBjc19pbml0ID0gcmtfcGNzX2luaXQ7XG4rXHRcdHBsYXRfZGF0LVx1MDAzZXBjc19leGl0ID0gcmtfcGNzX2V4aXQ7XG4rXHRcdHBsYXRfZGF0LVx1MDAzZXNlbGVjdF9wY3MgPSBya19zZWxlY3RfcGNzO1xuK1x0fVxuK1xuIFx0cGxhdF9kYXQtXHUwMDNlYnNwX3ByaXYgPSBya19nbWFjX3NldHVwKHBkZXYsIHBsYXRfZGF0LCBkYXRhKTtcbiBcdGlmIChJU19FUlIocGxhdF9kYXQtXHUwMDNlYnNwX3ByaXYpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwbGF0X2RhdC1cdTAwM2Vic3BfcHJpdik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXG5pbmRleCAxMzYzNDk2NWJjMTlhLi4wMWRmNDc3NmVkYjNmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmNcbkBAIC0zNSw4ICszNSwxMSBAQCBzdGF0aWMgaW50IHJ6bjFfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHJ6bjFfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRtaWljX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3Bjcyk7XG4rXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpXG4rXHRcdHJldHVybjtcbitcbitcdG1paWNfZGVzdHJveShwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKTtcbitcdHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MgPSBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpyem4xX2R3bWFjX3NlbGVjdF9wY3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuaW5kZXggMWQ3ZjBhNTdkMjg4OS4uNmQ0YmMxZmU4Zjc1MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvY2ZwZ2EuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29jZnBnYS5jXG5AQCAtNTM5LDggKzUzOSwxMSBAQCBzdGF0aWMgaW50IHNvY2ZwZ2FfZHdtYWNfcGNzX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIFxuIHN0YXRpYyB2b2lkIHNvY2ZwZ2FfZHdtYWNfcGNzX2V4aXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIHtcbi1cdGlmIChwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuLVx0XHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0aWYgKCFwcml2LVx1MDAzZWh3LVx1MDAzZXBoeWxpbmtfcGNzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRseW54X3Bjc19kZXN0cm95KHByaXYtXHUwMDNlaHctXHUwMDNlcGh5bGlua19wY3MpO1xuK1x0cHJpdi1cdTAwM2Vody1cdTAwM2VwaHlsaW5rX3BjcyA9IE5VTEw7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnNvY2ZwZ2FfZHdtYWNfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmNcbmluZGV4IGFmZTk4ZmY1YmRjYjAuLmQyZjc3ZjBjMjIzYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXG5AQCAtNDI2LDM2ICs0MjYsMTUgQEAgaW50IHN0bW1hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gaW50IHN0bW1hY19wY3Nfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZGV2bm9kZSwgKnBjc25vZGU7XG4tXHRzdHJ1Y3QgZHdfeHBjcyAqeHBjcyA9IE5VTEw7XG4tXHRpbnQgYWRkciwgcmV0O1xuLVxuLVx0ZGV2bm9kZSA9IGRldl9md25vZGUocHJpdi1cdTAwM2VkZXZpY2UpO1xuLVxuLVx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdCkge1xuLVx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2luaXQocHJpdik7XG4tXHR9IGVsc2UgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50KGRldm5vZGUsIFwicGNzLWhhbmRsZVwiKSkge1xuLVx0XHRwY3Nub2RlID0gZndub2RlX2ZpbmRfcmVmZXJlbmNlKGRldm5vZGUsIFwicGNzLWhhbmRsZVwiLCAwKTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX2Z3bm9kZShwY3Nub2RlKTtcbi1cdFx0Zndub2RlX2hhbmRsZV9wdXQocGNzbm9kZSk7XG4tXHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyh4cGNzKTtcbi1cdH0gZWxzZSBpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEgXHUwMDI2XHUwMDI2XG4tXHRcdCAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrKSB7XG4tXHRcdGFkZHIgPSBmZnMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlcGNzX21hc2spIC0gMTtcbi1cdFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHJpdi1cdTAwM2VtaWksIGFkZHIpO1xuLVx0XHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oeHBjcyk7XG4tXHR9IGVsc2Uge1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19pbml0KVxuIFx0XHRyZXR1cm4gMDtcbi1cdH1cbiBcbitcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwY3NfaW5pdChwcml2KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKHByaXYtXHUwMDNlZGV2aWNlLCByZXQsIFwiTm8geFBDUyBmb3VuZFxcblwiKTtcbiBcbi1cdGlmICh4cGNzKVxuLVx0XHR4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHhwY3MsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtdWx0X2ZhY3RfMTAwbnMpO1xuLVxuLVx0cHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzID0geHBjcztcbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00NjMsMTQgKzQ0MiwxMCBAQCB2b2lkIHN0bW1hY19wY3NfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuLVx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlaHctXHUwMDNleHBjcylcbitcdGlmICghcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBjc19leGl0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHR4cGNzX2Rlc3Ryb3kocHJpdi1cdTAwM2Vody1cdTAwM2V4cGNzKTtcbi1cdHByaXYtXHUwMDNlaHctXHUwMDNleHBjcyA9IE5VTEw7XG4rXHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcGNzX2V4aXQocHJpdik7XG4gfVxuIFxuIHN0cnVjdCBzdG1tYWNfY2xrX3JhdGUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbmluZGV4IGU0MTdmZDY2ZjY2MGEuLjg4YmM0MDc5MWU2OWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGNzL0tjb25maWdcbkBAIC0xMiw2ICsxMiwyOSBAQCBjb25maWcgUENTX1hQQ1NcbiBcdCAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkcml2ZXIgYW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIFN5bm9wc3lzXG4gXHQgIERlc2lnbldhcmUgWFBDUyBjb250cm9sbGVycy5cbiBcbitpZiBQQ1NfWFBDU1xuK1xuK2NvbmZpZyBQQ1NfWFBDU19QTEFURk9STVxuK1x0dHJpc3RhdGUgXCJHZW5lcmljIFhQQ1MgY29udHJvbGxlciBzdXBwb3J0XCJcbitcdGRlZmF1bHQgUENTX1hQQ1NcbitcdGhlbHBcbitcdCAgR2VuZXJpYyBEV1hQQ1MgZHJpdmVyIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlIGFueVxuK1x0ICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRvIGZ1bmN0aW9uIG9yIGlzIHVzaW5nIHBsYXRmb3JtXG4rXHQgIGRhdGEgZm9yIHNldHVwLlxuK1xuK1x0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuK1xuK2NvbmZpZyBQQ1NfWFBDU19ST0NLQ0hJUFxuK1x0dHJpc3RhdGUgXCJSb2NrY2hpcCBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydFwiXG4rXHRkZWZhdWx0IEFSQ0hfUk9DS0NISVBcbitcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX1JPQ0tDSElQIHx8IENPTVBJTEVfVEVTVClcbitcdGhlbHBcbitcdCAgU3VwcG9ydCBmb3IgWFBDUyBjb250cm9sbGVyIG9uIFJvY2tjaGlwIFJLMzU2eCBTb0MuXG4rXG4rXHQgIElmIHlvdSBoYXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbitcbitlbmRpZiAjIFBDU19YUENTXG4rXG4gY29uZmlnIFBDU19MWU5YXG4gXHR0cmlzdGF0ZVxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuaW5kZXggNGY3OTIwNjE4YjkwMC4uZjlmNmNmMjU3OGQ3MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGNzL01ha2VmaWxlXG5AQCAtMSwxMCArMSwxMSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAjIE1ha2VmaWxlIGZvciBMaW51eCBQQ1MgZHJpdmVyc1xuIFxuLXBjc194cGNzLSQoQ09ORklHX1BDU19YUENTKVx0Oj0gcGNzLXhwY3MubyBwY3MteHBjcy1wbGF0Lm8gXFxcbi1cdFx0XHRcdCAgIHBjcy14cGNzLW54cC5vIHBjcy14cGNzLXd4Lm9cbitwY3NfeHBjcy0kKENPTkZJR19QQ1NfWFBDUylcdDo9IHBjcy14cGNzLm8gcGNzLXhwY3MtbnhwLm8gcGNzLXhwY3Mtd3gub1xuIFxuIG9iai0kKENPTkZJR19QQ1NfWFBDUylcdFx0Kz0gcGNzX3hwY3Mub1xuK29iai0kKENPTkZJR19QQ1NfWFBDU19QTEFURk9STSkgKz0gcGNzLXhwY3MtcGxhdC5vXG4rb2JqLSQoQ09ORklHX1BDU19YUENTX1JPQ0tDSElQKSArPSBwY3MteHBjcy1yay5vXG4gb2JqLSQoQ09ORklHX1BDU19MWU5YKVx0XHQrPSBwY3MtbHlueC5vXG4gb2JqLSQoQ09ORklHX1BDU19NVEtfTFlOWEkpXHQrPSBwY3MtbXRrLWx5bnhpLm9cbiBvYmotJChDT05GSUdfUENTX1JaTjFfTUlJQylcdCs9IHBjcy1yem4xLW1paWMub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42OGJjYWExYTVjYmJmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuY1xuQEAgLTAsMCArMSw1NDMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXG4rICpcbisgKiBCYXNlZCBvbiB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBYUENTIHBsYXRmb3JtIGRyaXZlci5cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgU2VyZ2UgU2VtaW5cbisgKlxuKyAqIEFkYXB0ZWQgZm9yIFJvY2tjaGlwIFNvQ3MsIHdpdGggcmVmZXJlbmNlIHRvIHRoZSBSb2NrY2hpcCBPRU0gZHJpdmVyLlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBDb2lhIFByYW50XG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MtcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9kb21haW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJwY3MteHBjcy5oXCJcbitcbitzdHJ1Y3QgZHdfeHBjc19yayB7XG4rXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2O1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cztcbitcdHZvaWQgX19pb21lbSAqcmVnX2Jhc2U7XG4rXHRzdHJ1Y3QgcGh5ICpzZXJkZXNfcGh5O1xuK1x0c3RydWN0IGNsayAqY3NyX2NsaztcbitcdHN0cnVjdCBjbGsgKmVlZV9jbGs7XG4rfTtcbitcbitzdGF0aWMgcHRyZGlmZl90IHhwY3NfcmtfYWRkcl9mb3JtYXQoaW50IGRldiwgaW50IHJlZylcbit7XG4rXHRyZXR1cm4gRklFTERfUFJFUCgweDcwMDAwLCBkZXYpIHwgRklFTERfUFJFUCgweGZmZmYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19yZWFkX3JlZyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0cHRyZGlmZl90IGNzcjtcbitcdGludCByZXQ7XG4rXG4rXHRjc3IgPSB4cGNzX3JrX2FkZHJfZm9ybWF0KGRldiwgcmVnKTtcbitcbitcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHJlYWRsKHB4cGNzLVx1MDAzZXJlZ19iYXNlICsgKGNzciBcdTAwM2NcdTAwM2MgMikpIFx1MDAyNiAweGZmZmY7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbit7XG4rXHRwdHJkaWZmX3QgY3NyO1xuK1x0aW50IHJldDtcbitcbitcdGNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCByZWcpO1xuK1xuK1x0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0d3JpdGVsKHZhbCwgcHhwY3MtXHUwMDNlcmVnX2Jhc2UgKyAoY3NyIFx1MDAzY1x1MDAzYyAyKSk7XG4rXG4rXHRwbV9ydW50aW1lX3B1dChcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMVx0MlxuKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSTJcdDNcbisjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkzXHQ0XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfUE1BUE1EXHQ2XG4rI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJXHQ3XG4rXG4rc3RhdGljIGJvb2wgeHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpXG4re1xuK1x0cmV0dXJuICEoYWRkciBcdTAwM2MgMCB8fCBhZGRyIFx1MDAzZSAzKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3dpdGNoIChkZXYpIHtcbitcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbitcdGNhc2UgTURJT19NTURfVkVORDI6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcdH1cbitcbitcdC8qIHJlYWQgcmVtYXBwaW5nIHRvIE1JSSBpcyBwZXJmb3JtZWQgYnkgSFcgKi9cbitcdHN3aXRjaCAoYWRkcikge1xuK1x0Y2FzZSAwOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTtcbitcdGNhc2UgMTpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxO1xuK1x0Y2FzZSAyOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7XG4rXHRjYXNlIDM6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3dpdGNoIChkZXYpIHtcbitcdGNhc2UgTURJT19NTURfUE1BUE1EOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDtcbitcdGNhc2UgTURJT19NTURfVkVORDI6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcdH1cbitcbitcdC8qIFdyaXRhYmxlIG9ubHkgb24gTUlJICovXG4rXHRzd2l0Y2ggKHJlZykge1xuK1x0Y2FzZSBEV19WUl9NSUlfQU5fQ1RSTDpcbitcdGNhc2UgRFdfVlJfTUlJX0FOX0lOVFJfU1RTOlxuK1x0Y2FzZSBEV19WUl9NSUlfRUVFX01DVFJMMDpcbitcdGNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6XG4rXHRjYXNlIERXX1ZSX01JSV9ESUdfQ1RSTDI6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJO1xuK1x0ZGVmYXVsdDpcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKGFkZHIpIHtcbitcdGNhc2UgMDpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7XG4rXHRjYXNlIDE6XG4rXHRcdHJldHVybiBST0NLQ0hJUF9NTURfTUlJMTtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyO1xuK1x0Y2FzZSAzOlxuK1x0XHRyZXR1cm4gUk9DS0NISVBfTU1EX01JSTM7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy1cdTAwM2Vwcml2O1xuK1x0aW50IGRldjtcbitcbitcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDB4ZmZmZjtcbitcbitcdHJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4cGNzLCBkZXYsIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4rXHRpbnQgZGV2O1xuK1xuK1x0aWYgKCF4cGNzX3JrX21kaW9fYWRkcl92YWxpZGF0ZShhZGRyKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRkZXYgPSB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGFkZHIsIE1ESU9fTU1EX1ZFTkQyLCByZWcpO1xuK1x0aWYgKGRldiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGRldiA9IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4rXHRpZiAoZGV2IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMHhmZmZmO1xuK1xuK1x0cmV0dXJuIHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZywgdTE2IHZhbClcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtXHUwMDNlcHJpdjtcbitcbitcdGlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7XG4rXHRpZiAoZGV2IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB4cGNzX3JrX3dyaXRlX3JlZyhweHBjcywgZGV2LCByZWcsIHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgZHdfeHBjc19yayAqeHBjc19ya19jcmVhdGVfZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcztcbitcbitcdHB4cGNzID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnB4cGNzKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXB4cGNzKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcbitcdHB4cGNzLVx1MDAzZXBkZXYgPSBwZGV2O1xuK1xuK1x0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBweHBjcyk7XG4rXG4rXHRyZXR1cm4gcHhwY3M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeHBjc19ya19zZXJkZXNfcGh5X2luaXQoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnB4cGNzLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuK1xuK1x0cHhwY3MtXHUwMDNlc2VyZGVzX3BoeSA9IGRldm1fcGh5X2dldChkZXYsIFwic2VyZGVzXCIpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VzZXJkZXNfcGh5KSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpLFxuK1x0XHRcdFx0XHRcIkZhaWxlZCB0byBnZXQgU2VyRGVzIFBIWVxcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXG4rXHRwaHlfcG93ZXJfb2ZmKHB4cGNzLVx1MDAzZXNlcmRlc19waHkpO1xuK1x0cGh5X2V4aXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rXG4rXHRkZXZfcG1fZ2VucGRfcnBtX2Fsd2F5c19vbihkZXYsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvbihzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIFRoZSBwb3dlciBkb21haW4gaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgZW5hYmxlZCwgd2hpY2ggYWxsb3dzIHVzIHRvXG4rXHQgKiBkeW5hbWljYWxseSB0dXJuIHRoZSBDU1IgY2xvY2sgb24vb2ZmIHVzaW5nIFBNIHdoaWxlIGtlZXBpbmcgdGhlIFBDU1xuK1x0ICogcG93ZXJlZCBvbi5cbitcdCAqL1xuK1x0cmV0ID0gZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCB0cnVlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHBvd2VyIG9uIHBvd2VyLWRvbWFpbnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfaW5pdChweHBjcy1cdTAwM2VzZXJkZXNfcGh5KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGluaXQgU2VyRGVzIFBIWVxcblwiKTtcbitcdFx0Z290byBwbV9kb21haW47XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBwb3dlciBvbiBTZXJEZXMgUEhZXFxuXCIpO1xuK1x0XHRnb3RvIHNlcmRlc19waHk7XG4rXHR9XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYsIHB4cGNzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldm0gZm9yIFNlckRlcyBQSFk6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitzZXJkZXNfcGh5OlxuK1x0cGh5X2V4aXQocHhwY3MtXHUwMDNlc2VyZGVzX3BoeSk7XG4rcG1fZG9tYWluOlxuK1x0ZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2LCBmYWxzZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfaW5pdF9yZXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKVxuK3tcbitcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBweHBjcy1cdTAwM2VwZGV2O1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbitcbitcdHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XG4rXHRpZiAoIXJlcykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJObyByZWctc3BhY2UgZm91bmRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHJlc291cmNlX3NpemUocmVzKSBcdTAwM2MgU1pfMk0pIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiSW52YWxpZCByZWctc3BhY2Ugc2l6ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRweHBjcy1cdTAwM2VyZWdfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7XG4rXHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZXJlZ19iYXNlKSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gbWFwIHJlZy1zcGFjZVxcblwiKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocHhwY3MtXHUwMDNlcmVnX2Jhc2UpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHhwY3NfcmtfZXhpdF9jbGsodm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkYXRhO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHhwY3MtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG4rXG4rXHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtXHUwMDNlZWVlX2Nsayk7XG4rXG4rXHRwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbitcdGludCByZXQ7XG4rXG4rXHRweHBjcy1cdTAwM2Vjc3JfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgXCJjc3JcIik7XG4rXHRpZiAoSVNfRVJSKHB4cGNzLVx1MDAzZWNzcl9jbGspKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtXHUwMDNlY3NyX2NsayksXG4rXHRcdFx0XHRcdCBcIkZhaWxlZCB0byBnZXQgQ1NSIGNsb2NrXFxuXCIpO1xuK1xuK1x0cHhwY3MtXHUwMDNlZWVlX2NsayA9IGRldm1fY2xrX2dldChkZXYsIFwiZWVlXCIpO1xuK1x0aWYgKElTX0VSUihweHBjcy1cdTAwM2VlZWVfY2xrKSlcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLVx1MDAzZWVlZV9jbGspLFxuK1x0XHRcdFx0XHQgXCJGYWlsZWQgdG8gZ2V0IEVFRSBjbG9ja1xcblwiKTtcbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2VlZWVfY2xrKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbitcdHBtX3J1bnRpbWVfZW5hYmxlKGRldik7XG4rXG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX2V4aXRfY2xrLCBweHBjcyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBFRUUgY2xvY2s6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX2luaXRfYnVzKHN0cnVjdCBkd194cGNzX3JrICpweHBjcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZweHBjcy1cdTAwM2VwZGV2LVx1MDAzZWRldjtcbitcdHN0YXRpYyBhdG9taWNfdCBpZCA9IEFUT01JQ19JTklUKC0xKTtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0YnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCAwKTtcbitcdGlmICghYnVzKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGJ1cy1cdTAwM2VuYW1lID0gXCJSb2NrY2hpcCBEVyBYUENTIE1DSS9BUEIzXCI7XG4rXHRidXMtXHUwMDNlcmVhZCA9IHhwY3NfcmtfcmVhZF9jMjI7XG4rXHRidXMtXHUwMDNld3JpdGUgPSB4cGNzX3JrX3dyaXRlX2MyMjtcbitcdGJ1cy1cdTAwM2VyZWFkX2M0NSA9IHhwY3NfcmtfcmVhZF9jNDU7XG4rXHRidXMtXHUwMDNld3JpdGVfYzQ1ID0geHBjc19ya193cml0ZV9jNDU7XG4rXHRidXMtXHUwMDNlcGh5X21hc2sgPSB+MDtcbitcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlcHJpdiA9IHB4cGNzO1xuK1xuK1x0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsXG4rXHRcdCBcInJvY2tjaGlwX2R3eHBjcy0leFwiLCBhdG9taWNfaW5jX3JldHVybihcdTAwMjZpZCkpO1xuK1xuK1x0LypcbitcdCAqIE1ESU8tYnVzIGhlcmUgc2VydmVzIGFzIGp1c3QgYSBiYWNrLWVuZCBlbmdpbmUgYWJzdHJhY3Rpbmcgb3V0XG4rXHQgKiB0aGUgTURJTyBhbmQgTUNJL0FQQjMgSU8gaW50ZXJmYWNlcyB1dGlsaXplZCBmb3IgdGhlIFJvY2tjaGlwIERXWFBDUyBDU1JzXG4rXHQgKiBhY2Nlc3MuXG4rXHQgKi9cbitcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgTURJTyBidXNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRweHBjcy1cdTAwM2VidXMgPSBidXM7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB4cGNzX3JrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4re1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuK1x0aW50IHJldDtcbitcbitcdHB4cGNzID0geHBjc19ya19jcmVhdGVfZGF0YShwZGV2KTtcbitcdGlmIChJU19FUlIocHhwY3MpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihweHBjcyk7XG4rXG4rXHQvKlxuK1x0ICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBEX1BJUEUpLiBUaGUgZG9tYWluXG4rXHQgKiBtdXN0IGJlIHBvd2VyZWQgb24gYmVmb3JlIGFueSByZWdpc3RlciBhY2Nlc3MsIG90aGVyd2lzZSB0aGUgU29DIHdpbGxcbitcdCAqIHRyaWdnZXIgYSBzeW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoU0Vycm9yKS5cbitcdCAqXG4rXHQgKiBBY2Nlc3NpbmcgdGhlIFhQQ1MgcmVnaXN0ZXJzIGFsc28gcmVxdWlyZXMgYSBUWCBjbG9jayBmcm9tIHRoZSBTZXJEZXMsXG4rXHQgKiB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzb2Z0IHJlc2V0LlxuK1x0ICovXG4rXHRyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfaW5pdChweHBjcyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24ocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3NfcmtfaW5pdF9yZXMocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3NfcmtfaW5pdF9jbGsocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHhwY3NfcmtfaW5pdF9idXMocHhwY3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwicm9ja2NoaXAscmszNTY4LXhwY3NcIiB9LFxuK1x0eyAvKiBzZW50aW5lbCAqLyB9LFxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpO1xuK1xuK3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4re1xuK1x0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25wO1xuK1x0c3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzO1xuK1x0c3RydWN0IGR3X3hwY3MgKnhwY3M7XG4rXHR1MzIgcG9ydDtcbitcbitcdGlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuK1xuK1x0aWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBcInJlZ1wiLCBcdTAwMjZwb3J0KSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRpZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKChpbnQpcG9ydCkpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0LyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi9cbitcdHBjc19ucCA9IG9mX2dldF9wYXJlbnQobnApO1xuK1x0aWYgKCFwY3NfbnApXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuK1xuK1x0aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBjc19ucCkpIHtcbitcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XG4rXHR9XG4rXG4rXHRpZiAoIW9mX21hdGNoX25vZGUoeHBjc19ya19vZl9pZHMsIHBjc19ucCkpIHtcbitcdFx0b2Zfbm9kZV9wdXQocGNzX25wKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXHR9XG4rXG4rXHRwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApO1xuK1x0b2Zfbm9kZV9wdXQocGNzX25wKTtcbitcdGlmICghcGRldilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4rXG4rXHRkZXZpY2VfbG9jayhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuK1x0aWYgKCFweHBjcyB8fCAhcHhwY3MtXHUwMDNlYnVzKSB7XG4rXHRcdGRldmljZV91bmxvY2soXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0XHRwdXRfZGV2aWNlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7XG4rXHR9XG4rXG4rXHR4cGNzID0geHBjc19jcmVhdGVfbWRpb2RldihweHBjcy1cdTAwM2VidXMsIChpbnQpcG9ydCk7XG4rXHRkZXZpY2VfdW5sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbitcdGlmIChJU19FUlIoeHBjcykpIHtcbitcdFx0cHV0X2RldmljZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4rXHRcdHJldHVybiB4cGNzO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHR4cGNzX2Rlc3Ryb3koeHBjcyk7XG4rXHRcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdHB1dF9kZXZpY2UoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuK1x0cmV0dXJuIHhwY3M7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHhwY3NfcmtfY3JlYXRlKTtcbitcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbitcbitcdGNsa19kaXNhYmxlX3VucHJlcGFyZShweHBjcy1cdTAwM2Vjc3JfY2xrKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1xuK1x0cmV0dXJuIGNsa19wcmVwYXJlX2VuYWJsZShweHBjcy1cdTAwM2Vjc3JfY2xrKTtcbit9XG4rXG4rc3RhdGljIERFRklORV9SVU5USU1FX0RFVl9QTV9PUFMoeHBjc19ya19wbV9vcHMsXG4rXHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQsXG4rXHRcdFx0ICAgeHBjc19ya19wbV9ydW50aW1lX3Jlc3VtZSxcbitcdFx0XHQgICBOVUxMKTtcbitcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4cGNzX3JrX2RyaXZlciA9IHtcbitcdC5wcm9iZSA9IHhwY3NfcmtfcHJvYmUsXG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IFwicmtfeHBjcy1kd3hwY3NcIixcbitcdFx0LnBtID0gcG1fcHRyKFx1MDAyNnhwY3NfcmtfcG1fb3BzKSxcbitcdFx0Lm9mX21hdGNoX3RhYmxlID0geHBjc19ya19vZl9pZHMsXG4rXHR9LFxuK307XG4rbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4cGNzX3JrX2RyaXZlcik7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiUm9ja2NoaXAgWFBDUyBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJDb2lhIFByYW50IFx1MDAzY2NvaWFwcmFudEBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuaW5kZXggMDMzN2UyYmNjMDEyNS4uNTBiOWNkZjk0ZmRhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jXG4rKysgYi9kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuY1xuQEAgLTgxNiw5ICs4MTYsMTQgQEAgc3RhdGljIGludCB4cGNzX2NvbmZpZ19hbmVnX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4rXHQvKiBDbGVhciBDTDM3IEFOIGNvbXBsZXRlIHN0YXR1cyAqL1xuK1x0cmV0ID0geHBjc193cml0ZSh4cGNzLCBNRElPX01NRF9WRU5EMiwgRFdfVlJfTUlJX0FOX0lOVFJfU1RTLCAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRpZiAobmVnX21vZGUgPT0gUEhZTElOS19QQ1NfTkVHX0lOQkFORF9FTkFCTEVEKVxuIFx0XHRyZXQgPSB4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBNSUlfQk1DUixcbi1cdFx0XHRcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFKTtcbitcdFx0XHRcdCBtZGlvX2N0cmwgfCBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTA5MywxMCArMTA5OCwxNSBAQCBzdGF0aWMgaW50IHhwY3NfZ2V0X3N0YXRlX2MzN19zZ21paShzdHJ1Y3QgZHdfeHBjcyAqeHBjcyxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHQvKiBDbGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovXG4tXHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpXG4rXHRpZiAoc3RhdGUtXHUwMDNlYW5fY29tcGxldGUpIHtcbitcdFx0LyogQ2xlYXIgQU4gY29tcGxldGUgc3RhdHVzIG9yIGludGVycnVwdCAqL1xuIFx0XHR4cGNzX3dyaXRlKHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApO1xuIFxuK1x0XHQvKiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqL1xuK1x0XHR4cGNzX21vZGlmeSh4cGNzLCBNRElPX01NRF9WRU5EMiwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJULFxuK1x0XHRcdCAgICBCTUNSX0FOUkVTVEFSVCk7XG4rXHR9XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmMgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuaW5kZXggNzg0MzM1NmE0ZGQ0Ny4uOTE5YmI5N2E0YjE4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGh5L3JvY2tjaGlwL3BoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jXG4rKysgYi9kcml2ZXJzL3BoeS9yb2NrY2hpcC9waHktcm9ja2NoaXAtbmFuZW5nLWNvbWJwaHkuY1xuQEAgLTE4Niw2ICsxODYsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9ncmZjZmcge1xuIFx0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfeHBjc19waHlfcmVhZHk7XG4gXHRzdHJ1Y3QgY29tYnBoeV9yZWcgcGlwZV9wY2llMWwwX3NlbDtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyBwaXBlX3BjaWUxbDFfc2VsO1xuK1x0c3RydWN0IGNvbWJwaHlfcmVnIHBpcGVfc2dtaWlfbWFjX3NlbDtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzBfcG9ydF9lbjtcbiBcdHN0cnVjdCBjb21icGh5X3JlZyB1M290ZzFfcG9ydF9lbjtcbiB9O1xuQEAgLTIxMiw2ICsyMTMsNyBAQCBzdHJ1Y3Qgcm9ja2NoaXBfY29tYnBoeV9wcml2IHtcbiBcdGJvb2wgZW5hYmxlX3NzYztcbiBcdGJvb2wgZXh0X3JlZmNsaztcbiBcdHN0cnVjdCBjbGsgKnJlZmNsaztcbitcdHUzMiBzZ21paV9tYWNfc2VsO1xuIH07XG4gXG4gc3RhdGljIHZvaWQgcm9ja2NoaXBfY29tYnBoeV91cGRhdGVsKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYsXG5AQCAtMzc1LDYgKzM3Nyw5IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfY29tYnBoeV9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByb2NrY2hpcF9jb21icGh5XG4gXG4gXHRwcml2LVx1MDAzZWV4dF9yZWZjbGsgPSBkZXZpY2VfcHJvcGVydHlfcHJlc2VudChkZXYsIFwicm9ja2NoaXAsZXh0LXJlZmNsa1wiKTtcbiBcbitcdHByaXYtXHUwMDNlc2dtaWlfbWFjX3NlbCA9IDE7XG4rXHRkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCBcInJvY2tjaGlwLHNnbWlpLW1hYy1zZWxcIiwgXHUwMDI2cHJpdi1cdTAwM2VzZ21paV9tYWNfc2VsKTtcbitcbiBcdHByaXYtXHUwMDNlcGh5X3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgXCJwaHlcIik7XG4gXHQvKiBmYWxsYmFjayB0byBvbGQgYmVoYXZpb3VyICovXG4gXHRpZiAoUFRSX0VSUihwcml2LVx1MDAzZXBoeV9yc3QpID09IC1FTk9FTlQpXG5AQCAtODczLDYgKzg3OCw4IEBAIHN0YXRpYyBpbnQgcmszNTY4X2NvbWJwaHlfY2ZnKHN0cnVjdCByb2NrY2hpcF9jb21icGh5X3ByaXYgKnByaXYpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBQSFlfVFlQRV9TR01JSTpcbitcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBpcGVfZ3JmLCBcdTAwMjZjZmctXHUwMDNlcGlwZV9zZ21paV9tYWNfc2VsLFxuK1x0XHRcdFx0XHRwcml2LVx1MDAzZXNnbWlpX21hY19zZWwgXHUwMDNlIDApO1xuIFx0XHRyb2NrY2hpcF9jb21icGh5X3BhcmFtX3dyaXRlKHByaXYtXHUwMDNlcGlwZV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3hwY3NfcGh5X3JlYWR5LCB0cnVlKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBoeV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3BoeW1vZGVfc2VsLCB0cnVlKTtcbiBcdFx0cm9ja2NoaXBfY29tYnBoeV9wYXJhbV93cml0ZShwcml2LVx1MDAzZXBoeV9ncmYsIFx1MDAyNmNmZy1cdTAwM2VwaXBlX3NlbF9xc2dtaWksIHRydWUpO1xuQEAgLTk4NCw2ICs5OTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJvY2tjaGlwX2NvbWJwaHlfZ3JmY2ZnIHJrMzU2OF9jb21icGh5X2dyZmNmZ3MgPSB7XG4gXHQuY29uM19mb3Jfc2F0YVx0XHQ9IHsgMHgwMDBjLCAxNSwgMCwgMHgwMCwgMHg0NDA3IH0sXG4gXHQvKiBwaXBlLWdyZiAqL1xuIFx0LnBpcGVfY29uMF9mb3Jfc2F0YVx0PSB7IDB4MDAwMCwgMTUsIDAsIDB4MDAsIDB4MjIyMCB9LFxuK1x0LnBpcGVfc2dtaWlfbWFjX3NlbFx0PSB7IDB4MDA0MCwgMSwgMSwgMHgwMCwgMHgwMSB9LFxuIFx0LnBpcGVfeHBjc19waHlfcmVhZHlcdD0geyAweDAwNDAsIDIsIDIsIDB4MDAsIDB4MDEgfSxcbiBcdC51M290ZzBfcG9ydF9lblx0XHQ9IHsgMHgwMTA0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbiBcdC51M290ZzFfcG9ydF9lblx0XHQ9IHsgMHgwMTQ0LCAxNSwgMCwgMHgwMTgxLCAweDExMDAgfSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy1yay5oIGIvaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MtcmsuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI4NzIzZDViZDc1Y2Ncbi0tLSAvZGV2L251bGxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLXJrLmhcbkBAIC0wLDAgKzEsMTEgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX19MSU5VWF9QQ1NfWFBDU19ST0NLQ0hJUF9IXG4rI2RlZmluZSBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY3MvcGNzLXhwY3MuaFx1MDAzZVxuK1xuK3N0cnVjdCBkd194cGNzICp4cGNzX3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApO1xuK1xuKyNlbmRpZiAvKiBfX0xJTlVYX1BDU19YUENTX1JPQ0tDSElQX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjAxLjQwNjE4NzMyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDQ2NzcxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBTZXJpZXM6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoIHNlcmllcywgZm9jdXNpbmcgb24gdGhlIGBhbWQ2NGAgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIHN0ZXAgaXMgdG8gbGF5IG91dCB0aGUgY2hhbmdlcywgcmlnaHQ/IEknbSBzZWVpbmcgYSBidW5jaCBvZiBmaWxlczogZG9jdW1lbnRhdGlvbiBiaW5kaW5ncywgdGhlIGBNQUlOVEFJTkVSU2AgZmlsZSAoYWx3YXlzIGltcG9ydGFudCEpLCBzZXZlcmFsIERUUyBmaWxlcyBmb3IgUm9ja2NoaXAgU29DcyAoYHJrMzU2OGApLCBzb21lIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCB1cGRhdGVzIGluIG5ldHdvcmsgZHJpdmVycywgYW5kIHRoZW4gYSBzbGV3IG9mIGRyaXZlciBmaWxlczogUm9ja2NoaXAtc3BlY2lmaWMgb25lcyBmb3IgUENTIGFuZCBQSFkgKGBwY3MteHBjcy1yay5jYCwgYHBoeS1yb2NrY2hpcC1uYW5lbmctY29tYnBoeS5jYCwgYGR3bWFjLXJrLmNgKSwgcGx1cyBhIHNldCBvZiBgc3RtbWFjYCByZWZhY3RvcmluZyB0b3VjaGVzIGZvciB2YXJpb3VzIGBkd21hY2AgZHJpdmVycyAoYGR3bWFjLWludGVsLmNgLCBgZHdtYWMtcmVuZXNhcy1nYmV0aC5jYCwgYGR3bWFjLXJ6bjEuY2AsIGBkd21hYy1zb2NmcGdhLmNgKSBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMuXG5cbkFoYSEgVGhpcyBicmVha3MgZG93biBuaWNlbHkuIFdlJ3ZlIGdvdCBkaXN0aW5jdCBhcmVhcyBvZiBjb25jZXJuOiB0aGUgUm9ja2NoaXAgU29DLXNwZWNpZmljIGNvZGUsIHRhcmdldGluZyBBUk0vQVJNNjQgcGxhdGZvcm1zLCBhbmQgdGhlbiB0aGUgbW9yZSBnZW5lcmljIGBzdG1tYWNgIHVwZGF0ZXMsIHNvbWUgb2Ygd2hpY2ggc2VlbSB0byBpbnZvbHZlIEludGVsIGhhcmR3YXJlIChgZHdtYWMtaW50ZWwuY2ApLiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYHN0bW1hY19tZGlvLmNgIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgYHN0bW1hY19wY3Nfc2V0dXAoKWAgYW5kIGBzdG1tYWNfcGNzX2NsZWFuKClgLiBBbmQgb2YgY291cnNlIHRoZSBQQ1MtcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgeHBjc19jb25maWdfYW5lZ19jMzdfc2dtaWkoKWAgYW5kIGB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoKWAgaW4gYHBjcy14cGNzLmNgLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGZvciBgYW1kNjRgIGlzIHRoaXM6IGNhbiBJIGV2ZW4gcmVhY2ggYHN0bW1hY2AsIGBkd21hYy1pbnRlbGAsIG9yIHRoZSBgcGNzLXhwY3NgIGNvbXBvbmVudHMgdGhyb3VnaCBzeXprYWxsZXIsIHN0YW5kYXJkIFFFTVUgc2V0dXBzLCBvciB3aWxsIHRoaXMgcmVxdWlyZSB2ZXJ5IHNwZWNpZmljIHBoeXNpY2FsIFBDSSBkZXZpY2VzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBJIG5lZWQgdG8ga25vdyBpZiB0aGVzZSBhcmUgZXZlbiB2aWFibGUgdGFyZ2V0cyBmb3IgZnV6emluZyBvbiBgYW1kNjRgLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gYGR3bWFjLWludGVsLmNgLCB0aGUgYHN0bW1hY2AgY29kZSwgYW5kIGBwY3MteHBjc2Agc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBlbXVsYXRpb24gc3VwcG9ydCBpbiBRRU1VIG9yIGlmIHRoZXNlIGNhbiBiZSByZWFjaGVkIHRocm91Z2ggc29tZSB2aXJ0dWFsIGJ1cyBvciBzdGFuZGFyZCBmdXp6aW5nIHRlY2huaXF1ZXMuXG5cblRpbWUgdG8gc2VhcmNoISBMZXQncyBnZXQgdGhlIGdyZXBwZXIgb3Igc2VhcmNoIHRvb2xzIGdvaW5nIGFuZCBzZWUgd2hhdCB3ZSBjYW4gdW5jb3ZlciBhYm91dCB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGVzZSBjb21wb25lbnRzIG9uIGFuIGBhbWQ2NGAgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIxNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjA3LjExMDg2ODQ3NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ0ODg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9NjQxPXN0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKmludGVsX21nYmVfc2VsZWN0X3BjcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTY0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjY1MDpzdGF0aWMgaW50IGludGVsX21nYmVfY29tbW9uX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02NTEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc5Nj1zdGF0aWMgaW50IGVobF9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODE5OlxcdHJldHVybiBpbnRlbF9tZ2JlX2NvbW1vbl9kYXRhKHBkZXYsIHBsYXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODIwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTU5PXN0YXRpYyBpbnQgdGdsX2NvbW1vbl9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5Nzc6XFx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NzgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMDM0PXN0YXRpYyBpbnQgYWRsbl9jb21tb25fZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTY6XFx0cmV0dXJuIGludGVsX21nYmVfY29tbW9uX2RhdGEocGRldiwgcGxhdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDU3LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NTY6MDcuMTczMzIxODE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2NTU4NzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqRXhhbWluaW5nIHRoZSBkd21hYy1pbnRlbCBEcml2ZXIqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGR3bWFjLWludGVsLmNgLiBGcm9tIHRoZSBuYW1lIGFsb25lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBJbnRlbCBFdGhlcm5ldCBNQUMgY29udHJvbGxlcnMsIHNwZWNpZmljYWxseSB0aG9zZSBmb3VuZCBpbiBFbGtoYXJ0IExha2UgKEVITCksIFRpZ2VyIExha2UgKFRHTCksIGFuZCBBbGRlciBMYWtlLU4gKEFETE4pIHBsYXRmb3Jtcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBwcmVjaXNlbHkgKndoaWNoKiBkZXZpY2VzIGRvZXMgdGhpcyBkcml2ZXIgaW50ZW5kIHRvIHByb2JlIGFuZCBtYW5hZ2U/IFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgSURzLCBvciBwZXJoYXBzIGV2ZW4gdmVuZG9yIElEcywgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW5kLCBmcmFua2x5LCBmb3IgZW5zdXJpbmcgSSdtIGV2ZW4gbG9va2luZyBhdCB0aGUgcmlnaHQgcGllY2Ugb2YgY29kZSBmb3IgdGhlIHRhc2sgYXQgaGFuZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRyaXZlciBhY3R1YWxseSBwcm9iZXMgZm9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aG9zZSBkZXZpY2UgSURzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzIyMywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjA5LjczODkxMTk5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODI0OTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xNDUxPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpbnRlbF9ldGhfcGNpX2lkX3RhYmxlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDUzOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpbnRlbF9ldGhfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NTQtXFx0Lm5hbWUgPSBcXFwiaW50ZWwtZXRoLXBjaVxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxNDYzOm1vZHVsZV9wY2lfZHJpdmVyKGludGVsX2V0aF9wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTE0NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE5OjU2OjA5LjgyNzE2ODAzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg2MDQ1OTYyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHRoYXQncyBldmVuICpyZWFjaGFibGUqIHdpdGhpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBHQ0Ugb3IgUUVNVSBvbiBhbiBhbWQ2NCBhcmNoaXRlY3R1cmUuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVyIGZpbGVzOiBgZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmNgLCBgZHJpdmVycy9waHkvcm9ja2NoaXAvcGh5LXJvY2tjaGlwLW5hbmVuZy1jb21icGh5LmNgLCBhbmQgc2V2ZXJhbCBgc3RtbWFjYCB2YXJpYW50cyAoYGR3bWFjLXJrYCwgYGR3bWFjLXJlbmVzYXMtZ2JldGhgLCBgZHdtYWMtcnpuMWAsIGBkd21hYy1zb2NmcGdhYCwgYGR3bWFjLWludGVsYCwgYHN0bW1hY19tZGlvLmNgLCBhbmQgYHBjcy14cGNzLmNgKS5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGVhY2ggZmlsZSBhZ2FpbnN0IHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCIgb3V0bGluZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgZHJpdmVycyBmb3IgaGFyZHdhcmUgdGhhdCdzICplbXVsYXRlZCogaW4gUUVNVT9cblxuQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGR3bWFjLWludGVsYCBpcyBzcGVjaWZpYyB0byBJbnRlbCBTb0NzIGxpa2UgRWxraGFydCBMYWtlLCBUaWdlciBMYWtlLCBhbmQgQWxkZXIgTGFrZS1OLiBUaG9zZSBhcmUgKnBoeXNpY2FsKiBTb0NzOyBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gU2FtZSBmb3IgYHBjcy14cGNzLXJrYCBhbmQgYGR3bWFjLXJrYCwgd2hpY2ggYXJlIFJvY2tjaGlwIFJLMzU2OCBTb0MgcGxhdGZvcm0gZGV2aWNlcy4gVGhleSdyZSBEVC1iYXNlZCBBUk02NCBoYXJkd2FyZSwgc28gZGVmaW5pdGVseSBub3QgaW4gYSBzdGFuZGFyZCB4ODYgUUVNVSBzZXR1cC4gYGR3bWFjLXJlbmVzYXMtZ2JldGhgLCBgZHdtYWMtcnpuMWAsIGFuZCBgZHdtYWMtc29jZnBnYWAgYXJlIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFJlbmVzYXMgYW5kIEludGVsIFNvQyBGUEdBIEFSTS9SSVNDLVYgYm9hcmRzLiBUaGV5IGRvbid0IGFwcGVhciBpbiB4ODYvYW1kNjQgZW11bGF0aW9uLlxuXG5gc3RtbWFjX21kaW8uY2AgaXMgcGFydCBvZiB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgZHJpdmVyLiBJdCBvbmx5IHJ1bnMgb24gc3RtbWFjIGhhcmR3YXJlLCBhbmQgbm9uZSBvZiB0aG9zZSBhcmUgZW11bGF0ZWQgaW4gbXkgc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGBwY3MteHBjcy5jYCwgd2hpY2ggaXMgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgWFBDUyBkcml2ZXIsIGluc3RhbnRpYXRlZCBieSBzdG1tYWMgb3IgZHdjIHhwY3MgZGV2aWNlcy5cblxuTm93LCBJJ20gdGhpbmtpbmcsIGNvdWxkICphbnkqIHZpcnR1YWwgYnVzIG9yIHNvZnR3YXJlIGVtdWxhdGlvbiBsYXllciBpbnN0YW50aWF0ZSBgc3RtbWFjYCBvciBgcGNzLXhwY3NgPyBJJ20gdGhpbmtpbmcgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgdmlydGlvLCBldGMuIE5vbmUgb2YgdGhvc2UgSSBjYW4gdGhpbmsgb2YgZG8uIFRoZXkgaGF2ZSB0aGVpciBvd24gbmV0d29yayBkZXZpY2VzIGFuZCBkb24ndCByZWx5IG9uIHN0bW1hYyBvciBwY3MteHBjcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrOiBEbyAqYW55KiB2aXJ0dWFsIGRyaXZlcnMsIGxpa2UgYG1hYzgwMjExX2h3c2ltYCwgYG5ldGtpdGAsIGB2ZXRoYCwgYGR1bW15YCwgYHRlYW1gLCBgYm9uZGAsIG9yIGB1c2JuZXRgLCB1dGlsaXplIGBzdG1tYWNgIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgYHBoeWxpbmtgIHdpdGggYHBjcy14cGNzYD8gUGh5bGluayAqaXMqIHVzZWQgYnkgRXRoZXJuZXQgZHJpdmVycywgYnV0IGBwY3MteHBjc2AgaXMgYSBQQ1MgZHJpdmVyIGZvciBTeW5vcHN5cyBEVyBYUENTLCB3aGljaCBpcyB1c2VkIGJ5ICpwaHlzaWNhbCogRXRoZXJuZXQgTUFDcywgbm90IHZpcnR1YWwgb25lcy4gSSdtIGdvaW5nIHRvIGdyZXAgZm9yIGB4cGNzX2NyZWF0ZWAgYWNyb3NzIHRoZSBrZXJuZWwgdG8gYmUgY2VydGFpbiwgYnV0IHNvIGZhciB0aGUgcGF0aCB0byBmdXp6aW5nIGxvb2tzIGJsb2NrZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzcxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjoxOC40MzE3NjgyOTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MTQ3NzU4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4cGNzX2NyZWF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0zMjE9c3RhdGljIGludCBrc3o5NDc3X3Bjc19jcmVhdGUoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTM0NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzozNDY6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0zNDctXFx0aWYgKElTX0VSUihwY3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmM9MzY4PXN0YXRpYyBpbnQgc2phMTEwNV9tZGlvYnVzX3Bjc19yZWdpc3RlcihzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tZGlvLmMtNDExLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jOjQxMjpcXHRcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihidXMsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWRpby5jLTQxMy1cXHRcXHRpZiAoSVNfRVJSKHBjcykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jPTE5Nz1pbnQgZmJuaWNfcGh5bGlua19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGh5bGluay5jLTIwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BoeWxpbmsuYzoyMDU6XFx0cGNzID0geHBjc19jcmVhdGVfcGNzX21kaW9kZXYoZmJkLVxcdTAwM2VtZGlvX2J1cywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19waHlsaW5rLmMtMjA2LVxcdGlmIChJU19FUlIocGNzKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz02MDY9c3RhdGljIGludCBpbnRlbF9tZ2JlX3Bjc19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE1LVxcdFxcdHBjc25vZGUgPSBmd25vZGVfZmluZF9yZWZlcmVuY2UoZGV2bm9kZSwgXFxcInBjcy1oYW5kbGVcXFwiLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjYxNjpcXHRcXHR4cGNzID0geHBjc19jcmVhdGVfZndub2RlKHBjc25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNjE3LVxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KHBjc25vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MTktXFx0XFx0YWRkciA9IGZmcyhwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaykgLSAxO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NjIwOlxcdFxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHByaXYtXFx1MDAzZW1paSwgYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy02MjEtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYz0xMjY9c3RhdGljIGludCB0eGdiZV9tZGlvX3Bjc19pbml0KHN0cnVjdCB0eGdiZSAqdHhnYmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE1NDpcXHRwY3MgPSB4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihtaWlfYnVzLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1NS1cXHRpZiAoSVNfRVJSKHBjcykpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYz00NDc9c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy1yay5jLTQ5MS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYzo0OTI6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3MtXFx1MDAzZWJ1cywgKGludClwb3J0KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYy00OTMtXFx0ZGV2aWNlX3VubG9jayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jPTE0OTk9c3RhdGljIGludCB4cGNzX2lkZW50aWZ5KHN0cnVjdCBkd194cGNzICp4cGNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTUxOC1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTE5OnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGVfZGF0YShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTUyMC17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYz0xNTcxPXN0YXRpYyBpbnQgeHBjc19pbml0X2lkKHN0cnVjdCBkd194cGNzICp4cGNzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTU4NS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTg2OnN0YXRpYyBzdHJ1Y3QgZHdfeHBjcyAqeHBjc19jcmVhdGUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1ODcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTU5MC1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNTkxOlxcdHhwY3MgPSB4cGNzX2NyZWF0ZV9kYXRhKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE1OTItXFx0aWYgKElTX0VSUih4cGNzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2MjItLyoqXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTYyMzogKiB4cGNzX2NyZWF0ZV9tZGlvZGV2KCkgLSBjcmVhdGUgYSBEVyB4UENTIGluc3RhbmNlIHdpdGggdGhlIE1ESU8gQGFkZHJcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjI0LSAqIEBidXM6IHBvaW50ZXIgdG8gdGhlIE1ESU8tYnVzIGRlc2NyaXB0b3IgZm9yIHRoZSBkZXZpY2UgdG8gYmUgbG9va2VkIGF0XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjMwLSAqL1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2MzE6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTYzMi17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjM5LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NDA6XFx0eHBjcyA9IHhwY3NfY3JlYXRlKG1kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NDEtXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY0MjpcXHQvKiB4cGNzX2NyZWF0ZSgpIGhhcyB0YWtlbiBhIHJlZmNvdW50IG9uIHRoZSBtZGlvZGV2IGlmIGl0IHdhc1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NDM6XFx0ICogc3VjY2Vzc2Z1bC4gSWYgeHBjc19jcmVhdGUoKSBmYWlscywgdGhpcyB3aWxsIGZyZWUgdGhlIG1kaW9cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjQ0LVxcdCAqIGRldmljZSBoZXJlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3QgbmVlZCB0byBob2xkIG91ciByZWZlcmVuY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NTEtfVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTI6RVhQT1JUX1NZTUJPTF9HUEwoeHBjc19jcmVhdGVfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1My1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjU0OnN0cnVjdCBwaHlsaW5rX3BjcyAqeHBjc19jcmVhdGVfcGNzX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjU3LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NTg6XFx0eHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYoYnVzLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjU5LVxcdGlmIChJU19FUlIoeHBjcykpXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjYzLX1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjY0OkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX3Bjc19tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjY1LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2NjYtLyoqXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmM6MTY2NzogKiB4cGNzX2NyZWF0ZV9md25vZGUoKSAtIENyZWF0ZSBhIERXIHhQQ1MgaW5zdGFuY2UgZnJvbSBAZndub2RlXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY2OC0gKiBAZndub2RlOiBmd25vZGUgaGFuZGxlIHBvaW5pbmcgdG8gdGhlIERXIFhQQ1MgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjc1LSAqL1xcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2NzY6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jLTE2Nzcte1xcbi0tXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY4Ny1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjg4OlxcdHhwY3MgPSB4cGNzX2NyZWF0ZShtZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjg5LVxcbmRyaXZlcnMvbmV0L3Bjcy9wY3MteHBjcy5jOjE2OTA6XFx0LyogeHBjc19jcmVhdGUoKSBoYXMgdGFrZW4gYSByZWZjb3VudCBvbiB0aGUgbWRpb2RldiBpZiBpdCB3YXNcXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNjkxOlxcdCAqIHN1Y2Nlc3NmdWwuIElmIHhwY3NfY3JlYXRlKCkgZmFpbHMsIHRoaXMgd2lsbCBmcmVlIHRoZSBtZGlvXFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTY5Mi1cXHQgKiBkZXZpY2UgaGVyZS4gSW4gYW55IGNhc2UsIHdlIGRvbid0IG5lZWQgdG8gaG9sZCBvdXIgcmVmZXJlbmNlXFxuLS1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYy0xNjk5LX1cXG5kcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MuYzoxNzAwOkVYUE9SVF9TWU1CT0xfR1BMKHhwY3NfY3JlYXRlX2Z3bm9kZSk7XFxuZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLmMtMTcwMS1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg9NTU9dm9pZCB4cGNzX2NvbmZpZ19lZWVfbXVsdF9mYWN0KHN0cnVjdCBkd194cGNzICp4cGNzLCB1OCBtdWx0X2ZhY3QpO1xcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg6NTY6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX21kaW9kZXYoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIpO1xcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg6NTc6c3RydWN0IGR3X3hwY3MgKnhwY3NfY3JlYXRlX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oLTU4LXZvaWQgeHBjc19kZXN0cm95KHN0cnVjdCBkd194cGNzICp4cGNzKTtcXG5pbmNsdWRlL2xpbnV4L3Bjcy9wY3MteHBjcy5oLTU5LVxcbmluY2x1ZGUvbGludXgvcGNzL3Bjcy14cGNzLmg6NjA6c3RydWN0IHBoeWxpbmtfcGNzICp4cGNzX2NyZWF0ZV9wY3NfbWRpb2RldihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcik7XFxuaW5jbHVkZS9saW51eC9wY3MvcGNzLXhwY3MuaC02MS12b2lkIHhwY3NfZGVzdHJveV9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjoyMC45MDMyNTA4NjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzIxODc0MTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgRnV6emluZyBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIHNlcmllcywgYW5kIGhlcmUncyBteSB0YWtlOiBJdCdzIGFsbCBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3Igc3BlY2lmaWMsIHBoeXNpY2FsIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IGRyaXZlcnMgZm9yIHRoZSBSb2NrY2hpcCBSSzM1NjggWFBDUyBFdGhlcm5ldCBQQ1MsIHNvbWUgYWNjb21wYW55aW5nIFJvY2tjaGlwIG5hbmVuZyBjb21icGh5IGFuZCBkd21hYy1yayBkcml2ZXJzLCBhbmQgdmFyaW91cyBzdG1tYWMvcGNzLXhwY3MgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMsIGluY2x1ZGluZyBJbnRlbC9SZW5lc2FzL0FsdGVyYSBzdG1tYWMgZ2x1ZS5cblxuVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBpcyB0aGF0ICphbGwqIG9mIHRoaXMgY29kZSBmdW5kYW1lbnRhbGx5IHJlbGllcyBvbiBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0J3MgKm5vdCogcHJlc2VudCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSBvbiBhbWQ2NC4gIFRoZSBkcml2ZXJzIGFyZSB0YWlsb3JlZCBmb3Igc3BlY2lmaWMgU29DcyAoUm9ja2NoaXAgUkszNTY4LCBJbnRlbCBTb0NzLCBSZW5lc2FzIFNvQ3MsIGV0Yy4pIGFuZCB2ZW5kb3Itc3BlY2lmaWMgY29udHJvbGxlcnMuIFRoaXMgaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZGV2aWNlIHRyZWVzIHRvby5cblxuRXNzZW50aWFsbHksIHRoZXJlJ3Mgbm8gd2F5IHN5emthbGxlciwgcnVubmluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBpcyBnb2luZyB0byBiZSBhYmxlIHRvIGV2ZW4gKnRvdWNoKiB0aGlzIGNvZGUuIEl0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGFyZSBqdXN0IHRvbyB0aWdodC5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYCwgYW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYW5kIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBiZSBlbXB0eS4gSSdtIGdvaW5nIHRvIHNldCB0aGVzZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcwMiwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTk6NTY6MjYuMjI1MTI4NDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXIgKFhQQ1MpIG9uIFJvY2tjaGlwIFJLMzU2OCBTb0NzLCBpbmNsdWRpbmcgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIChwY3MteHBjcy1yayksIGNvbWJwaHkgdXBkYXRlcywgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIERUUyBub2RlcywgYW5kIHJlbGF0ZWQgc3RtbWFjL3Bjcy14cGNzIHBsdW1iaW5nIGFjcm9zcyBkd21hYy1yaywgZHdtYWMtaW50ZWwsIGR3bWFjLXJlbmVzYXMtZ2JldGgsIGR3bWFjLXJ6bjEsIGFuZCBkd21hYy1zb2NmcGdhLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFNvQyBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB2ZW5kb3Itc3BlY2lmaWMgTUFDcy9QSFlzIChSb2NrY2hpcCBSSzM1NjgsIEludGVsIFNvQyBNQUNzLCBSZW5lc2FzLCBTb0MgRlBHQSkgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VIC8gR0NFIG9uIGFtZDY0KS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxOTo1NjoyNi4yMjUxODk0MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow78d7m[1] Phase: Running StartedAt: 2026-09-07 19:56:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow78d7m[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 19:56:37 +0000 UTC FinishedAt: 2026-09-07 19:56:43 +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,}