Name: series-workflowzvrwm Phase: Failed StartedAt: 2026-09-08 06:44:30 +0000 UTC FinishedAt: 2026-09-08 07:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrwm[0] Phase: Succeeded StartedAt: 2026-09-08 06:44:30 +0000 UTC FinishedAt: 2026-09-08 07:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrwm[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 06:44:30 +0000 UTC FinishedAt: 2026-09-08 07:05:50 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgb2ZmbG9hZCByYXRlIGxpbWl0aW5nIGFuZCByZWxhdGVkIHF1ZXVlIHNjaGVkdWxlciBhZGp1c3RtZW50cy4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQ3Mgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJjMmM5NjAwMTJhMWQ5ZTRhODlhMzM1MmZkM2YwYjNjNTc4OGQ2NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjA1OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuaW5kZXggMTUzZWI1N2JhZDA2Ny4uYzlhNDMyNmQ3MjVkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5AQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbiYjNDM7XHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuJiM0MztcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gY250O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNtcSA9IHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRjbnQgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNudCkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztmYWlsOlxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGVyciwgc21xLCBuID0gMDtcbiYjNDM7XHR1NjQgcmVnX2FkZHJbMl07XG4mIzQzO1x0dTY0IHJlZ192YWxbMl07XG4mIzQzO1x0dTY0IHJhdGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbiYjNDM7XHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XHRcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzBdID0gMDtcbiYjNDM7XHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzFdID0gMDtcbiYjNDM7XHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1xuJiM0MztcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cbiYjNDM7XHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4mIzQzO1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuJiM0MztcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxuJiM0MztcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuJiM0MztcdCAqIGhhcmR3YXJlIGNhcC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4mIzQzO1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbiYjNDM7XHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXG4mIzQzO1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0aWYgKG1heHJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdGlmIChtaW5yYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcbiBcdFx0XHRcdFx0XHQodTY0KWh3LVx1MDAzZXNtcV9saW5rX3R5cGUpO1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICYjNDM7OTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZWRlN2YxMTEzYjcxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuQEAgLTQ4Myw2ICYjNDM7NDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4mIzQzO1x0dTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdF9fdTggbnVtX3RjO1xuJiM0MztcdF9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG90eDJfbXFwcmlvIHtcbiYjNDM7XHR1MzJcdGZsYWdzO1xuJiM0MztcdHU2NFx0Km1pbl9yYXRlO1xuJiM0MztcdHU2NFx0Km1heF9yYXRlO1xuJiM0MztcdGJvb2xcdHJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbFx0cmVwbGFjZV9zZXR1cF9kb25lO1xuJiM0MztcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG90eDJfbmljIHtcbiBcdHZvaWQgX19pb21lbVx0XHQqcmVnX2Jhc2U7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbkBAIC01MTUsNiAmIzQzOzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXHQqY3VyX21xX3NuYXA7XG4mIzQzO1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuJiM0MztcbiBcdHN0cnVjdCBicGZfcHJvZ1x0XHQqeGRwX3Byb2c7XG4gXHRzdHJ1Y3Qgb3R4Ml9xc2V0XHRxc2V0O1xuIFx0c3RydWN0IG90eDJfaHdcdFx0aHc7XG5AQCAtMTI0Niw2ICYjNDM7MTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4mIzQzO1x0XHRcdFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcbiBcdFx0XHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG4gXHR1OCBvbGRfcGZjX2VuO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0b2xkX3BmY19lbiA9IHBmdmYtXHUwMDNlcGZjX2VuO1xuIFx0cGZ2Zi1cdTAwM2VwZmNfZW4gPSBwZmMtXHUwMDNlcGZjX2VuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5AQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGMwZTIxMDBkZTFkOTMuLjY4YWQyZjNkMjIyNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtOTA3LDExICYjNDM7OTA3LDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml9tYm94X3VwX2hhbmRsZXJfcmVwX2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxuIFxuIFx0aWYgKGluZm8tXHUwMDNlZXZlbnQgPT0gUlZVX0VWRU5UX1BPUlRfU1RBVEUpIHtcbiBcdFx0aWYgKGluZm8tXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xuLVx0XHRcdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QT1JUX1VQO1xuJiM0MztcdFx0XHRzZXRfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksXG4mIzQzO1x0XHRcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xuIFx0XHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksXG4mIzQzO1x0XHRcdFx0ICAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBmLVx1MDAzZWZsYWdzKTtcbiBcdFx0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0XHR9XG5AQCAtMjAwNyw2ICYjNDM7MjAwOSwxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIyMDUsNiAmIzQzOzIyMTUsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuJiM0MztlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjIyNiw3ICYjNDM7MjIzNyw4IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0c2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksXG4mIzQzO1x0XHQodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBmLVx1MDAzZWZsYWdzKTtcbiBcdC8qICYjMzk7aW50Zl9kb3duJiMzOTsgbWF5IGJlIGNoZWNrZWQgb24gYW55IGNwdSAqL1xuIFx0c21wX3dtYigpO1xuIFxuQEAgLTIyODAsNiAmIzQzOzIyOTIsNyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBuZXRkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgcWlkeCYjNDM7JiM0MzspXG4gXHRcdG5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpO1xuIFxuJiM0MztcdHN5bmNocm9uaXplX25ldCgpO1xuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbiBcdC8qIERvIG5vdCBjbGVhciBSUS9TUSByaW5nc2l6ZSBzZXR0aW5ncyAqL1xuIFx0bWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7XG5AQCAtMjkyMyw2ICYjNDM7MjkzNiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuJiM0MztcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi4wNDViNDU3M2NlMTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTMxLDYgJiM0MzszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4mIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDksNzUyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcbiYjNDM7e1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGxhY2luZyBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4mIzQzO1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4mIzQzO1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXG4mIzQzO3tcbiYjNDM7XHRpZiAoISpzbmFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4mIzQzO1x0KnNuYXAgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuJiM0MztcdGludCB0YztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqZHN0KSB7XG4mIzQzO1x0XHRzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtXHUwMDNlZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghc25hcClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHQqZHN0ID0gc25hcDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c25hcCA9ICpkc3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25hcC1cdTAwM2Vjb3VudFt0Y10gPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLCBtcXByaW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCA9IHBmdmYtXHUwMDNlY3VyX21xX3NuYXA7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghc25hcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0dTY0IG1heF9yYXRlID0gc25hcC1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1pbl9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcbiYjNDM7XHRcdGlmIChtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHNuYXAtXHUwMDNlY291bnRbdGNdOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBzbmFwLVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVx1MDAzZWNvdW50W3RjXSxcbiYjNDM7XHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWJ1aWxkIHRoZSBUWCBzY2hlZHVsZXIgdmlhIG5ldGRldiByZXN0YXJ0IHdoZW4gcnVubmluZzsgb3R4Ml9tcXByaW9fdXAoKVxuJiM0MztcdCAqIGFsb25lIGlzIGluc3VmZmljaWVudCBhZnRlciBhIGZhaWxlZCByZXBsYWNlIHRoYXQgYWxyZWFkeSBib3VuY2VkIHRoZVxuJiM0MztcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcbiYjNDM7XHQgKiB0byB0aGUgbmV4dCBzdWNjZXNzZnVsIG5kb19vcGVuKCkgdmlhIG90eDJfbXFwcmlvX3VwKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH0gZWxzZSBpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbiYjNDM7ICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGludCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuXG4mIzQzOyAqXG4mIzQzOyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpY1xuJiM0MzsgKiAoY2FycmllciBvZmYsIElSUS9OQVBJIHRlYXJkb3duLCBxdWV1ZSBkcmFpbikuICBUaGUgTklYIFRYIHNjaGVkdWxlciBtdXN0XG4mIzQzOyAqIGJlIHJlYWxsb2NhdGVkIChlLmcuIG9uZSBTTVEgcGVyIG5vbi1Rb1MgcXVldWUpIGFuZCBjYW5ub3QgYmUgcmVwcm9ncmFtbWVkXG4mIzQzOyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLFxuJiM0MzsgKiBkZWxldGUsIGFuZCByb2xsYmFjay4gIFVzZXJzIHNlZSBhIGJyaWVmIGNvbm5lY3Rpdml0eSBibGlwOyB0aGlzIGlzIG5vdCBhXG4mIzQzOyAqIGJ1ZyB0byBcJiMzNDtmaXhcJiMzNDsgd2l0aG91dCBpbXBsZW1lbnRpbmcgdGhlIGxpdmUtcmVwcm9ncmFtbWluZyBwYXRoIG5vdGVkIGJlbG93LlxuJiM0MzsgKiBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIHdpdGhvdXQgY2FsbGluZ1xuJiM0MzsgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiBRdWllc2NlIHRoZSB0cmFuc21pdCBwYXRoIGxpa2UgX19kZXZfY2xvc2VfbWFueSgpIGJlZm9yZSBuZG9fc3RvcCgpIHNvXG4mIzQzOyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuJiM0MztcdGJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4mIzQzO1x0ICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9pbmZvKG5ldGRldixcbiYjNDM7XHRcdCAgICBcJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTsgLyogQ29tbWl0IG5ldGlmX3J1bm5pbmcoKS4gKi9cbiYjNDM7XHR9XG4mIzQzO1x0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFx1MDAyNm5ldGRldi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLlxuJiM0MztcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XG4mIzQzO1x0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXG4mIzQzO1x0ICogcmVtb3ZlZCB0aGUgcWRpc2MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJhdGVfbGltaXQpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ1bm5pbmcpIHtcbiYjNDM7XHRcdHNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4mIzQzO1x0fSBlbHNlIGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuJiM0MztcdFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxuJiM0MztcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4mIzQzO1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbiYjNDM7XHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19JTlRGX0RPV04pLFxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4mIzQzO1x0XHRzbXBfd21iKCk7XG4mIzQzO1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocWNvdW50IFx1MDAzYz0gMSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoXG4mIzQzO1x0ICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuXG4mIzQzO1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4mIzQzO1x0ICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlclxuJiM0MztcdCAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVENcbiYjNDM7XHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuJiM0MztcdCAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2Rlc1xuJiM0MztcdCAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHE7XG4mIzQzO1xuJiM0MztcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnVtX3R4cSBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHR4cSBcdTAwM2U9IG51bV90eHEpIHtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHR4cSwgbnVtX3R4cSk7XG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbiYjNDM7e1xuJiM0MztcdHU2NCBtYnBzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XG4mIzQzO1x0cmV0dXJuIGlsb2cyKG1icHMgLyAyKSBcdTAwM2M9IE1BWF9SQVRFX0VYUE9ORU5UO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZVxuJiM0MztcdCAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZVxuJiM0MztcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCkge1xuJiM0MztcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUpXG4mIzQzO1x0XHRcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbiYjNDM7XHRpZiAoIWhhZF9tcXByaW8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRpbnQgZG93bl9lcnIsIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZG93bl9lcnIpXG4mIzQzO1x0XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4mIzQzO1x0ICogc3RhdGUgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuJiM0MztcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwmIzM0OywgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cGZ2Zi1cdTAwM2Vxb3MucW9zX3RyZWUpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttaW5cJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCYjMzQ7bWF4XCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcbiYjNDM7XHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuJiM0MztcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4mIzQzO1x0ICogbGltaXRzIGluIGhhcmR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4mIzQzO1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbiYjNDM7XHRcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXNcbiYjNDM7XHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2Vjb3VudFtpXSxcbiYjNDM7XHRcdFx0XHQgICAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nKSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9lcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHJlc3RvcmVfZXJyKTtcbiYjNDM7XHRcdFx0aWYgKGV4dGFjaylcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHJlc3RvcmVfZXJyKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0fVxuJiM0MztcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdGNhc2UgVENfUk9PVF9HUkFGVDpcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4mIzQzO1xuJiM0MztcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuJiM0MztcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfUVVFUllfQ0FQUzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTYzMiw2ICYjNDM7MjM3OSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcbiB2b2lkIG90eDJfc2h1dGRvd25fdGMoc3RydWN0IG90eDJfbmljICpuaWMpXG4ge1xuIFx0b3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChuaWMpO1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uYzBiYjdiOTMyMDU2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTEwMzgsNiAmIzQzOzEwNDEsMTQgQEAgc3RhdGljIGludCBvdHgyX3Fvc19yb290X2FkZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBodGJfbWFqX2lkLCB1MTYgaHRiX2RlZmNcbiBcdFx0ICAgXCYjMzQ7VENfSFRCX0NSRUFURTogaGFuZGxlPTB4JXggZGVmY2xzPTB4JXhcXG5cJiMzNDssXG4gXHRcdCAgIGh0Yl9tYWpfaWQsIGh0Yl9kZWZjbHMpO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0hUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cm9vdCA9IG90eDJfcW9zX2FsbG9jX3Jvb3QocGZ2Zik7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocm9vdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgb2ZmbG9hZCByYXRlIGxpbWl0aW5nIGFuZCByZWxhdGVkIHF1ZXVlIHNjaGVkdWxlciBhZGp1c3RtZW50cy4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQ3Mgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjMmM5NjAwMTJhMWQ5ZTRhODlhMzM1MmZkM2YwYjNjNTc4OGQ2NjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjA1OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07CiYjNDM7CQllbHNlCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTsKJiM0MzsKIAkJcmVxLSZndDtyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7CiAJCXJlcS0mZ3Q7cmVndmFsWzFdID0gcGFyZW50ICZsdDsmbHQ7IDE2OwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7CiAJfQogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKIAlyYyA9IG90eDJfc3luY19tYm94X21zZygmYW1wO3BmdmYtJmd0O21ib3gpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtODQ0LDYgJiM0Mzs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKQogCiAJLyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovCiAJZm9yIChsdmwgPSAwOyBsdmwgJmx0OyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykgewomIzQzOwkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtsdmxdID0gMDsKIAkJZm9yIChzY2hxID0gMDsgc2NocSAmbHQ7IE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KQogCQkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAppbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZGV2bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwpAQCAtNDgzLDYgJiM0Mzs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHsKIAlpbnQgbWRldnM7CiB9OwogCiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7CiYjNDM7CXU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CXU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTggbnVtX3RjOwomIzQzOwlfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0MzsJYm9vbAlyZXBsYWNlX3NldHVwX2RvbmU7CiYjNDM7CWJvb2wJcmVwbGFjZV9ncmFmdF9kb25lOwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRkZXY7CkBAIC01MTUsNiAmIzQzOzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXU2NAkJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXN0cnVjdCBvdHgyX21xcHJpbwltcXByaW87CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKmN1cl9tcV9zbmFwOwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwCSpvbGRfbXFfc25hcDsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIChjaGFubmVsLSZndDt0eF9jb3VudCAhPSBwZnZmLSZndDtody50eF9xdWV1ZXMgfHwKJiM0MzsJICAgICBjaGFubmVsLSZndDtyeF9jb3VudCAhPSBwZnZmLSZndDtody5yeF9xdWV1ZXMpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYsCiYjNDM7CQkJICAgICYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaWZfdXApCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzBlMjEwMGRlMWQ5My4uNjhhZDJmM2QyMjI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC05MDcsMTEgJiM0Mzs5MDcsMTMgQEAgc3RhdGljIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9yZXBfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsCiAKIAlpZiAoaW5mby0mZ3Q7ZXZlbnQgPT0gUlZVX0VWRU5UX1BPUlRfU1RBVEUpIHsKIAkJaWYgKGluZm8tJmd0O2V2dF9kYXRhLnBvcnRfc3RhdGUpIHsKLQkJCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUE9SVF9VUDsKJiM0MzsJCQlzZXRfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksCiYjNDM7CQkJCSh1bnNpZ25lZCBsb25nICopJmFtcDtwZi0mZ3Q7ZmxhZ3MpOwogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCQl9IGVsc2UgewotCQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1BPUlRfVVA7CiYjNDM7CQkJY2xlYXJfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksCiYjNDM7CQkJCSAgKHVuc2lnbmVkIGxvbmcgKikmYW1wO3BmLSZndDtmbGFncyk7CiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCX0KQEAgLTIwMDcsNiAmIzQzOzIwMDksMTQgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihwZi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXJzIGR1cmluZyBvcGVuOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfaHc7CiYjNDM7CX0KJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjIwNSw2ICYjNDM7MjIxNSw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmcmVlX2lycSh2ZWMsIHBmKTsKIGVycl9kaXNhYmxlX25hcGk6CiAJb3R4Ml9kaXNhYmxlX25hcGkocGYpOwomIzQzO2Vycl9mcmVlX2h3OgogCW90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpOwogZXJyX2ZyZWVfbWVtOgogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CkBAIC0yMjI2LDcgJiM0MzsyMjM3LDggQEAgaW50IG90eDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAKLQlwZi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKJiM0MzsJc2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksCiYjNDM7CQkodW5zaWduZWQgbG9uZyAqKSZhbXA7cGYtJmd0O2ZsYWdzKTsKIAkvKiAmIzM5O2ludGZfZG93biYjMzk7IG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi8KIAlzbXBfd21iKCk7CiAKQEAgLTIyODAsNiAmIzQzOzIyOTIsNyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IG5ldGRldi0mZ3Q7bnVtX3R4X3F1ZXVlczsgcWlkeCYjNDM7JiM0MzspCiAJCW5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpOwogCiYjNDM7CXN5bmNocm9uaXplX25ldCgpOwogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CiAJLyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovCiAJbWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7CkBAIC0yOTIzLDYgJiM0MzsyOTM2LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjA0NWI0NTczY2UxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDc1MiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZyAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSwgMCwKJiM0MzsJCSAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJCW1lbXNldChwZnZmLSZndDttcXByaW8ubWF4X3JhdGUsIDAsCiYjNDM7CQkgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CQlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipzbmFwKQomIzQzO3sKJiM0MzsJaWYgKCEqc25hcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsICpzbmFwKTsKJiM0MzsJKnNuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwOwomIzQzOwlpbnQgdGM7CiYjNDM7CiYjNDM7CWlmICghKmRzdCkgewomIzQzOwkJc25hcCA9IGRldm1fa3phbGxvYyhwZnZmLSZndDtkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFzbmFwKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJKmRzdCA9IHNuYXA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbmFwID0gKmRzdDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbmFwLSZndDtudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXNuYXAtJmd0O2NvdW50W3RjXSA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsJCXNuYXAtJmd0O29mZnNldFt0Y10gPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJc25hcC0mZ3Q7bWluX3JhdGVbdGNdID0gMDsKJiM0MzsJCXNuYXAtJmd0O21heF9yYXRlW3RjXSA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCXNuYXAtJmd0O21pbl9yYXRlW3RjXSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJc25hcC0mZ3Q7bWF4X3JhdGVbdGNdID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAsIG1xcHJpbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0MzsJcGZ2Zi0mZ3Q7b2xkX21xX3NuYXAgPSBwZnZmLSZndDtjdXJfbXFfc25hcDsKJiM0MzsJcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi0mZ3Q7b2xkX21xX3NuYXA7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CWludCB0YywgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghc25hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSBzbmFwLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQl1NjQgbWF4X3JhdGUgPSBzbmFwLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlpZiAobWluX3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFOwomIzQzOwkJaWYgKG1heF9yYXRlKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gc25hcC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgc25hcC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBzbmFwLSZndDtjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBzbmFwLSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC0mZ3Q7Y291bnRbdGNdLAomIzQzOwkJCQkgICAgc25hcC0mZ3Q7b2Zmc2V0W3RjXSk7CiYjNDM7CiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKCkKJiM0MzsJICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlCiYjNDM7CSAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmUKJiM0MzsJICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLgomIzQzOwkgKi8KJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIHRydWUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9IGVsc2UgaWYgKHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXApOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtvbGRfbXFfc25hcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLAomIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uCiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb24KJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS4KJiM0MzsgKi8KJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhwZnZmLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAodHhxID0gMDsgdHhxICZsdDsgcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXTsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXTsKJiM0MzsKJiM0MzsJCWlmICghbWluX3JhdGUgJmFtcDsmYW1wOyAhbWF4X3JhdGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsCiYjNDM7CQkJCQkJICAgbWF4X3JhdGUpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgdHhxLCBlcnIpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpbwomIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKQomIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLgomIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4KJiM0MzsgKgomIzQzOyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpYwomIzQzOyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3QKJiM0MzsgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZAomIzQzOyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLAomIzQzOyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGEKJiM0MzsgKiBidWcgdG8gJiMzNDtmaXgmIzM0OyB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuCiYjNDM7ICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmcKJiM0MzsgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLgomIzQzOyAqCiYjNDM7ICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzbwomIzQzOyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzOwomIzQzOwlib29sIHJ1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGwKJiM0MzsJICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2luZm8obmV0ZGV2LAomIzQzOwkJICAgICYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfU1RBUlQsICZhbXA7bmV0ZGV2LSZndDtzdGF0ZSk7CiYjNDM7CQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqLwomIzQzOwl9CiYjNDM7CWRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCQlzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgJmFtcDtuZXRkZXYtJmd0O3N0YXRlKTsKJiM0MzsJCQlkZXZfYWN0aXZhdGUobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uCiYjNDM7CSAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90CiYjNDM7CSAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbAomIzQzOwkgKiByZW1vdmVkIHRoZSBxZGlzYy4KJiM0MzsJICovCiYjNDM7CWlmIChyYXRlX2xpbWl0KQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwllbHNlCiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwlpZiAoIWVyciAmYW1wOyZhbXA7IHJ1bm5pbmcpIHsKJiM0MzsJCXNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCAmYW1wO25ldGRldi0mZ3Q7c3RhdGUpOwomIzQzOwkJZGV2X2FjdGl2YXRlKG5ldGRldik7CiYjNDM7CX0gZWxzZSBpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCS8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlCiYjNDM7CQkgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlCiYjNDM7CQkgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy4KJiM0MzsJCSAqLwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CQkvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc28KJiM0MzsJCSAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZQomIzQzOwkJICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4KJiM0MzsJCSAqLwomIzQzOwkJc2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksCiYjNDM7CQkJKHVuc2lnbmVkIGxvbmcgKikmYW1wO3BmdmYtJmd0O2ZsYWdzKTsKJiM0MzsJCS8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqLwomIzQzOwkJc21wX3dtYigpOwomIzQzOwkJbmV0aWZfY2xvc2UobmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJCXU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsCiYjNDM7CQkJCQljb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJaWYgKCFyYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoCiYjNDM7CSAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LgomIzQzOwkgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHMKJiM0MzsJICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlcgomIzQzOwkgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDCiYjNDM7CSAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0CiYjNDM7CSAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2RlcwomIzQzOwkgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJICAgJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcbiYjMzQ7LAomIzQzOwkJICAgbmFtZSwgdGMsIHFjb3VudCk7CiYjNDM7CU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlcyYjMzQ7LAomIzQzOwkJCSAgICAgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG51bV90eHEgJmd0OyBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodHhxICZndDs9IG51bV90eHEpIHsKJiM0MzsJCQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxuJiMzNDssCiYjNDM7CQkJCQkgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXUmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmbHQ7IE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIGlsb2cyKG1icHMgLyAyKSAmbHQ7PSBNQVhfUkFURV9FWFBPTkVOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJYm9vbCBoYWRfbXFwcmlvID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZQomIzQzOwkgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGUKJiM0MzsJICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC4KJiM0MzsJICovCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lICZhbXA7JmFtcDsgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXApIHsKJiM0MzsJCWVyciA9IDA7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSkKJiM0MzsJCQlvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTsKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovCiYjNDM7CWlmICghaGFkX21xcHJpbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoaWZfdXApIHsKJiM0MzsJCWludCBkb3duX2VyciwgZXJyOwomIzQzOwomIzQzOwkJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwkJaWYgKGRvd25fZXJyKQomIzQzOwkJCXJldHVybiBkb3duX2VycjsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJcmV0dXJuIGRvd25fZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlCiYjNDM7CSAqIHN0YXRlIG9ubHkuCiYjNDM7CSAqLwomIzQzOwlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby0mZ3Q7ZXh0YWNrOwomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJYm9vbCByZXBsYWNpbmcgPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IHRjLCB0eHEsIGVyciwgaTsKJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtodykKJiM0MzsJCXJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4JiMzNDssCiYjNDM7CQkJCSAgICAgICBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3hkcF9wcm9nKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtwZnZmLSZndDtxb3MucW9zX3RyZWUpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1pbl9yYXRlICZhbXA7JmFtcDsgbWF4X3JhdGUgJmFtcDsmYW1wOyBtaW5fcmF0ZSAmZ3Q7IG1heF9yYXRlKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsCiYjNDM7CQkJCQkJCSAgIHFjb3VudCwgdGMsICYjMzQ7bWluJiMzNDspOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21heCYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJCSAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXMKJiM0MzsJCSAqIGFyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCSAgICBxb3B0LSZndDtvZmZzZXRbaV0pOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUzsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZykgewomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7CiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCWludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCWlmIChyZXN0b3JlX2VycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCQlpZiAoZXh0YWNrKQomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWQmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgcmVzdG9yZV9lcnIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXG4mIzM0Oyk7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KQomIzQzO3sKJiM0MzsJc3dpdGNoIChyb290LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfUk9PVF9HUkFGVDoKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzOwomIzQzOwomIzQzOwlpZiAoYmFzZS0mZ3Q7dHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwljYXBzLSZndDt2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKIAkJICB2b2lkICp0eXBlX2RhdGEpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX0JMT0NLOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNjMyLDYgJiM0MzsyMzc5LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpOwogdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKQogewogCW90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTsKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7CiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uYzBiYjdiOTMyMDU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7OwpAQCAtMTAzOCw2ICYjNDM7MTA0MSwxNCBAQCBzdGF0aWMgaW50IG90eDJfcW9zX3Jvb3RfYWRkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IGh0Yl9tYWpfaWQsIHUxNiBodGJfZGVmYwogCQkgICAmIzM0O1RDX0hUQl9DUkVBVEU6IGhhbmRsZT0weCV4IGRlZmNscz0weCV4XG4mIzM0OywKIAkJICAgaHRiX21hal9pZCwgaHRiX2RlZmNscyk7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KSB7CiYjNDM7CQluZXRkZXZfZXJyKHBmdmYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O0hUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJcm9vdCA9IG90eDJfcW9zX2FsbG9jX3Jvb3QocGZ2Zik7CiAJaWYgKElTX0VSUihyb290KSkgewogCQllcnIgPSBQVFJfRVJSKHJvb3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHJlYXNvbmFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIG91ciBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgIGRpcmVjdG9yeS4gSSBzZWUgY2hhbmdlcyBpbiBgcnZ1X25peC5jYCwgYG90eDJfY29tbW9uLmMvaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgdXBkYXRlIHRvIHNldmVyYWwga2V5IG1vZHVsZXMuCgpOZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgcmVhY2hhYmlsaXR5LiBUaGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciBpcyBvYnZpb3VzbHkgdGhlIHRhcmdldCAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyYCkuIE5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IGlzIHRoaXMgZHJpdmVyIHRpZWQgdG8gc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgYSBTbWFydE5JQyBvciBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRldmljZSwgb3IgZG9lcyBpdCBhbHNvIHN1cHBvcnQgYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IEtub3dpbmcgdGhpcyB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IG91ciBmdXp6aW5nIGFwcHJvYWNoLiBQaHlzaWNhbCBoYXJkd2FyZSBvZnRlbiBpbnRyb2R1Y2VzIGNvbXBsZXhpdGllcyByZWxhdGVkIHRvIGFjY2Vzc2liaWxpdHkgYW5kIHJlcHJvZHVjaWJpbGl0eSwgd2hlcmVhcyB2aXJ0dWFsaXphdGlvbiBwcm92aWRlcyBhIG1vcmUgY29udHJvbGxlZCBhbmQgcG90ZW50aWFsbHkgc2ltcGxlciB0ZXN0aW5nIGVudmlyb25tZW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBhbiBlYXNpbHkgZnV6emFibGUgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGFuZCB2aXJ0dWFsIG1hY2hpbmUgc3VwcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPQ1RFT05UWDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXHRib29sIFwmIzM0O0Rpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00OC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTUxPWNvbmZpZyBSVlVfRVNXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSAmIzQzOz0gYWYvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICYjNDM7PSBuaWMvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IHJ2dV9tYm94Lm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IHJ2dV9hZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX1JQTSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oOjE2OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXHRcdDB4QTA1OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE1ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUobnBjX21jYW1fbGF5b3V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjYtc3RhdGljIGludCBfX25hbWUgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE3MC19XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yNDItI2RlZmluZSBUT1RBTF9TWiAoTUFYX05VTV9CQU5LUyAqIE1BWF9OVU1fU1VCX0JBTktTICogTUFYX1NVQkJBTktfREVQVEggKiA2NClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTI0NT1zdGF0aWMgaW50IG5wY19tY2FtX21pc21hdGNoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcJiMzNDsldVxcdCVkXFx0JXVcXG5cJiMzNDsgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjg2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6MjE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1BUUFx0XHRcdDB4QTAwQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXHRcdDB4QjEwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcdDB4QjYwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFx0XHRcdDB4QTA4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXHRcdFx0MHhBMDlFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MzpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NlhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk3LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDI6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDQtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVNTV9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNi1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo5MzQ6XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVx0aWYgKCFwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDc9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDUzOlx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NTQtXHRcdFx0ICAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0NzE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXHQweEEwRjhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz0zNDczPXN0YXRpYyBpbnQgcnZ1X2VuYWJsZV9zcmlvdihzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0OTU6XHRpZiAocnZ1LVx1MDAzZXZmX2RldmlkID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0OTYtXHRcdGNoYW5zID0gcnZ1X2dldF9udW1fbGJrX2NoYW5zKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjMtLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXHRcdDB4QTA2NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVx0UENJX0RFVklEX09DVEVPTlRYMl9MQktcdFx0XHQweEEwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jPTM5Mj1zdGF0aWMgdm9pZCBydnVfbGJrX3NldF9jaGFubmVscyhzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDE1LVx0XHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MTY6XHRcdFx0XHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MTctXHRcdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MDA9c3RhdGljIHZvaWQgcnZ1X2RiZ19ucGFfaW5pdChzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODE5LS8qIFBlci1sbWFjIENHWCBkZWJ1Z2ZzIGZpbGVzIG5lZWQgYm90aCBSVlUgYW5kIENHWCBoYW5kbGU7IGlub2RlLVx1MDAzZWlfcHJpdmF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyODIwOiAqIHBvaW50cyBoZXJlIHNvIHNlcV9maWxlIG9wcyBhdm9pZCBwY2lfZ2V0X2RldmljZShQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRikuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4MjEtICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgJiM0Mzs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgJiM0Mzs9IHJ2dV9yZXAub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTQzLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NDojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ1OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcdFx0MHhBMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcdFx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUyOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXHRcdDB4QTBGN1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjE5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjYyMTpcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYyMi1cdFx0KHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9SVlVfUkVQKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02Mzc9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYzOC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2Mzk6XHRyZXR1cm4gcGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjQwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3BmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzgtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI0Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXHR7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgxOQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA5MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE9jdGVvblRYMiBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgYWJvdXQgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgVGhpcyBtZWFucyBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGtleS4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBmYW1pbHksIHdoaWNoLCBmcm9tIG15IGV4cGVyaWVuY2UsIGFyZSBwcm9wcmlldGFyeSBoYXJkd2FyZSBTb0NzIG9yIFNtYXJ0TklDcyBmcm9tIENhdml1bS9NYXJ2ZWxsLiBUaGV5IGdvIGJ5IG5hbWVzIGxpa2UgT0NURU9OVFgyX0FGLCBPQ1RFT05UWDJfUEYsIGFuZCBPQ1RFT05UWDJfVkYgYW5kIGFyZSBiYXNlZCBvbiB0aGUgT2N0ZW9uVFgyIENOOUsvQ04xMEsvQ04yMEsgc2lsaWNvbi4gSSBrbm93IHRoZXNlIHJlcXVpcmUgYWN0dWFsIE9jdGVvblRYMiBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgUENJIGRldmljZXM7IHRoZXkgYXJlIG5vdCBnb2luZyB0byBydW4gd2l0aG91dCB0aGUgcmVhbCBzaWxpY29uLiBObyB3YXkgd2lsbCB0aGV5IHJ1biBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gIGRpcmVjdG9yeS4gQSBxdWljayBjaGVjayBvZiB0aGUgbW9kaWZpZWQgZmlsZXMgY29uZmlybXMgdGhpcy4gIFdlJiMzOTtyZSBsb29raW5nIGF0IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uYy8uaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQuCgpTaW5jZSBhbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNsZWFubHkgd2l0aGluIHRoZSBPY3Rlb25UWDIgZHJpdmVyIGNvZGUsIGFuZCB0aGlzIGRyaXZlciBpcyB1bmRlbmlhYmx5IHRpZWQgdG8gcGh5c2ljYWwgTWFydmVsbCBoYXJkd2FyZSwgdGhlICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY29uZGl0aW9uIGlzIGRlZmluaXRlbHkgbWV0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgZ2l0IGRpZmYgYW5kIGNvbmZpcm1lZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBvdXRzaWRlIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCBkaXJlY3RvcnkuCgpUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBmYWxzZS4gVGhlcmUmIzM5O3Mgbm8gcG9pbnQgaW4gZnV6emluZyB0aGlzIGFzIGl0IGNhbiYjMzk7dCBiZSBleGVjdXRlZCB3aXRob3V0IHRoZSByZWFsIGhhcmR3YXJlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIGEgZHJpdmVyIHRoYXQgZnVuZGFtZW50YWxseSByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2FuJiMzOTt0IGJlIGVtdWxhdGVkLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNToyMy4xMDk3NTIyMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAzMDQ3MDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIG9mZmxvYWQgcmF0ZSBsaW1pdGluZyBhbmQgcmVsYXRlZCBxdWV1ZSBzY2hlZHVsZXIgYWRqdXN0bWVudHMuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgTWFydmVsbC9DYXZpdW0gT2N0ZW9uVFgyIGhhcmR3YXJlIC8gU21hcnROSUNzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjA1OjIzLjEwOTc1Njc4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4OTQyNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmMyYzk2MDAxMmExZDllNGE4OWEzMzUyZmQzZjBiM2M1Nzg4ZDY2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjA1OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcXG4rXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuQEAgLTYxNSw2ICs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4rb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcXG4rXFx0XFx0c21xID0gcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXFxuK1xcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXFxuK1xcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cXG4rXFx0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcbitcXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRpZiAobWlucmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gbjtcXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxcbiB7XFxuIFxcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XFxuQEAgLTY1MSw3ICs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcXG4gXFx0XFx0XFx0XFx0XFx0XFx0KHU2NClody1cXHUwMDNlc21xX2xpbmtfdHlwZSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG4gXFx0XFx0LyogTURRIGNvbmZpZyAqL1xcbi1cXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzksNiArOTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4gXFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5AQCAtODQ0LDYgKzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcbiBcXHQvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi9cXG4gXFx0Zm9yIChsdmwgPSAwOyBsdmwgXFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsKyspIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcXG4gXFx0XFx0Zm9yIChzY2hxID0gMDsgc2NocSBcXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHErKylcXG4gXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbkBAIC0xNyw2ICsxNyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hY3NlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuQEAgLTQ4Myw2ICs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcXG4gXFx0aW50IG1kZXZzO1xcbiB9O1xcbiBcXG4rc3RydWN0IG1xX29mZmxvYWRfc25hcCB7XFxuK1xcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XFxuK1xcdHU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XFxuK1xcdF9fdTggbnVtX3RjO1xcbitcXHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XFxuK1xcdF9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07XFxuK307XFxuK1xcbitzdHJ1Y3Qgb3R4Ml9tcXByaW8ge1xcbitcXHR1MzJcXHRmbGFncztcXG4rXFx0dTY0XFx0Km1pbl9yYXRlO1xcbitcXHR1NjRcXHQqbWF4X3JhdGU7XFxuK1xcdGJvb2xcXHRyYXRlX2xpbWl0O1xcbitcXHRib29sXFx0cmVwbGFjZV9zZXR1cF9kb25lO1xcbitcXHRib29sXFx0cmVwbGFjZV9ncmFmdF9kb25lO1xcbit9O1xcbitcXG4gc3RydWN0IG90eDJfbmljIHtcXG4gXFx0dm9pZCBfX2lvbWVtXFx0XFx0KnJlZ19iYXNlO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZVxcdCpuZXRkZXY7XFxuQEAgLTUxNSw2ICs1MzMsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcXG4gXFx0dTY0XFx0XFx0XFx0ZmxhZ3M7XFxuIFxcdHU2NFxcdFxcdFxcdCpjcV9vcF9hZGRyO1xcbiBcXG4rXFx0c3RydWN0IG90eDJfbXFwcmlvXFx0bXFwcmlvO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0KmN1cl9tcV9zbmFwO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0Km9sZF9tcV9zbmFwO1xcbitcXG4gXFx0c3RydWN0IGJwZl9wcm9nXFx0XFx0KnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0XFx0cXNldDtcXG4gXFx0c3RydWN0IG90eDJfaHdcXHRcXHRodztcXG5AQCAtMTI0Niw2ICsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcXG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXFxuK1xcdFxcdFxcdFxcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxcbiBcXHRcXHRcXHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcXG4gXFx0dTggb2xkX3BmY19lbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNiBwZmMtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRvbGRfcGZjX2VuID0gcGZ2Zi1cXHUwMDNlcGZjX2VuO1xcbiBcXHRwZnZmLVxcdTAwM2VwZmNfZW4gPSBwZmMtXFx1MDAzZXBmY19lbjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbmluZGV4IDliZWUxYjkxZWVhYTYuLmVjMjYwMWM2YzI1NWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoY2hhbm5lbC1cXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcudHhfcXVldWVzIHx8XFxuK1xcdCAgICAgY2hhbm5lbC1cXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcucnhfcXVldWVzKSkge1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoaWZfdXApXFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AoZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuaW5kZXggYzBlMjEwMGRlMWQ5My4uNjhhZDJmM2QyMjI3NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbkBAIC05MDcsMTEgKzkwNywxMyBAQCBzdGF0aWMgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX3JlcF9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZixcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xcbiBcXHRcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xcbi1cXHRcXHRcXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19QT1JUX1VQKSxcXG4rXFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2cGYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX1BPUlRfVVApLFxcbitcXHRcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnBmLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xcbiBcXHRcXHR9XFxuQEAgLTIwMDcsNiArMjAwOSwxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMjA1LDYgKzIyMTUsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yMjI2LDcgKzIyMzcsOCBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuK1xcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19JTlRGX0RPV04pLFxcbitcXHRcXHQodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwZi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHQvKiAnaW50Zl9kb3duJyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXFxuIFxcdHNtcF93bWIoKTtcXG4gXFxuQEAgLTIyODAsNiArMjI5Miw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIG5ldGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgcWlkeCsrKVxcbiBcXHRcXHRuZXRkZXZfdHhfcmVzZXRfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIHFpZHgpKTtcXG4gXFxuK1xcdHN5bmNocm9uaXplX25ldCgpO1xcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbiBcXHQvKiBEbyBub3QgY2xlYXIgUlEvU1EgcmluZ3NpemUgc2V0dGluZ3MgKi9cXG4gXFx0bWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7XFxuQEAgLTI5MjMsNiArMjkzNiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uMDQ1YjQ1NzNjZTE0ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTMxLDYgKzMzLDEwIEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXFx0MjUwMDAwVUxMXFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA5LDc1MiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTtcXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKClcXG4rXFx0ICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlXFxuK1xcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcXG4rXFx0ICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxcbitcXHQgKi9cXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIHRydWUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9IGVsc2UgaWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXApO1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpbnQgdHhxLCBlcnI7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yICh0eHEgPSAwOyB0eHEgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XFxuK1xcbitcXHRcXHRpZiAoIW1pbl9yYXRlIFxcdTAwMjZcXHUwMDI2ICFtYXhfcmF0ZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG1heF9yYXRlKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0eHEsIGVycik7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xcbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcXG4rICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXFxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cXG4rICpcXG4rICogSW50ZW50aW9uYWwgYmVoYXZpb3VyOiB0aGlzIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGRyb3BzIGluLWZsaWdodCB0cmFmZmljXFxuKyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcXG4rICogYmUgcmVhbGxvY2F0ZWQgKGUuZy4gb25lIFNNUSBwZXIgbm9uLVFvUyBxdWV1ZSkgYW5kIGNhbm5vdCBiZSByZXByb2dyYW1tZWRcXG4rICogbGl2ZSB0b2RheSwgc28gYSBuZXRkZXYgYm91bmNlIGlzIHJlcXVpcmVkIG9uIGV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsXFxuKyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcXG4rICogYnVnIHRvIFxcXCJmaXhcXFwiIHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoZSBsaXZlLXJlcHJvZ3JhbW1pbmcgcGF0aCBub3RlZCBiZWxvdy5cXG4rICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmdcXG4rICogbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnkgdGhlIG9wZW4gZXJyb3IgcGF0aC5cXG4rICpcXG4rICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzb1xcbisgKiBvdHgyX3htaXQoKSBjYW5ub3QgcmFjZSBvdHgyX2ZyZWVfcXVldWVfbWVtKCkuXFxuKyAqL1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcztcXG4rXFx0Ym9vbCBydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbFxcbitcXHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfaW5mbyhuZXRkZXYsXFxuK1xcdFxcdCAgICBcXFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXFx1MDAyNm5ldGRldi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xcbitcXHR9XFxuK1xcdGRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWYgKHJ1bm5pbmcpIHtcXG4rXFx0XFx0XFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFxcdTAwMjZuZXRkZXYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0XFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uXFxuK1xcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XFxuK1xcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxcbitcXHQgKiByZW1vdmVkIHRoZSBxZGlzYy5cXG4rXFx0ICovXFxuK1xcdGlmIChyYXRlX2xpbWl0KVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHJ1bm5pbmcpIHtcXG4rXFx0XFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFxcdTAwMjZuZXRkZXYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XFxuK1xcdH0gZWxzZSBpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxcbitcXHRcXHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXFxuK1xcdFxcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcdFxcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xcbitcXHRcXHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcXG4rXFx0XFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19JTlRGX0RPV04pLFxcbitcXHRcXHRcXHQodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwZnZmLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xcbitcXHRcXHRzbXBfd21iKCk7XFxuK1xcdFxcdG5ldGlmX2Nsb3NlKG5ldGRldik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0aWYgKCFyYXRlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChxY291bnQgXFx1MDAzYz0gMSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoXFxuK1xcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxcbitcXHQgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHNcXG4rXFx0ICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlclxcbitcXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXFxuK1xcdCAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0XFxuK1xcdCAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2Rlc1xcbitcXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHQgICBcXFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxcXG5cXFwiLFxcbitcXHRcXHQgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHE7XFxuK1xcbitcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgbnVtX3R4cSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcW9wdC1cXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobnVtX3R4cSBcXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBudW1fdHhxKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcXG4re1xcbitcXHR1NjQgbWJwcztcXG4rXFxuK1xcdGlmICghcmF0ZV9ieXRlc19wcylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcXG4rXFx0cmV0dXJuIGlsb2cyKG1icHMgLyAyKSBcXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXFxuK1xcdCAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZVxcbitcXHQgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXApIHtcXG4rXFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUpXFxuK1xcdFxcdFxcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRpZiAoZG93bl9lcnIpXFxuK1xcdFxcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcXG4rXFx0ICogc3RhdGUgb25seS5cXG4rXFx0ICovXFxuK1xcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cXHUwMDNlZXh0YWNrO1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnBmdmYtXFx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1pblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLCBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXFxuK1xcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XFxuK1xcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXFxuK1xcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xcbitcXHRcXHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2Vjb3VudFtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTE2MzIsNiArMjM3OSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcXG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbiB7XFxuIFxcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmMwYmI3YjkzMjA1NmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5AQCAtMTAzOCw2ICsxMDQxLDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9xb3Nfcm9vdF9hZGQoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgaHRiX21hal9pZCwgdTE2IGh0Yl9kZWZjXFxuIFxcdFxcdCAgIFxcXCJUQ19IVEJfQ1JFQVRFOiBoYW5kbGU9MHgleCBkZWZjbHM9MHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICAgaHRiX21hal9pZCwgaHRiX2RlZmNscyk7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdHJvb3QgPSBvdHgyX3Fvc19hbGxvY19yb290KHBmdmYpO1xcbiBcXHRpZiAoSVNfRVJSKHJvb3QpKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIocm9vdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjA1OjIzLjcyOTM1ODY3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU0MTA4NDQ0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIG9mZmxvYWQgcmF0ZSBsaW1pdGluZyBhbmQgcmVsYXRlZCBxdWV1ZSBzY2hlZHVsZXIgYWRqdXN0bWVudHMuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgTWFydmVsbC9DYXZpdW0gT2N0ZW9uVFgyIGhhcmR3YXJlIC8gU21hcnROSUNzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmMyYzk2MDAxMmExZDllNGE4OWEzMzUyZmQzZjBiM2M1Nzg4ZDY2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MDU6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNSw2ICs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MrKztcbkBAIC03NzksNiArOTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuK1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFxuIFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXG4gXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XG4rXHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcbiBcdFx0Zm9yIChzY2hxID0gMDsgc2NocSBcdTAwM2MgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSsrKVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZWRlN2YxMTEzYjcxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbitzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHtcbitcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191OCBudW1fdGM7XG4rXHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK307XG4rXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcbitcdHUzMlx0ZmxhZ3M7XG4rXHR1NjRcdCptaW5fcmF0ZTtcbitcdHU2NFx0Km1heF9yYXRlO1xuK1x0Ym9vbFx0cmF0ZV9saW1pdDtcbitcdGJvb2xcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcbitcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbit9O1xuK1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgKzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNjgsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGMwZTIxMDBkZTFkOTMuLjY4YWQyZjNkMjIyNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtOTA3LDExICs5MDcsMTMgQEAgc3RhdGljIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9yZXBfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsXG4gXG4gXHRpZiAoaW5mby1cdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xuIFx0XHRpZiAoaW5mby1cdTAwM2VldnRfZGF0YS5wb3J0X3N0YXRlKSB7XG4tXHRcdFx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XG4rXHRcdFx0c2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX1BPUlRfVVApLFxuK1x0XHRcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xuIFx0XHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbitcdFx0XHRjbGVhcl9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19QT1JUX1VQKSxcbitcdFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHRcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdFx0fVxuQEAgLTIwMDcsNiArMjAwOSwxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlcnMgZHVyaW5nIG9wZW46ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0Z290byBlcnJfZnJlZV9odztcbitcdH1cbitcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIyMDUsNiArMjIxNSw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4rZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuQEAgLTIyMjYsNyArMjIzNyw4IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4rXHRzZXRfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfSU5URl9ET1dOKSxcbitcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHQvKiAnaW50Zl9kb3duJyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXG4gXHRzbXBfd21iKCk7XG4gXG5AQCAtMjI4MCw2ICsyMjkyLDcgQEAgaW50IG90eDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IHFpZHgrKylcbiBcdFx0bmV0ZGV2X3R4X3Jlc2V0X3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobmV0ZGV2LCBxaWR4KSk7XG4gXG4rXHRzeW5jaHJvbml6ZV9uZXQoKTtcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG4gXHQvKiBEbyBub3QgY2xlYXIgUlEvU1EgcmluZ3NpemUgc2V0dGluZ3MgKi9cbiBcdG1lbXNldF9zdGFydGF0KHFzZXQsIDAsIHNxZV9jbnQpO1xuQEAgLTI5MjMsNiArMjkzNiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjA0NWI0NTczY2UxNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiArMTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY24xMGsuaFwiXG4gI2luY2x1ZGUgXCJvdHgyX2NvbW1vbi5oXCJcbkBAIC0zMSw2ICszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4rLyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1x0MjUwMDAwVUxMXG4rLyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiArNjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbitcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuK1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE2MDAsMTQgKzE2MDksNzUyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4rLyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCByZXBsYWNpbmcpXG4re1xuK1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuK1xuK1x0aWYgKHJlcGxhY2luZyBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCxcbitcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSk7XG4rXHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcbitcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipzbmFwKVxuK3tcbitcdGlmICghKnNuYXApXG4rXHRcdHJldHVybjtcbitcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsICpzbmFwKTtcbitcdCpzbmFwID0gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19zbmFwX2NvcHkoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7XG4rXHRpbnQgdGM7XG4rXG4rXHRpZiAoISpkc3QpIHtcbitcdFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVx1MDAzZWRldiwgc2l6ZW9mKCpzbmFwKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghc25hcClcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0KmRzdCA9IHNuYXA7XG4rXHR9IGVsc2Uge1xuK1x0XHRzbmFwID0gKmRzdDtcbitcdH1cbitcbitcdHNuYXAtXHUwMDNlbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YysrKSB7XG4rXHRcdHNuYXAtXHUwMDNlY291bnRbdGNdID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXHRcdHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSAwO1xuK1x0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IDA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHJldHVybiBvdHgyX21xcHJpb19zbmFwX2NvcHkocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCwgbXFwcmlvKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9jb21taXQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbitcdHBmdmYtXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwO1xuK1x0cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IGZhbHNlO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHJldHVybiBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTtcbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxLCBlcnI7XG4rXG4rXHRpZiAoIXNuYXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgZmFsc2UpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdHU2NCBtYXhfcmF0ZSA9IHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7XG4rXHRcdGlmIChtYXhfcmF0ZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbitcbitcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gKyBzbmFwLVx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC1cdTAwM2Vjb3VudFt0Y10sXG4rXHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbitcbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKClcbitcdCAqIGFsb25lIGlzIGluc3VmZmljaWVudCBhZnRlciBhIGZhaWxlZCByZXBsYWNlIHRoYXQgYWxyZWFkeSBib3VuY2VkIHRoZVxuK1x0ICogaW50ZXJmYWNlLiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZVxuK1x0ICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxuK1x0ICovXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCB0cnVlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fSBlbHNlIGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rfVxuK1xuKy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbisgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbisgKi9cbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cbisgKlxuKyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpY1xuKyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcbisgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZFxuKyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLFxuKyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcbisgKiBidWcgdG8gXCJmaXhcIiB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuXG4rICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmdcbisgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxuKyAqXG4rICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzb1xuKyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cbisgKi9cbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbitcdGJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4rXHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4rXHQgKi9cbitcdG5ldGRldl9pbmZvKG5ldGRldixcbitcdFx0ICAgIFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cIik7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xuK1x0fVxuK1x0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAocnVubmluZykge1xuK1x0XHRcdHNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cbitcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XG4rXHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbitcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxuK1x0ICovXG4rXHRpZiAocmF0ZV9saW1pdClcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXHRlbHNlXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnVubmluZykge1xuK1x0XHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXHUwMDI2bmV0ZGV2LVx1MDAzZXN0YXRlKTtcbitcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4rXHR9IGVsc2UgaWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHRcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXG4rXHRcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcbitcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4rXHRcdCAqL1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4rXHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuK1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuK1x0XHQgKi9cbitcdFx0c2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksXG4rXHRcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZnZmLVx1MDAzZWZsYWdzKTtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0aWYgKGRvd25fZXJyKVxuK1x0XHRcdHJldHVybiBkb3duX2VycjtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZwZnZmLVx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWluXCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuK1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbitcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuK1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwiLFxuK1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1xuK1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuK1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0ICAgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRpZiAocmVzdG9yZV9lcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICByZXN0b3JlX2Vycik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICByZXN0b3JlX2Vycik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXG5cIik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXCIpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuK1x0fVxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4re1xuK1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbitcdGNhc2UgVENfUk9PVF9HUkFGVDpcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4rXG4rXHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgKzIzNzksNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuIHtcbiBcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcbitcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uYzBiYjdiOTMyMDU2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4rXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbitcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4rXHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSsrO1xuQEAgLTEwMzgsNiArMTA0MSwxNCBAQCBzdGF0aWMgaW50IG90eDJfcW9zX3Jvb3RfYWRkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IGh0Yl9tYWpfaWQsIHUxNiBodGJfZGVmY1xuIFx0XHQgICBcIlRDX0hUQl9DUkVBVEU6IGhhbmRsZT0weCV4IGRlZmNscz0weCV4XFxuXCIsXG4gXHRcdCAgIGh0Yl9tYWpfaWQsIGh0Yl9kZWZjbHMpO1xuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIkhUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0cm9vdCA9IG90eDJfcW9zX2FsbG9jX3Jvb3QocGZ2Zik7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocm9vdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNToyMy43MjkzNjE3ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTMxMzI5MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHJlYXNvbmFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIG91ciBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgIGRpcmVjdG9yeS4gSSBzZWUgY2hhbmdlcyBpbiBgcnZ1X25peC5jYCwgYG90eDJfY29tbW9uLmMvaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgdXBkYXRlIHRvIHNldmVyYWwga2V5IG1vZHVsZXMuXG5cbk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgZHJpdmVyIGFuZCBoYXJkd2FyZSByZWFjaGFiaWxpdHkuIFRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyIGlzIG9idmlvdXNseSB0aGUgdGFyZ2V0IChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgKS4gTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGFyaXNlczogaXMgdGhpcyBkcml2ZXIgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSwgbGlrZSBhIFNtYXJ0TklDIG9yIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlLCBvciBkb2VzIGl0IGFsc28gc3VwcG9ydCBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3Qgb3VyIGZ1enppbmcgYXBwcm9hY2guIFBoeXNpY2FsIGhhcmR3YXJlIG9mdGVuIGludHJvZHVjZXMgY29tcGxleGl0aWVzIHJlbGF0ZWQgdG8gYWNjZXNzaWJpbGl0eSBhbmQgcmVwcm9kdWNpYmlsaXR5LCB3aGVyZWFzIHZpcnR1YWxpemF0aW9uIHByb3ZpZGVzIGEgbW9yZSBjb250cm9sbGVkIGFuZCBwb3RlbnRpYWxseSBzaW1wbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIEkgY2FuIHRlc3QgdGhpcyB3aXRoaW4gYW4gZWFzaWx5IGZ1enphYmxlIHNldHVwLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGFuZCB2aXJ0dWFsIG1hY2hpbmUgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5OTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNToyOC42NjA2OTM1MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTYwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTItXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTIyPWNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiRGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoyNDpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXFx0ZGVmYXVsdCBuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz01MT1jb25maWcgUlZVX0VTV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTU0LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBhZi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICs9IG5pYy9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IHJ2dV9tYm94Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfQUYpICs9IHJ2dV9hZi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo2NzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9DTjEwS19SUE0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaDoxNjojZGVmaW5lXFx0UENJX0RFVklEX09DVEVPTlRYMl9DR1hcXHRcXHQweEEwNTlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xNTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5wY19tY2FtX2xheW91dCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE2NTojZGVmaW5lIERFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKF9fbmFtZSwgX19zaXplKVxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY2LXN0YXRpYyBpbnQgX19uYW1lICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzAtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTcxOl9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTgxPXN0YXRpYyBpbnQgbnBjX21jYW1fZHN0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQyLSNkZWZpbmUgVE9UQUxfU1ogKE1BWF9OVU1fQkFOS1MgKiBNQVhfTlVNX1NVQl9CQU5LUyAqIE1BWF9TVUJCQU5LX0RFUFRIICogNjQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI0MzpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9kc3RhdHMsIFRPVEFMX1NaKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0yNDU9c3RhdGljIGludCBucGNfbWNhbV9taXNtYXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcXFwiJXVcXFxcdCVkXFxcXHQldVxcXFxuXFxcIiBuZWVkcyBsZXNzIHRoYW4gNjQgY2hhcmFjdGVycyB0byBwcmludC4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjIxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9QVFBcXHRcXHRcXHQweEEwMENcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMi0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFBcXHRcXHQweEIxMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcXHQweEI2MDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyODojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlNUXFx0XFx0XFx0MHhBMDg1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXFx0XFx0XFx0MHhBMDlFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTEtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTM6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTUtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTZYWF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTk2OlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Ny1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk4LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDAtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjAyOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA0LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1TU1fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwNTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDYtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXFx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTkzMy1cXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6OTM0OlxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzUtXFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ0Nz1pbnQgcnZ1X2dldF9udW1fbGJrX2NoYW5zKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0NTM6XFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDU0LVxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDcxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRlxcdDB4QTBGOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ3Mz1zdGF0aWMgaW50IHJ2dV9lbmFibGVfc3Jpb3Yoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDk1OlxcdGlmIChydnUtXFx1MDAzZXZmX2RldmlkID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDk2LVxcdFxcdGNoYW5zID0gcnZ1X2dldF9udW1fbGJrX2NoYW5zKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaC0yMy0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlxcdFxcdDB4QTA2NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI1OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX0xCS1xcdFxcdFxcdDB4QTA2MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM9MzkyPXN0YXRpYyB2b2lkIHJ2dV9sYmtfc2V0X2NoYW5uZWxzKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQxNS1cXHRcXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM6NDE2OlxcdFxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MTctXFx0XFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yODAwPXN0YXRpYyB2b2lkIHJ2dV9kYmdfbnBhX2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODE5LS8qIFBlci1sbWFjIENHWCBkZWJ1Z2ZzIGZpbGVzIG5lZWQgYm90aCBSVlUgYW5kIENHWCBoYW5kbGU7IGlub2RlLVxcdTAwM2VpX3ByaXZhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4MjA6ICogcG9pbnRzIGhlcmUgc28gc2VxX2ZpbGUgb3BzIGF2b2lkIHBjaV9nZXRfZGV2aWNlKFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4MjEtICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBydnVfbmljcGYubyBvdHgyX3B0cC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgKz0gcnZ1X25pY3ZmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgKz0gcnZ1X3JlcC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00My0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYgICAgICAgICAgICAgIDB4QTA2M1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ1OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcXHRcXHQweEEwNjRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcXHRcXHQweEEwRjhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUyOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXFx0XFx0MHhBMEY3XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTk9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfbGJrdmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjIwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MjE6XFx0cmV0dXJuIChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02MjItXFx0XFx0KHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfUlZVX1JFUCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02Mzc9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02Mzgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjYzOTpcXHRyZXR1cm4gcGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02NDAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6Mzc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM4LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3ZmX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyMzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyNDpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy0yNi1cXHR7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MDU6MjguNzA5MDE0MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQzMTE1MjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgT2N0ZW9uVFgyIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgYWJvdXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgVGhpcyBtZWFucyBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0J3Mga2V5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgZmFtaWx5LCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBhcmUgcHJvcHJpZXRhcnkgaGFyZHdhcmUgU29DcyBvciBTbWFydE5JQ3MgZnJvbSBDYXZpdW0vTWFydmVsbC4gVGhleSBnbyBieSBuYW1lcyBsaWtlIE9DVEVPTlRYMl9BRiwgT0NURU9OVFgyX1BGLCBhbmQgT0NURU9OVFgyX1ZGIGFuZCBhcmUgYmFzZWQgb24gdGhlIE9jdGVvblRYMiBDTjlLL0NOMTBLL0NOMjBLIHNpbGljb24uIEkga25vdyB0aGVzZSByZXF1aXJlIGFjdHVhbCBPY3Rlb25UWDIgaGFyZHdhcmUgYW5kIHNwZWNpZmljIFBDSSBkZXZpY2VzOyB0aGV5IGFyZSBub3QgZ29pbmcgdG8gcnVuIHdpdGhvdXQgdGhlIHJlYWwgc2lsaWNvbi4gTm8gd2F5IHdpbGwgdGhleSBydW4gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2gncyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCBkaXJlY3RvcnkuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIG1vZGlmaWVkIGZpbGVzIGNvbmZpcm1zIHRoaXMuICBXZSdyZSBsb29raW5nIGF0IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uYy8uaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQuXG5cblNpbmNlIGFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY2xlYW5seSB3aXRoaW4gdGhlIE9jdGVvblRYMiBkcml2ZXIgY29kZSwgYW5kIHRoaXMgZHJpdmVyIGlzIHVuZGVuaWFibHkgdGllZCB0byBwaHlzaWNhbCBNYXJ2ZWxsIGhhcmR3YXJlLCB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjb25kaXRpb24gaXMgZGVmaW5pdGVseSBtZXQuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGdpdCBkaWZmIGFuZCBjb25maXJtZWQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgb3V0c2lkZSB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AgZGlyZWN0b3J5LlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBmYWxzZS4gVGhlcmUncyBubyBwb2ludCBpbiBmdXp6aW5nIHRoaXMgYXMgaXQgY2FuJ3QgYmUgZXhlY3V0ZWQgd2l0aG91dCB0aGUgcmVhbCBoYXJkd2FyZS4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgYXJlIGVtcHR5LCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBhIGRyaXZlciB0aGF0IGZ1bmRhbWVudGFsbHkgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGNhbid0IGJlIGVtdWxhdGVkLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTgxOSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MDU6MzkuMTQwMTY4NjM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNTozOS4xNDAyMDYxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrwm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 06:44:30 +0000 UTC FinishedAt: 2026-09-08 07:05:40 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgb2ZmbG9hZCByYXRlIGxpbWl0aW5nIGFuZCByZWxhdGVkIHF1ZXVlIHNjaGVkdWxlciBhZGp1c3RtZW50cy4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQ3Mgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJjMmM5NjAwMTJhMWQ5ZTRhODlhMzM1MmZkM2YwYjNjNTc4OGQ2NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjA1OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuaW5kZXggMTUzZWI1N2JhZDA2Ny4uYzlhNDMyNmQ3MjVkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5AQCAtMzMxLDggJiM0MzszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbiYjNDM7XHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuJiM0MztcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MztvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcbiYjNDM7XHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGksIGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gY250O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW2ldID0gcmVnX3ZhbFtpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuJiM0MztcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNtcSA9IHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRcdHJlZ192YWxbY250XSA9IDA7XG4mIzQzO1x0XHRjbnQmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0XHRjbnQgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGNudCkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZmFpbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztmYWlsOlxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1ib3ggKm1ib3ggPSBcdTAwMjZwZnZmLVx1MDAzZW1ib3g7XG4mIzQzO1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4mIzQzO1x0aW50IGVyciwgc21xLCBuID0gMDtcbiYjNDM7XHR1NjQgcmVnX2FkZHJbMl07XG4mIzQzO1x0dTY0IHJlZ192YWxbMl07XG4mIzQzO1x0dTY0IHJhdGU7XG4mIzQzO1xuJiM0MztcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbiYjNDM7XHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XHRcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzBdID0gMDtcbiYjNDM7XHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsWzFdID0gMDtcbiYjNDM7XHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4mIzQzO1x0aWYgKCFyZXEpIHtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4mIzQzO1xuJiM0MztcdC8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc29cbiYjNDM7XHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4mIzQzO1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuJiM0MztcdCAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYVxuJiM0MztcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuJiM0MztcdCAqIGhhcmR3YXJlIGNhcC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4mIzQzO1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbiYjNDM7XHQgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuXG4mIzQzO1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXEtXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0aWYgKG1heHJhdGUpIHtcbiYjNDM7XHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRuJiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0LyogQ0lSJiM0MztQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdGlmIChtaW5yYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcbiBcdFx0XHRcdFx0XHQodTY0KWh3LVx1MDAzZXNtcV9saW5rX3R5cGUpO1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4mIzQzO1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbiYjNDM7XG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MmIzQzOyYjNDM7O1xuQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICYjNDM7OTg3LDcgQEAgdm9pZCBvdHgyX3R4c2NocV9zdG9wKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcbiBcdC8qIENsZWFyIHRoZSB0eHNjaHEgbGlzdCAqL1xuIFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXSA9IDA7XG4gXHRcdGZvciAoc2NocSA9IDA7IHNjaHEgXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZWRlN2YxMTEzYjcxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgJiM0MzsxNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9tYWNzZWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1lNjQuaFx1MDAzZVxuQEAgLTQ4Myw2ICYjNDM7NDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7XG4mIzQzO1x0dTY0IG1pbl9yYXRlW1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0MztcdF9fdTggbnVtX3RjO1xuJiM0MztcdF9fdTE2IGNvdW50W1RDX1FPUFRfTUFYX1FVRVVFXTtcbiYjNDM7XHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG90eDJfbXFwcmlvIHtcbiYjNDM7XHR1MzJcdGZsYWdzO1xuJiM0MztcdHU2NFx0Km1pbl9yYXRlO1xuJiM0MztcdHU2NFx0Km1heF9yYXRlO1xuJiM0MztcdGJvb2xcdHJhdGVfbGltaXQ7XG4mIzQzO1x0Ym9vbFx0cmVwbGFjZV9zZXR1cF9kb25lO1xuJiM0MztcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IG90eDJfbmljIHtcbiBcdHZvaWQgX19pb21lbVx0XHQqcmVnX2Jhc2U7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZVx0Km5ldGRldjtcbkBAIC01MTUsNiAmIzQzOzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXHQqY3VyX21xX3NuYXA7XG4mIzQzO1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuJiM0MztcbiBcdHN0cnVjdCBicGZfcHJvZ1x0XHQqeGRwX3Byb2c7XG4gXHRzdHJ1Y3Qgb3R4Ml9xc2V0XHRxc2V0O1xuIFx0c3RydWN0IG90eDJfaHdcdFx0aHc7XG5AQCAtMTI0Niw2ICYjNDM7MTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4mIzQzO1x0XHRcdFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcbiBcdFx0XHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG4gXHR1OCBvbGRfcGZjX2VuO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0b2xkX3BmY19lbiA9IHBmdmYtXHUwMDNlcGZjX2VuO1xuIFx0cGZ2Zi1cdTAwM2VwZmNfZW4gPSBwZmMtXHUwMDNlcGZjX2VuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5AQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGMwZTIxMDBkZTFkOTMuLjY4YWQyZjNkMjIyNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtOTA3LDExICYjNDM7OTA3LDEzIEBAIHN0YXRpYyBpbnQgb3R4Ml9tYm94X3VwX2hhbmRsZXJfcmVwX2V2ZW50X3VwX25vdGlmeShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLFxuIFxuIFx0aWYgKGluZm8tXHUwMDNlZXZlbnQgPT0gUlZVX0VWRU5UX1BPUlRfU1RBVEUpIHtcbiBcdFx0aWYgKGluZm8tXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xuLVx0XHRcdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19QT1JUX1VQO1xuJiM0MztcdFx0XHRzZXRfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksXG4mIzQzO1x0XHRcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xuIFx0XHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbiYjNDM7XHRcdFx0Y2xlYXJfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksXG4mIzQzO1x0XHRcdFx0ICAodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBmLVx1MDAzZWZsYWdzKTtcbiBcdFx0XHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xuIFx0XHR9XG5AQCAtMjAwNyw2ICYjNDM7MjAwOSwxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIyMDUsNiAmIzQzOzIyMTUsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuJiM0MztlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjIyNiw3ICYjNDM7MjIzNyw4IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4mIzQzO1x0c2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksXG4mIzQzO1x0XHQodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBmLVx1MDAzZWZsYWdzKTtcbiBcdC8qICYjMzk7aW50Zl9kb3duJiMzOTsgbWF5IGJlIGNoZWNrZWQgb24gYW55IGNwdSAqL1xuIFx0c21wX3dtYigpO1xuIFxuQEAgLTIyODAsNiAmIzQzOzIyOTIsNyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBuZXRkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgcWlkeCYjNDM7JiM0MzspXG4gXHRcdG5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpO1xuIFxuJiM0MztcdHN5bmNocm9uaXplX25ldCgpO1xuIFx0b3R4Ml9mcmVlX3F1ZXVlX21lbShxc2V0KTtcbiBcdC8qIERvIG5vdCBjbGVhciBSUS9TUSByaW5nc2l6ZSBzZXR0aW5ncyAqL1xuIFx0bWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7XG5AQCAtMjkyMyw2ICYjNDM7MjkzNiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuJiM0MztcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi4wNDViNDU3M2NlMTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTMxLDYgJiM0MzszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4mIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDksNzUyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcbiYjNDM7e1xuJiM0MztcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGxhY2luZyBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4mIzQzO1x0XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXG4mIzQzO1x0XHQgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcbiYjNDM7XHRcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXG4mIzQzO3tcbiYjNDM7XHRpZiAoISpzbmFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCAqc25hcCk7XG4mIzQzO1x0KnNuYXAgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xuJiM0MztcdGludCB0YztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqZHN0KSB7XG4mIzQzO1x0XHRzbmFwID0gZGV2bV9remFsbG9jKHBmdmYtXHUwMDNlZGV2LCBzaXplb2YoKnNuYXApLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghc25hcClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHQqZHN0ID0gc25hcDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c25hcCA9ICpkc3Q7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbmFwLVx1MDAzZW51bV90YyA9IHFvcHQtXHUwMDNlbnVtX3RjO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25hcC1cdTAwM2Vjb3VudFt0Y10gPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcbiYjNDM7XHRcdHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19zdGFnZV9jdXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLCBtcXByaW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2NvbW1pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCA9IHBmdmYtXHUwMDNlY3VyX21xX3NuYXA7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCA9IE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX01EUV0gIT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghc25hcClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbiYjNDM7XHRtZW1zZXQocGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUsIDAsIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHNuYXAtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0dTY0IG1heF9yYXRlID0gc25hcC1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1pbl9yYXRlKVxuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcbiYjNDM7XHRcdGlmIChtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2Mgc25hcC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHNuYXAtXHUwMDNlY291bnRbdGNdOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLVx1MDAzZW51bV90Yyk7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBzbmFwLVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVx1MDAzZWNvdW50W3RjXSxcbiYjNDM7XHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWJ1aWxkIHRoZSBUWCBzY2hlZHVsZXIgdmlhIG5ldGRldiByZXN0YXJ0IHdoZW4gcnVubmluZzsgb3R4Ml9tcXByaW9fdXAoKVxuJiM0MztcdCAqIGFsb25lIGlzIGluc3VmZmljaWVudCBhZnRlciBhIGZhaWxlZCByZXBsYWNlIHRoYXQgYWxyZWFkeSBib3VuY2VkIHRoZVxuJiM0MztcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcbiYjNDM7XHQgKiB0byB0aGUgbmV4dCBzdWNjZXNzZnVsIG5kb19vcGVuKCkgdmlhIG90eDJfbXFwcmlvX3VwKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH0gZWxzZSBpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsIFx1MDAyNnBmdmYtXHUwMDNlY3VyX21xX3NuYXApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZWN1cl9tcV9zbmFwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuJiM0MztcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcbiYjNDM7ICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbiYjNDM7ICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXHUwMDNlbmV0ZGV2KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChwZnZmKSlcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGludCB0eHEsIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbiYjNDM7XHRcdFx0bWF4X3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbWluX3JhdGUgXHUwMDI2XHUwMDI2ICFtYXhfcmF0ZSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHQgICBtYXhfcmF0ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHR4cSwgZXJyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXN0YXJ0IHRoZSBuZXRkZXYgdG8gcmVwcm9ncmFtIHRoZSBUWCBzY2hlZHVsZXIgaGllcmFyY2h5IGZvciBtcXByaW9cbiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpXG4mIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuJiM0MzsgKiBMQksgY2FycmllciBvbikgcnVucyBjb3JyZWN0bHkuXG4mIzQzOyAqXG4mIzQzOyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpY1xuJiM0MzsgKiAoY2FycmllciBvZmYsIElSUS9OQVBJIHRlYXJkb3duLCBxdWV1ZSBkcmFpbikuICBUaGUgTklYIFRYIHNjaGVkdWxlciBtdXN0XG4mIzQzOyAqIGJlIHJlYWxsb2NhdGVkIChlLmcuIG9uZSBTTVEgcGVyIG5vbi1Rb1MgcXVldWUpIGFuZCBjYW5ub3QgYmUgcmVwcm9ncmFtbWVkXG4mIzQzOyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLFxuJiM0MzsgKiBkZWxldGUsIGFuZCByb2xsYmFjay4gIFVzZXJzIHNlZSBhIGJyaWVmIGNvbm5lY3Rpdml0eSBibGlwOyB0aGlzIGlzIG5vdCBhXG4mIzQzOyAqIGJ1ZyB0byBcJiMzNDtmaXhcJiMzNDsgd2l0aG91dCBpbXBsZW1lbnRpbmcgdGhlIGxpdmUtcmVwcm9ncmFtbWluZyBwYXRoIG5vdGVkIGJlbG93LlxuJiM0MzsgKiBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIHdpdGhvdXQgY2FsbGluZ1xuJiM0MzsgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxuJiM0MzsgKlxuJiM0MzsgKiBRdWllc2NlIHRoZSB0cmFuc21pdCBwYXRoIGxpa2UgX19kZXZfY2xvc2VfbWFueSgpIGJlZm9yZSBuZG9fc3RvcCgpIHNvXG4mIzQzOyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuJiM0MztcdGJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4mIzQzO1x0ICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9pbmZvKG5ldGRldixcbiYjNDM7XHRcdCAgICBcJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChydW5uaW5nKSB7XG4mIzQzO1x0XHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTsgLyogQ29tbWl0IG5ldGlmX3J1bm5pbmcoKS4gKi9cbiYjNDM7XHR9XG4mIzQzO1x0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19zdG9wKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKHJ1bm5pbmcpIHtcbiYjNDM7XHRcdFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFx1MDAyNm5ldGRldi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLlxuJiM0MztcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XG4mIzQzO1x0ICogcmUtYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyB2aWEgb3R4Ml9tcXByaW9fdXAoKSBhZnRlciB0aGUga2VybmVsXG4mIzQzO1x0ICogcmVtb3ZlZCB0aGUgcWRpc2MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJhdGVfbGltaXQpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJ1bm5pbmcpIHtcbiYjNDM7XHRcdHNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4mIzQzO1x0fSBlbHNlIGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxuJiM0MztcdFx0ICogbmV0aWZfcnVubmluZygpIG1heSBzdGlsbCBiZSB0cnVlOyBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZVxuJiM0MztcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4mIzQzO1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbiYjNDM7XHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19JTlRGX0RPV04pLFxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZyAqKVx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4mIzQzO1x0XHRzbXBfd21iKCk7XG4mIzQzO1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocWNvdW50IFx1MDAzYz0gMSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoXG4mIzQzO1x0ICogb2ZmbG9hZCBzaGFwZXMgb24gcGVyLXF1ZXVlIE1EUSBub2RlcyBwYXJlbnRlZCB1bmRlciBhIHNpbmdsZSBUTDQuXG4mIzQzO1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4mIzQzO1x0ICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlclxuJiM0MztcdCAqIGRpdmlkaW5nIHRoZSByYXRlIGFjcm9zcyBxdWV1ZXMgKHVBUEkgbWlzbWF0Y2gpIG9yIGV4Y2VlZGluZyB0aGUgVENcbiYjNDM7XHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuJiM0MztcdCAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2Rlc1xuJiM0MztcdCAqIGJleW9uZCB0aGUgZXhpc3RpbmcgaGllcmFyY2h5LlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7bXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbmFtZSwgdGMsIHFjb3VudCk7XG4mIzQzO1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBuYW1lLCB0YywgcWNvdW50KTtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4mIzQzO1x0aW50IHRjLCB0eHE7XG4mIzQzO1xuJiM0MztcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O051bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobnVtX3R4cSBcdTAwM2UgTUFYX1RYU0NIUV9QRVJfRlVOQykge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuJiM0MztcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKHR4cSBcdTAwM2U9IG51bV90eHEpIHtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIHR4cSwgbnVtX3R4cSk7XG4mIzQzO1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbiYjNDM7e1xuJiM0MztcdHU2NCBtYnBzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XG4mIzQzO1x0cmV0dXJuIGlsb2cyKG1icHMgLyAyKSBcdTAwM2M9IE1BWF9SQVRFX0VYUE9ORU5UO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4mIzQzO1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZVxuJiM0MztcdCAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZVxuJiM0MztcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCkge1xuJiM0MztcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUpXG4mIzQzO1x0XHRcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbiYjNDM7XHRpZiAoIWhhZF9tcXByaW8pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRpbnQgZG93bl9lcnIsIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZG93bl9lcnIpXG4mIzQzO1x0XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdHJldHVybiBkb3duX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlXG4mIzQzO1x0ICogc3RhdGUgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IHRjLCB0eHEsIGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuJiM0MztcdFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZfdXApIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobXFwcmlvLVx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwmIzM0OywgbXFwcmlvLVx1MDAzZXNoYXBlcik7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cGZ2Zi1cdTAwM2Vxb3MucW9zX3RyZWUpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttaW5cJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHtcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCYjMzQ7bWF4XCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi1cdTAwM2VuZXRkZXYsIHRydWUpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XG4mIzQzO1x0Lyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmdcbiYjNDM7XHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xuJiM0MztcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4mIzQzO1x0ICogbGltaXRzIGluIGhhcmR3YXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbiYjNDM7XG4mIzQzO1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4mIzQzO1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4mIzQzO1xuJiM0MztcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4mIzQzO1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbiYjNDM7XHRcdCAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXNcbiYjNDM7XHRcdCAqIGFyZSByZWplY3RlZCBhYm92ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4mIzQzO1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICYjNDM7IHFjb3VudDsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbiYjNDM7XHRcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZW51bV90YzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcGZ2Zi1cdTAwM2VjdXJfbXFfc25hcC1cdTAwM2Vjb3VudFtpXSxcbiYjNDM7XHRcdFx0XHQgICAgcW9wdC1cdTAwM2VvZmZzZXRbaV0pO1xuJiM0MztcbiYjNDM7XHRxb3B0LVx1MDAzZWh3ID0gVENfTVFQUklPX0hXX09GRkxPQURfVENTO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbGFjaW5nKSB7XG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSB0cnVlO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztjbGVhbnVwOlxuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpIHtcbiYjNDM7XHRcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7XG4mIzQzO1x0XHRpZiAocmVzdG9yZV9lcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHJlc3RvcmVfZXJyKTtcbiYjNDM7XHRcdFx0aWYgKGV4dGFjaylcbiYjNDM7XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIHJlc3RvcmVfZXJyKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXh0YWNrKVxuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcJiMzNDspO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0fVxuJiM0MztcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdGNhc2UgVENfUk9PVF9HUkFGVDpcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXG4mIzQzO1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IHRydWU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4mIzQzO1xuJiM0MztcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuJiM0MztcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfUVVFUllfQ0FQUzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtMTYzMiw2ICYjNDM7MjM3OSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcbiB2b2lkIG90eDJfc2h1dGRvd25fdGMoc3RydWN0IG90eDJfbmljICpuaWMpXG4ge1xuIFx0b3R4Ml9kZXN0cm95X3RjX2Zsb3dfbGlzdChuaWMpO1xuJiM0MztcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uYzBiYjdiOTMyMDU2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuJiM0MztcdC8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhblxuJiM0MztcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4mIzQzO1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykmIzQzOyYjNDM7O1xuQEAgLTEwMzgsNiAmIzQzOzEwNDEsMTQgQEAgc3RhdGljIGludCBvdHgyX3Fvc19yb290X2FkZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBodGJfbWFqX2lkLCB1MTYgaHRiX2RlZmNcbiBcdFx0ICAgXCYjMzQ7VENfSFRCX0NSRUFURTogaGFuZGxlPTB4JXggZGVmY2xzPTB4JXhcXG5cJiMzNDssXG4gXHRcdCAgIGh0Yl9tYWpfaWQsIGh0Yl9kZWZjbHMpO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHBmdmYtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0hUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cm9vdCA9IG90eDJfcW9zX2FsbG9jX3Jvb3QocGZ2Zik7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocm9vdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB0aGUgTWFydmVsbCBPY3Rlb25UWDIgbmV0d29yayBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyksIGFkZGluZyBzdXBwb3J0IGZvciBtcXByaW8gaGFyZHdhcmUgb2ZmbG9hZCByYXRlIGxpbWl0aW5nIGFuZCByZWxhdGVkIHF1ZXVlIHNjaGVkdWxlciBhZGp1c3RtZW50cy4gVGhpcyBkcml2ZXIgdGFyZ2V0cyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQ3Mgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjMmM5NjAwMTJhMWQ5ZTRhODlhMzM1MmZkM2YwYjNjNTc4OGQ2NjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA3OjA1OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IDE3NTk5MjE4OGMxOGEuLmE1MTllMGE5N2EyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTUsNiAmIzQzOzYxNSwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUxLDcgJiM0Mzs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJCXBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07CiYjNDM7CQllbHNlCiYjNDM7CQkJcGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTsKJiM0MzsKIAkJcmVxLSZndDtyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7CiAJCXJlcS0mZ3Q7cmVndmFsWzFdID0gcGFyZW50ICZsdDsmbHQ7IDE2OwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKQEAgLTc3OSw2ICYjNDM7OTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKQogCQlyZXEtJmd0O3NjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7CiAJfQogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKIAlyYyA9IG90eDJfc3luY19tYm94X21zZygmYW1wO3BmdmYtJmd0O21ib3gpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtODQ0LDYgJiM0Mzs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKQogCiAJLyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovCiAJZm9yIChsdmwgPSAwOyBsdmwgJmx0OyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykgewomIzQzOwkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2NudFtsdmxdID0gMDsKIAkJZm9yIChzY2hxID0gMDsgc2NocSAmbHQ7IE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHEmIzQzOyYjNDM7KQogCQkJcGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAppbmRleCBlZWNlZTYxMmI3YjJjLi5lZGU3ZjExMTNiNzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFjc2VjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VhcGkvbGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZGV2bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3RpbWU2NC5oJmd0OwpAQCAtNDgzLDYgJiM0Mzs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHsKIAlpbnQgbWRldnM7CiB9OwogCiYjNDM7c3RydWN0IG1xX29mZmxvYWRfc25hcCB7CiYjNDM7CXU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CXU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTggbnVtX3RjOwomIzQzOwlfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7CV9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0MzsJYm9vbAlyZXBsYWNlX3NldHVwX2RvbmU7CiYjNDM7CWJvb2wJcmVwbGFjZV9ncmFmdF9kb25lOwomIzQzO307CiYjNDM7CiBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRkZXY7CkBAIC01MTUsNiAmIzQzOzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMgewogCXU2NAkJCWZsYWdzOwogCXU2NAkJCSpjcV9vcF9hZGRyOwogCiYjNDM7CXN0cnVjdCBvdHgyX21xcHJpbwltcXByaW87CiYjNDM7CXN0cnVjdCBtcV9vZmZsb2FkX3NuYXAJKmN1cl9tcV9zbmFwOwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwCSpvbGRfbXFfc25hcDsKJiM0MzsKIAlzdHJ1Y3QgYnBmX3Byb2cJCSp4ZHBfcHJvZzsKIAlzdHJ1Y3Qgb3R4Ml9xc2V0CXFzZXQ7CiAJc3RydWN0IG90eDJfaHcJCWh3OwpAQCAtMTI0Niw2ICYjNDM7MTI2OCwxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTsKIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTsKIGludCBvdHgyX3JlYWRfZnJlZV9zcWUoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgcWlkeCk7CiYjNDM7aW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLAomIzQzOwkJCQkgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7CiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xdWV1ZV92Zl93b3JrKHN0cnVjdCBtYm94ICptdywgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1ib3hfd3EsCiAJCQlpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpOwogaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpCiAJdTggb2xkX3BmY19lbjsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCAmYW1wOyZhbXA7IHBmYy0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwKJiM0MzsJCQkgICAmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlvbGRfcGZjX2VuID0gcGZ2Zi0mZ3Q7cGZjX2VuOwogCXBmdmYtJmd0O3BmY19lbiA9IHBmYy0mZ3Q7cGZjX2VuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKaW5kZXggOWJlZTFiOTFlZWFhNi4uZWMyNjAxYzZjMjU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwpAQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsKJiM0MzsJICAgIChjaGFubmVsLSZndDt0eF9jb3VudCAhPSBwZnZmLSZndDtody50eF9xdWV1ZXMgfHwKJiM0MzsJICAgICBjaGFubmVsLSZndDtyeF9jb3VudCAhPSBwZnZmLSZndDtody5yeF9xdWV1ZXMpKSB7CiYjNDM7CQluZXRkZXZfaW5mbyhkZXYsCiYjNDM7CQkJICAgICYjMzQ7Tm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAoaWZfdXApCiAJCWRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3N0b3AoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKaW5kZXggYzBlMjEwMGRlMWQ5My4uNjhhZDJmM2QyMjI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC05MDcsMTEgJiM0Mzs5MDcsMTMgQEAgc3RhdGljIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9yZXBfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsCiAKIAlpZiAoaW5mby0mZ3Q7ZXZlbnQgPT0gUlZVX0VWRU5UX1BPUlRfU1RBVEUpIHsKIAkJaWYgKGluZm8tJmd0O2V2dF9kYXRhLnBvcnRfc3RhdGUpIHsKLQkJCXBmLSZndDtmbGFncyB8PSBPVFgyX0ZMQUdfUE9SVF9VUDsKJiM0MzsJCQlzZXRfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksCiYjNDM7CQkJCSh1bnNpZ25lZCBsb25nICopJmFtcDtwZi0mZ3Q7ZmxhZ3MpOwogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCQl9IGVsc2UgewotCQkJcGYtJmd0O2ZsYWdzICZhbXA7PSB+T1RYMl9GTEFHX1BPUlRfVVA7CiYjNDM7CQkJY2xlYXJfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfUE9SVF9VUCksCiYjNDM7CQkJCSAgKHVuc2lnbmVkIGxvbmcgKikmYW1wO3BmLSZndDtmbGFncyk7CiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCX0KQEAgLTIwMDcsNiAmIzQzOzIwMDksMTQgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihwZi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXJzIGR1cmluZyBvcGVuOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfaHc7CiYjNDM7CX0KJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjIwNSw2ICYjNDM7MjIxNSw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmcmVlX2lycSh2ZWMsIHBmKTsKIGVycl9kaXNhYmxlX25hcGk6CiAJb3R4Ml9kaXNhYmxlX25hcGkocGYpOwomIzQzO2Vycl9mcmVlX2h3OgogCW90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpOwogZXJyX2ZyZWVfbWVtOgogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CkBAIC0yMjI2LDcgJiM0MzsyMjM3LDggQEAgaW50IG90eDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CiAKLQlwZi0mZ3Q7ZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjsKJiM0MzsJc2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksCiYjNDM7CQkodW5zaWduZWQgbG9uZyAqKSZhbXA7cGYtJmd0O2ZsYWdzKTsKIAkvKiAmIzM5O2ludGZfZG93biYjMzk7IG1heSBiZSBjaGVja2VkIG9uIGFueSBjcHUgKi8KIAlzbXBfd21iKCk7CiAKQEAgLTIyODAsNiAmIzQzOzIyOTIsNyBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJZm9yIChxaWR4ID0gMDsgcWlkeCAmbHQ7IG5ldGRldi0mZ3Q7bnVtX3R4X3F1ZXVlczsgcWlkeCYjNDM7JiM0MzspCiAJCW5ldGRldl90eF9yZXNldF9xdWV1ZShuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5ldGRldiwgcWlkeCkpOwogCiYjNDM7CXN5bmNocm9uaXplX25ldCgpOwogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CiAJLyogRG8gbm90IGNsZWFyIFJRL1NRIHJpbmdzaXplIHNldHRpbmdzICovCiAJbWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7CkBAIC0yOTIzLDYgJiM0MzsyOTM2LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLjA0NWI0NTczY2UxNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDc1MiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGJvb2wgcmVwbGFjaW5nKQomIzQzO3sKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZyAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSAmYW1wOyZhbXA7IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSwgMCwKJiM0MzsJCSAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJCW1lbXNldChwZnZmLSZndDttcXByaW8ubWF4X3JhdGUsIDAsCiYjNDM7CQkgICAgICAgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CQlwZnZmLSZndDttcXByaW8uZmxhZ3MgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtJmd0O2RldiwgbnVtX3R4cSwKJiM0MzsJCQkJCSAgICAgc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpLAomIzQzOwkJCQkJICAgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSkgewomIzQzOwkJb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2ZyZWUoc3RydWN0IG90eDJfbmljICpwZnZmLAomIzQzOwkJCQkgIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipzbmFwKQomIzQzO3sKJiM0MzsJaWYgKCEqc25hcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZGV2bV9rZnJlZShwZnZmLSZndDtkZXYsICpzbmFwKTsKJiM0MzsJKnNuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LAomIzQzOwkJCQkgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9ICZhbXA7bXFwcmlvLSZndDtxb3B0OwomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwOwomIzQzOwlpbnQgdGM7CiYjNDM7CiYjNDM7CWlmICghKmRzdCkgewomIzQzOwkJc25hcCA9IGRldm1fa3phbGxvYyhwZnZmLSZndDtkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFzbmFwKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwkJKmRzdCA9IHNuYXA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzbmFwID0gKmRzdDsKJiM0MzsJfQomIzQzOwomIzQzOwlzbmFwLSZndDtudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXNuYXAtJmd0O2NvdW50W3RjXSA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsJCXNuYXAtJmd0O29mZnNldFt0Y10gPSBxb3B0LSZndDtvZmZzZXRbdGNdOwomIzQzOwkJc25hcC0mZ3Q7bWluX3JhdGVbdGNdID0gMDsKJiM0MzsJCXNuYXAtJmd0O21heF9yYXRlW3RjXSA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCXNuYXAtJmd0O21pbl9yYXRlW3RjXSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJc25hcC0mZ3Q7bWF4X3JhdGVbdGNdID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9tcXByaW9fc25hcF9jb3B5KHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAsIG1xcHJpbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CW90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCAmYW1wO3BmdmYtJmd0O29sZF9tcV9zbmFwKTsKJiM0MzsJcGZ2Zi0mZ3Q7b2xkX21xX3NuYXAgPSBwZnZmLSZndDtjdXJfbXFfc25hcDsKJiM0MzsJcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfTURRXSAhPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0b3JlX29sZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi0mZ3Q7b2xkX21xX3NuYXA7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CXUxNiBudW1fdHhxID0gcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7CiYjNDM7CWludCB0YywgdHhxLCBlcnI7CiYjNDM7CiYjNDM7CWlmICghc25hcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwltZW1zZXQocGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLSZndDttcXByaW8ubWluX3JhdGUpKTsKJiM0MzsJbWVtc2V0KHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IDA7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHNuYXAtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSBzbmFwLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQl1NjQgbWF4X3JhdGUgPSBzbmFwLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlpZiAobWluX3JhdGUpCiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzIHw9IFRDX01RUFJJT19GX01JTl9SQVRFOwomIzQzOwkJaWYgKG1heF9yYXRlKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gc25hcC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgc25hcC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBzbmFwLSZndDtjb3VudFt0Y107IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBzbmFwLSZndDtudW1fdGMpOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBzbmFwLSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC0mZ3Q7Y291bnRbdGNdLAomIzQzOwkJCQkgICAgc25hcC0mZ3Q7b2Zmc2V0W3RjXSk7CiYjNDM7CiYjNDM7CWlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKCkKJiM0MzsJICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlCiYjNDM7CSAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmUKJiM0MzsJICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLgomIzQzOwkgKi8KJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIHRydWUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9IGVsc2UgaWYgKHBmdmYtJmd0O2h3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7CiYjNDM7CQllcnIgPSBvdHgyX21xcHJpb191cChwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtjdXJfbXFfc25hcCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9mcmVlKHBmdmYsICZhbXA7cGZ2Zi0mZ3Q7Y3VyX21xX3NuYXApOwomIzQzOwlvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgJmFtcDtwZnZmLSZndDtvbGRfbXFfc25hcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7CiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLAomIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uCiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb24KJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS4KJiM0MzsgKi8KJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhwZnZmLSZndDtuZXRkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpCiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7CiYjNDM7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIocGZ2Zi0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gY2xlYXIgaGFyZHdhcmUgc2hhcGVyczogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWludCB0eHEsIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWZvciAodHhxID0gMDsgdHhxICZsdDsgcGZ2Zi0mZ3Q7aHcubm9uX3Fvc19xdWV1ZXM7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXTsKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8uZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBwZnZmLSZndDttcXByaW8ubWF4X3JhdGVbdHhxXTsKJiM0MzsKJiM0MzsJCWlmICghbWluX3JhdGUgJmFtcDsmYW1wOyAhbWF4X3JhdGUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsCiYjNDM7CQkJCQkJICAgbWF4X3JhdGUpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgdHhxLCBlcnIpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpbwomIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKQomIzQzOyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLgomIzQzOyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4KJiM0MzsgKgomIzQzOyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpYwomIzQzOyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3QKJiM0MzsgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZAomIzQzOyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLAomIzQzOyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGEKJiM0MzsgKiBidWcgdG8gJiMzNDtmaXgmIzM0OyB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuCiYjNDM7ICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmcKJiM0MzsgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLgomIzQzOyAqCiYjNDM7ICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzbwomIzQzOyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LSZndDtuZXRkZXZfb3BzOwomIzQzOwlib29sIHJ1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEV4cGxvcmUgbGl2ZSBUWCBzY2hlZHVsZXIgcmVwcm9ncmFtbWluZyB0byBhdm9pZCBhIGZ1bGwKJiM0MzsJICogbmRvX3N0b3AoKS9uZG9fb3BlbigpIGJvdW5jZSBvbiBldmVyeSBtcXByaW8gY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2luZm8obmV0ZGV2LAomIzQzOwkJICAgICYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCWNsZWFyX2JpdChfX0xJTktfU1RBVEVfU1RBUlQsICZhbXA7bmV0ZGV2LSZndDtzdGF0ZSk7CiYjNDM7CQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqLwomIzQzOwl9CiYjNDM7CWRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7CiYjNDM7CiYjNDM7CWVyciA9IG9wcy0mZ3Q7bmRvX3N0b3AobmV0ZGV2KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCQlzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgJmFtcDtuZXRkZXYtJmd0O3N0YXRlKTsKJiM0MzsJCQlkZXZfYWN0aXZhdGUobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uCiYjNDM7CSAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90CiYjNDM7CSAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbAomIzQzOwkgKiByZW1vdmVkIHRoZSBxZGlzYy4KJiM0MzsJICovCiYjNDM7CWlmIChyYXRlX2xpbWl0KQomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlOwomIzQzOwllbHNlCiYjNDM7CQlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwlpZiAoIWVyciAmYW1wOyZhbXA7IHJ1bm5pbmcpIHsKJiM0MzsJCXNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCAmYW1wO25ldGRldi0mZ3Q7c3RhdGUpOwomIzQzOwkJZGV2X2FjdGl2YXRlKG5ldGRldik7CiYjNDM7CX0gZWxzZSBpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCS8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlCiYjNDM7CQkgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlCiYjNDM7CQkgKiBvbmx5IGluc3RlYWQgb2Ygc2VuZGluZyBzaGFwZXIgY2xlYXJzIHRvIGZyZWVkIHF1ZXVlcy4KJiM0MzsJCSAqLwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7CiYjNDM7CQkvKiBuZG9fb3BlbigpIHJvbGxzIGJhY2sgb24gZmFpbHVyZTsgbWFyayB0aGUgaW50ZXJmYWNlIGRvd24gc28KJiM0MzsJCSAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZQomIzQzOwkJICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay4KJiM0MzsJCSAqLwomIzQzOwkJc2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksCiYjNDM7CQkJKHVuc2lnbmVkIGxvbmcgKikmYW1wO3BmdmYtJmd0O2ZsYWdzKTsKJiM0MzsJCS8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqLwomIzQzOwkJc21wX3dtYigpOwomIzQzOwkJbmV0aWZfY2xvc2UobmV0ZGV2KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywKJiM0MzsJCQkJCXU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsCiYjNDM7CQkJCQljb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJaWYgKCFyYXRlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChxY291bnQgJmx0Oz0gMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoCiYjNDM7CSAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LgomIzQzOwkgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHMKJiM0MzsJICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlcgomIzQzOwkgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDCiYjNDM7CSAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0CiYjNDM7CSAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2RlcwomIzQzOwkgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJICAgJiMzNDttcXByaW86ICVzIHJhdGUgZm9yIHRjICVkIG5vdCBzdXBwb3J0ZWQgd2l0aCAldSBxdWV1ZXNcbiYjMzQ7LAomIzQzOwkJICAgbmFtZSwgdGMsIHFjb3VudCk7CiYjNDM7CU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O21xcHJpbzogJXMgcmF0ZSBmb3IgdGMgJWQgbm90IHN1cHBvcnRlZCB3aXRoICV1IHF1ZXVlcyYjMzQ7LAomIzQzOwkJCSAgICAgICBuYW1lLCB0YywgcWNvdW50KTsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG51bV90eHEgJmd0OyBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodHhxICZndDs9IG51bV90eHEpIHsKJiM0MzsJCQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxuJiMzNDssCiYjNDM7CQkJCQkgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXUmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmbHQ7IE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIGlsb2cyKG1icHMgLyAyKSAmbHQ7PSBNQVhfUkFURV9FWFBPTkVOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJCSAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJYm9vbCBoYWRfbXFwcmlvID0gcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQ7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLSZndDtuZXRkZXY7CiYjNDM7CWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogdGMgcWRpc2MgcmVwbGFjZSBydW5zIHNldHVwIG9uIHRoZSBuZXcgbXFwcmlvIGJlZm9yZSBkZXN0cm95aW5nIHRoZQomIzQzOwkgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGUKJiM0MzsJICogb2xkLWluc3RhbmNlIHRlYXJkb3duIGZyb20gZ3JhZnQgZmFpbHVyZSBhZnRlciBzZXR1cC4KJiM0MzsJICovCiYjNDM7CWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lICZhbXA7JmFtcDsgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXApIHsKJiM0MzsJCWVyciA9IDA7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSkKJiM0MzsJCQlvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb19yZXN0b3JlX29sZChwZnZmKTsKJiM0MzsJCW90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovCiYjNDM7CWlmICghaGFkX21xcHJpbykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoaWZfdXApIHsKJiM0MzsJCWludCBkb3duX2VyciwgZXJyOwomIzQzOwomIzQzOwkJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwkJaWYgKGRvd25fZXJyKQomIzQzOwkJCXJldHVybiBkb3duX2VycjsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJcmV0dXJuIGRvd25fZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIG5kb19zdG9wKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVyIFRMIG5vZGVzOyBkcm9wIHNvZnR3YXJlCiYjNDM7CSAqIHN0YXRlIG9ubHkuCiYjNDM7CSAqLwomIzQzOwlvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby0mZ3Q7ZXh0YWNrOwomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJYm9vbCByZXBsYWNpbmcgPSBwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdDsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IHRjLCB0eHEsIGVyciwgaTsKJiM0MzsKJiM0MzsJaWYgKCFxb3B0LSZndDtodykKJiM0MzsJCXJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwomIzQzOwlpZiAoIWlmX3VwKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDttcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUCYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobXFwcmlvLSZndDtzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxuJiMzNDssIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4JiMzNDssCiYjNDM7CQkJCSAgICAgICBtcXByaW8tJmd0O3NoYXBlcik7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCAmYW1wO3BmdmYtJmd0O2h3LmNhcF9mbGFnKSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVImIzQzO1BJUiBzdXBwb3J0JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi0mZ3Q7cGRldikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBmdmYtJmd0O3hkcF9wcm9nKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtwZnZmLSZndDtxb3MucW9zX3RyZWUpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKQomIzQzOwkJCW1pbl9yYXRlID0gbXFwcmlvLSZndDttaW5fcmF0ZVt0Y107CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IG1xcHJpby0mZ3Q7bWF4X3JhdGVbdGNdOwomIzQzOwomIzQzOwkJaWYgKG1pbl9yYXRlICZhbXA7JmFtcDsgbWF4X3JhdGUgJmFtcDsmYW1wOyBtaW5fcmF0ZSAmZ3Q7IG1heF9yYXRlKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXG4mIzM0OywKJiM0MzsJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFKSB7CiYjNDM7CQkJZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsCiYjNDM7CQkJCQkJCSAgIHFjb3VudCwgdGMsICYjMzQ7bWluJiMzNDspOwomIzQzOwkJCWlmIChlcnIpCiYjNDM7CQkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21heCYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xuJiMzNDssCiYjNDM7CQkJCSAgIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAgICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKG5ldGRldiwgZXh0YWNrLCBxb3B0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgcmVwbGFjaW5nKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpIHsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBjbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5mbGFncyA9IG1xcHJpby0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CWZvciAodGMgPSAwOyB0YyAmbHQ7IHFvcHQtJmd0O251bV90YzsgdGMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7CiYjNDM7CQl1MzIgcWNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbdGNdOwomIzQzOwomIzQzOwkJLyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRCiYjNDM7CQkgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWUKJiM0MzsJCSAqIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKS4gTXVsdGktcXVldWUgVENzIHdpdGggcmF0ZXMKJiM0MzsJCSAqIGFyZSByZWplY3RlZCBhYm92ZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUlOX1JBVEUpCiYjNDM7CQkJbWluX3JhdGUgPSBtcXByaW8tJmd0O21pbl9yYXRlW3RjXTsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01BWF9SQVRFKQomIzQzOwkJCW1heF9yYXRlID0gbXFwcmlvLSZndDttYXhfcmF0ZVt0Y107CiYjNDM7CiYjNDM7CQlmb3IgKHR4cSA9IHFvcHQtJmd0O29mZnNldFt0Y107CiYjNDM7CQkgICAgIHR4cSAmbHQ7IHFvcHQtJmd0O29mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7CiYjNDM7CQkJbmV0ZGV2X2RiZyhuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XG4mIzM0OywKJiM0MzsJCQkJICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsKJiM0MzsJCQlwZnZmLSZndDttcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7CiYjNDM7CiYjNDM7CQkJZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsCiYjNDM7CQkJCQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CW5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcGZ2Zi0mZ3Q7Y3VyX21xX3NuYXAtJmd0O251bV90Yyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLSZndDtjdXJfbXFfc25hcC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJCSAgICBxb3B0LSZndDtvZmZzZXRbaV0pOwomIzQzOwomIzQzOwlxb3B0LSZndDtodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUzsKJiM0MzsKJiM0MzsJaWYgKHJlcGxhY2luZykgewomIzQzOwkJcGZ2Zi0mZ3Q7bXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7CiYjNDM7CQlwZnZmLSZndDttcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztjbGVhbnVwOgomIzQzOwlxb3B0LSZndDtodyA9IDA7CiYjNDM7CWlmIChyZXBsYWNpbmcpIHsKJiM0MzsJCWludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpOwomIzQzOwomIzQzOwkJb3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTsKJiM0MzsJCWlmIChyZXN0b3JlX2VycikgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIHJlc3RvcmVfZXJyKTsKJiM0MzsJCQlpZiAoZXh0YWNrKQomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkIGFuZCBwcmlvciBjb25maWd1cmF0aW9uIHJvbGxiYWNrIGZhaWxlZDogJWQmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgcmVzdG9yZV9lcnIpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXG4mIzM0Oyk7CiYjNDM7CQkJaWYgKGV4dGFjaykKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWQmIzM0Oyk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsCiYjNDM7CQkJICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KQomIzQzO3sKJiM0MzsJc3dpdGNoIChyb290LSZndDtjb21tYW5kKSB7CiYjNDM7CWNhc2UgVENfUk9PVF9HUkFGVDoKJiM0MzsJCWlmIChwZnZmLSZndDttcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lKQomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19jYXBzICpjYXBzOwomIzQzOwomIzQzOwlpZiAoYmFzZS0mZ3Q7dHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWNhcHMgPSBiYXNlLSZndDtjYXBzOwomIzQzOwljYXBzLSZndDt2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwKIAkJICB2b2lkICp0eXBlX2RhdGEpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgVENfUVVFUllfQ0FQUzoKJiM0MzsJCXJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX0JMT0NLOgogCQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19ibG9jayhuZXRkZXYsIHR5cGVfZGF0YSk7CiAJY2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7CiYjNDM7CWNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9ST09UX1FESVNDOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcm9vdChuZXRkZXZfcHJpdihuZXRkZXYpLCB0eXBlX2RhdGEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNjMyLDYgJiM0MzsyMzc5LDcgQEAgRVhQT1JUX1NZTUJPTChvdHgyX2luaXRfdGMpOwogdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKQogewogCW90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTsKJiM0MzsJb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7CiB9CiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKaW5kZXggNjljMDkxMWUyOGU5MS4uYzBiYjdiOTMyMDU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwpAQCAtMTE4LDYgJiM0MzsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkvKiBjb25maWd1cmUgUElSICovCiAJbWF4cmF0ZSA9IChub2RlLSZndDtyYXRlICZndDsgbm9kZS0mZ3Q7Y2VpbCkgPyBub2RlLSZndDtyYXRlIDogbm9kZS0mZ3Q7Y2VpbDsKIAomIzQzOwkvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW4KJiM0MzsJICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS4KJiM0MzsJICovCiAJY2ZnLSZndDtyZWd2YWxbKm51bV9yZWdzXSA9CiAJCW90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7CiAJKCpudW1fcmVncykmIzQzOyYjNDM7OwpAQCAtMTAzOCw2ICYjNDM7MTA0MSwxNCBAQCBzdGF0aWMgaW50IG90eDJfcW9zX3Jvb3RfYWRkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IGh0Yl9tYWpfaWQsIHUxNiBodGJfZGVmYwogCQkgICAmIzM0O1RDX0hUQl9DUkVBVEU6IGhhbmRsZT0weCV4IGRlZmNscz0weCV4XG4mIzM0OywKIAkJICAgaHRiX21hal9pZCwgaHRiX2RlZmNscyk7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KSB7CiYjNDM7CQluZXRkZXZfZXJyKHBmdmYtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O0hUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O0hUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJcm9vdCA9IG90eDJfcW9zX2FsbG9jX3Jvb3QocGZ2Zik7CiAJaWYgKElTX0VSUihyb290KSkgewogCQllcnIgPSBQVFJfRVJSKHJvb3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHJlYXNvbmFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIG91ciBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgIGRpcmVjdG9yeS4gSSBzZWUgY2hhbmdlcyBpbiBgcnZ1X25peC5jYCwgYG90eDJfY29tbW9uLmMvaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgdXBkYXRlIHRvIHNldmVyYWwga2V5IG1vZHVsZXMuCgpOZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGRyaXZlciBhbmQgaGFyZHdhcmUgcmVhY2hhYmlsaXR5LiBUaGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciBpcyBvYnZpb3VzbHkgdGhlIHRhcmdldCAoYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyYCkuIE5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBhcmlzZXM6IGlzIHRoaXMgZHJpdmVyIHRpZWQgdG8gc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgYSBTbWFydE5JQyBvciBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRldmljZSwgb3IgZG9lcyBpdCBhbHNvIHN1cHBvcnQgYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IEtub3dpbmcgdGhpcyB3aWxsIHNpZ25pZmljYW50bHkgaW1wYWN0IG91ciBmdXp6aW5nIGFwcHJvYWNoLiBQaHlzaWNhbCBoYXJkd2FyZSBvZnRlbiBpbnRyb2R1Y2VzIGNvbXBsZXhpdGllcyByZWxhdGVkIHRvIGFjY2Vzc2liaWxpdHkgYW5kIHJlcHJvZHVjaWJpbGl0eSwgd2hlcmVhcyB2aXJ0dWFsaXphdGlvbiBwcm92aWRlcyBhIG1vcmUgY29udHJvbGxlZCBhbmQgcG90ZW50aWFsbHkgc2ltcGxlciB0ZXN0aW5nIGVudmlyb25tZW50LgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBhbiBlYXNpbHkgZnV6emFibGUgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGFuZCB2aXJ0dWFsIG1hY2hpbmUgc3VwcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPQ1RFT05UWDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXHRib29sIFwmIzM0O0Rpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00OC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTUxPWNvbmZpZyBSVlVfRVNXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSAmIzQzOz0gYWYvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICYjNDM7PSBuaWMvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IHJ2dV9tYm94Lm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IHJ2dV9hZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX1JQTSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oOjE2OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXHRcdDB4QTA1OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE1ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUobnBjX21jYW1fbGF5b3V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjYtc3RhdGljIGludCBfX25hbWUgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE3MC19XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yNDItI2RlZmluZSBUT1RBTF9TWiAoTUFYX05VTV9CQU5LUyAqIE1BWF9OVU1fU1VCX0JBTktTICogTUFYX1NVQkJBTktfREVQVEggKiA2NClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTI0NT1zdGF0aWMgaW50IG5wY19tY2FtX21pc21hdGNoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcJiMzNDsldVxcdCVkXFx0JXVcXG5cJiMzNDsgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjg2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6MjE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1BUUFx0XHRcdDB4QTAwQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXHRcdDB4QjEwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcdDB4QjYwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFx0XHRcdDB4QTA4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXHRcdFx0MHhBMDlFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MzpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NlhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk3LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDI6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDQtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVNTV9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNi1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo5MzQ6XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVx0aWYgKCFwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDc9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDUzOlx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NTQtXHRcdFx0ICAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0NzE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXHQweEEwRjhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz0zNDczPXN0YXRpYyBpbnQgcnZ1X2VuYWJsZV9zcmlvdihzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0OTU6XHRpZiAocnZ1LVx1MDAzZXZmX2RldmlkID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0OTYtXHRcdGNoYW5zID0gcnZ1X2dldF9udW1fbGJrX2NoYW5zKCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjMtLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXHRcdDB4QTA2NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVx0UENJX0RFVklEX09DVEVPTlRYMl9MQktcdFx0XHQweEEwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jPTM5Mj1zdGF0aWMgdm9pZCBydnVfbGJrX3NldF9jaGFubmVscyhzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDE1LVx0XHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MTY6XHRcdFx0XHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MTctXHRcdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MDA9c3RhdGljIHZvaWQgcnZ1X2RiZ19ucGFfaW5pdChzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODE5LS8qIFBlci1sbWFjIENHWCBkZWJ1Z2ZzIGZpbGVzIG5lZWQgYm90aCBSVlUgYW5kIENHWCBoYW5kbGU7IGlub2RlLVx1MDAzZWlfcHJpdmF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyODIwOiAqIHBvaW50cyBoZXJlIHNvIHNlcV9maWxlIG9wcyBhdm9pZCBwY2lfZ2V0X2RldmljZShQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRikuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4MjEtICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgJiM0Mzs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgJiM0Mzs9IHJ2dV9yZXAub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTQzLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NDojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ1OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcdFx0MHhBMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcdFx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUyOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXHRcdDB4QTBGN1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjE5PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjYyMTpcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYyMi1cdFx0KHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9SVlVfUkVQKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02Mzc9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYzOC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2Mzk6XHRyZXR1cm4gcGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjQwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3BmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzgtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI0Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXHR7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTgxOQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA5MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE9jdGVvblRYMiBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgYWJvdXQgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgVGhpcyBtZWFucyBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGtleS4KClRoZSBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBmYW1pbHksIHdoaWNoLCBmcm9tIG15IGV4cGVyaWVuY2UsIGFyZSBwcm9wcmlldGFyeSBoYXJkd2FyZSBTb0NzIG9yIFNtYXJ0TklDcyBmcm9tIENhdml1bS9NYXJ2ZWxsLiBUaGV5IGdvIGJ5IG5hbWVzIGxpa2UgT0NURU9OVFgyX0FGLCBPQ1RFT05UWDJfUEYsIGFuZCBPQ1RFT05UWDJfVkYgYW5kIGFyZSBiYXNlZCBvbiB0aGUgT2N0ZW9uVFgyIENOOUsvQ04xMEsvQ04yMEsgc2lsaWNvbi4gSSBrbm93IHRoZXNlIHJlcXVpcmUgYWN0dWFsIE9jdGVvblRYMiBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgUENJIGRldmljZXM7IHRoZXkgYXJlIG5vdCBnb2luZyB0byBydW4gd2l0aG91dCB0aGUgcmVhbCBzaWxpY29uLiBObyB3YXkgd2lsbCB0aGV5IHJ1biBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gIGRpcmVjdG9yeS4gQSBxdWljayBjaGVjayBvZiB0aGUgbW9kaWZpZWQgZmlsZXMgY29uZmlybXMgdGhpcy4gIFdlJiMzOTtyZSBsb29raW5nIGF0IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uYy8uaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQuCgpTaW5jZSBhbGwgdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNsZWFubHkgd2l0aGluIHRoZSBPY3Rlb25UWDIgZHJpdmVyIGNvZGUsIGFuZCB0aGlzIGRyaXZlciBpcyB1bmRlbmlhYmx5IHRpZWQgdG8gcGh5c2ljYWwgTWFydmVsbCBoYXJkd2FyZSwgdGhlICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgY29uZGl0aW9uIGlzIGRlZmluaXRlbHkgbWV0LiBJJiMzOTt2ZSBkb3VibGUtY2hlY2tlZCB0aGUgZ2l0IGRpZmYgYW5kIGNvbmZpcm1lZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBvdXRzaWRlIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCBkaXJlY3RvcnkuCgpUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBmYWxzZS4gVGhlcmUmIzM5O3Mgbm8gcG9pbnQgaW4gZnV6emluZyB0aGlzIGFzIGl0IGNhbiYjMzk7dCBiZSBleGVjdXRlZCB3aXRob3V0IHRoZSByZWFsIGhhcmR3YXJlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHksIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIGEgZHJpdmVyIHRoYXQgZnVuZGFtZW50YWxseSByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgY2FuJiMzOTt0IGJlIGVtdWxhdGVkLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNToyMy4xMDk3NTIyMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAzMDQ3MDI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIG9mZmxvYWQgcmF0ZSBsaW1pdGluZyBhbmQgcmVsYXRlZCBxdWV1ZSBzY2hlZHVsZXIgYWRqdXN0bWVudHMuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgTWFydmVsbC9DYXZpdW0gT2N0ZW9uVFgyIGhhcmR3YXJlIC8gU21hcnROSUNzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjA1OjIzLjEwOTc1Njc4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4OTQyNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmMyYzk2MDAxMmExZDllNGE4OWEzMzUyZmQzZjBiM2M1Nzg4ZDY2MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjA1OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcXG4rXFx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChydnUtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuQEAgLTYxNSw2ICs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG90eDJfZ2V0X21hY19mcm9tX2FmKTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4rb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXFxuK1xcdFxcdCAgICAgICB1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR10pXFxuK3tcXG4rXFx0c3RydWN0IG1ib3ggKm1ib3ggPSBcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveDtcXG4rXFx0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XFxuK1xcdGludCBpLCBlcnI7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY250OyBpKyspIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcXG4rXFx0aW50IGVyciwgc21xLCBpLCBjbnQgPSAwO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcXG4rXFx0XFx0c21xID0gcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9TTVFdW2ldO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFtjbnRdID0gMDtcXG4rXFx0XFx0Y250Kys7XFxuK1xcbitcXHRcXHRpZiAoY250IFxcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0XFx0Y250ID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNudCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gZmFpbDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2ZhaWw6XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGVyciwgc21xLCBuID0gMDtcXG4rXFx0dTY0IHJlZ19hZGRyWzJdO1xcbitcXHR1NjQgcmVnX3ZhbFsyXTtcXG4rXFx0dTY0IHJhdGU7XFxuK1xcbitcXHRpZiAoIW1heHJhdGUgXFx1MDAyNlxcdTAwMjYgIW1pbnJhdGUpIHtcXG4rXFx0XFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXHRcXHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzBdID0gMDtcXG4rXFx0XFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcXG4rXFx0XFx0cmVnX3ZhbFsxXSA9IDA7XFxuK1xcdFxcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0fVxcbitcXG4rXFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XFxuK1xcdGlmICghcmVxKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXEtXFx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xcbitcXG4rXFx0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xcbitcXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXFxuK1xcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcXG4rXFx0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXFxuK1xcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxcbitcXHQgKiBoYXJkd2FyZSBjYXAuXFxuK1xcdCAqXFxuK1xcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXFxuK1xcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXFxuK1xcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cXG4rXFx0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdGlmIChtYXhyYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcbitcXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xcbitcXHRyZXEtXFx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRpZiAobWlucmF0ZSkge1xcbitcXHRcXHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWlucmF0ZSk7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IDA7XFxuK1xcdH1cXG4rXFx0bisrO1xcbitcXHRyZXEtXFx1MDAzZW51bV9yZWdzID0gbjtcXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxcbiB7XFxuIFxcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XFxuQEAgLTY1MSw3ICs3ODcsMTEgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JcXG4gXFx0XFx0XFx0XFx0XFx0XFx0KHU2NClody1cXHUwMDNlc21xX2xpbmtfdHlwZSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlbnVtX3JlZ3MrKztcXG4gXFx0XFx0LyogTURRIGNvbmZpZyAqL1xcbi1cXHRcXHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVnWzFdID0gTklYX0FGX01EUVhfUEFSRU5UKHNjaHEpO1xcbiBcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbkBAIC03NzksNiArOTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9UTDRdID0gY2hhbl9jbnQ7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcXG4rXFx0XFx0cmVxLVxcdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4gXFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3gpO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG5AQCAtODQ0LDYgKzk4Nyw3IEBAIHZvaWQgb3R4Ml90eHNjaHFfc3RvcChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcbiBcXHQvKiBDbGVhciB0aGUgdHhzY2hxIGxpc3QgKi9cXG4gXFx0Zm9yIChsdmwgPSAwOyBsdmwgXFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsKyspIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcXG4gXFx0XFx0Zm9yIChzY2hxID0gMDsgc2NocSBcXHUwMDNjIE1BWF9UWFNDSFFfUEVSX0ZVTkM7IHNjaHErKylcXG4gXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbmluZGV4IGVlY2VlNjEyYjdiMmMuLmVkZTdmMTExM2I3MTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbkBAIC0xNyw2ICsxNyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hY3NlYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wa3RfY2xzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZTY0LmhcXHUwMDNlXFxuQEAgLTQ4Myw2ICs0ODQsMjMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcXG4gXFx0aW50IG1kZXZzO1xcbiB9O1xcbiBcXG4rc3RydWN0IG1xX29mZmxvYWRfc25hcCB7XFxuK1xcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XFxuK1xcdHU2NCBtYXhfcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XFxuK1xcdF9fdTggbnVtX3RjO1xcbitcXHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XFxuK1xcdF9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07XFxuK307XFxuK1xcbitzdHJ1Y3Qgb3R4Ml9tcXByaW8ge1xcbitcXHR1MzJcXHRmbGFncztcXG4rXFx0dTY0XFx0Km1pbl9yYXRlO1xcbitcXHR1NjRcXHQqbWF4X3JhdGU7XFxuK1xcdGJvb2xcXHRyYXRlX2xpbWl0O1xcbitcXHRib29sXFx0cmVwbGFjZV9zZXR1cF9kb25lO1xcbitcXHRib29sXFx0cmVwbGFjZV9ncmFmdF9kb25lO1xcbit9O1xcbitcXG4gc3RydWN0IG90eDJfbmljIHtcXG4gXFx0dm9pZCBfX2lvbWVtXFx0XFx0KnJlZ19iYXNlO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZVxcdCpuZXRkZXY7XFxuQEAgLTUxNSw2ICs1MzMsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcXG4gXFx0dTY0XFx0XFx0XFx0ZmxhZ3M7XFxuIFxcdHU2NFxcdFxcdFxcdCpjcV9vcF9hZGRyO1xcbiBcXG4rXFx0c3RydWN0IG90eDJfbXFwcmlvXFx0bXFwcmlvO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0KmN1cl9tcV9zbmFwO1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwXFx0Km9sZF9tcV9zbmFwO1xcbitcXG4gXFx0c3RydWN0IGJwZl9wcm9nXFx0XFx0KnhkcF9wcm9nO1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9xc2V0XFx0cXNldDtcXG4gXFx0c3RydWN0IG90eDJfaHdcXHRcXHRodztcXG5AQCAtMTI0Niw2ICsxMjY4LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcXG4gdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpO1xcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXFxuK1xcdFxcdFxcdFxcdCB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpO1xcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxcbiBcXHRcXHRcXHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xcbiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbkBAIC00MTMsNiArNDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYylcXG4gXFx0dTggb2xkX3BmY19lbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNiBwZmMtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbiBcXHRvbGRfcGZjX2VuID0gcGZ2Zi1cXHUwMDNlcGZjX2VuO1xcbiBcXHRwZnZmLVxcdTAwM2VwZmNfZW4gPSBwZmMtXFx1MDAzZXBmY19lbjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbmluZGV4IDliZWUxYjkxZWVhYTYuLmVjMjYwMWM2YzI1NWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXFxuQEAgLTI4Nyw2ICsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoY2hhbm5lbC1cXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcudHhfcXVldWVzIHx8XFxuK1xcdCAgICAgY2hhbm5lbC1cXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cXHUwMDNlaHcucnhfcXVldWVzKSkge1xcbitcXHRcXHRuZXRkZXZfaW5mbyhkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoaWZfdXApXFxuIFxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0b3AoZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuaW5kZXggYzBlMjEwMGRlMWQ5My4uNjhhZDJmM2QyMjI3NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbkBAIC05MDcsMTEgKzkwNywxMyBAQCBzdGF0aWMgaW50IG90eDJfbWJveF91cF9oYW5kbGVyX3JlcF9ldmVudF91cF9ub3RpZnkoc3RydWN0IG90eDJfbmljICpwZixcXG4gXFxuIFxcdGlmIChpbmZvLVxcdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xcbiBcXHRcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEucG9ydF9zdGF0ZSkge1xcbi1cXHRcXHRcXHRwZi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19QT1JUX1VQKSxcXG4rXFx0XFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgKilcXHUwMDI2cGYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+T1RYMl9GTEFHX1BPUlRfVVA7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX1BPUlRfVVApLFxcbitcXHRcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nICopXFx1MDAyNnBmLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpO1xcbiBcXHRcXHR9XFxuQEAgLTIwMDcsNiArMjAwOSwxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfbWVtO1xcbiBcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIocGYtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVycyBkdXJpbmcgb3BlbjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfaHc7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMjA1LDYgKzIyMTUsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yMjI2LDcgKzIyMzcsOCBAQCBpbnQgb3R4Ml9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XFxuIFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXG4tXFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuK1xcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19JTlRGX0RPV04pLFxcbitcXHRcXHQodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwZi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHQvKiAnaW50Zl9kb3duJyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXFxuIFxcdHNtcF93bWIoKTtcXG4gXFxuQEAgLTIyODAsNiArMjI5Miw3IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIG5ldGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgcWlkeCsrKVxcbiBcXHRcXHRuZXRkZXZfdHhfcmVzZXRfcXVldWUobmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIHFpZHgpKTtcXG4gXFxuK1xcdHN5bmNocm9uaXplX25ldCgpO1xcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbiBcXHQvKiBEbyBub3QgY2xlYXIgUlEvU1EgcmluZ3NpemUgc2V0dGluZ3MgKi9cXG4gXFx0bWVtc2V0X3N0YXJ0YXQocXNldCwgMCwgc3FlX2NudCk7XFxuQEAgLTI5MjMsNiArMjkzNiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4gXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXFx1MDAzZW5ldGRldik7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XFxuIFxcbitcXHRpZiAocHJvZyBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBNQVhfWERQX01UVSkge1xcbiBcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uMDQ1YjQ1NzNjZTE0ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbkBAIC0xNiw2ICsxNiw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvdGNfYWN0L3RjX21pcnJlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y192bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiY24xMGsuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm90eDJfY29tbW9uLmhcXFwiXFxuQEAgLTMxLDYgKzMzLDEwIEBAXFxuIFxcbiAjZGVmaW5lIE1DQVNUX0lOVkFMSURfR1JQXFx0XFx0KC0xVSlcXG4gI2RlZmluZSBSQVRFX01BTlRJU1NBX0JJVFNcXHRcXHQ4XFxuKy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xcbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXFx0MjUwMDAwVUxMXFxuKy8qIE1heCBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDEzMDgxNiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1xcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXFxuIFxcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcXG4gXFx0XFx0XFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uXFxuK1xcdFxcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdCpidXJzdF9leHAgPSBNQVhfQlVSU1RfRVhQT05FTlQ7XFxuIFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IG1heF9tYW50aXNzYTtcXG4gXFx0fVxcbkBAIC0xNjAwLDE0ICsxNjA5LDc1MiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBuaWMsIG5pYywgaW5ncmVzcyk7XFxuIH1cXG4gXFxuKy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRkZXZtX2tmcmVlKHBmdmYtXFx1MDAzZWRldiwgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBib29sIHJlcGxhY2luZylcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0aWYgKHJlcGxhY2luZyBcXHUwMDI2XFx1MDAyNiBwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG1lbXNldChwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUsIDAsXFxuK1xcdFxcdCAgICAgICBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0XFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcXG4rXFx0XFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkpO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcXG4rXFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cXHUwMDNlZGV2LCBudW1fdHhxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSkge1xcbitcXHRcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1xX29mZmxvYWRfc25hcCAqKnNuYXApXFxuK3tcXG4rXFx0aWYgKCEqc25hcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsICpzbmFwKTtcXG4rXFx0KnNuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3NuYXBfY29weShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICoqZHN0LFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwO1xcbitcXHRpbnQgdGM7XFxuK1xcbitcXHRpZiAoISpkc3QpIHtcXG4rXFx0XFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVxcdTAwM2VkZXYsIHNpemVvZigqc25hcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXNuYXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHQqZHN0ID0gc25hcDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25hcCA9ICpkc3Q7XFxuK1xcdH1cXG4rXFxuK1xcdHNuYXAtXFx1MDAzZW51bV90YyA9IHFvcHQtXFx1MDAzZW51bV90YztcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgVENfUU9QVF9NQVhfUVVFVUU7IHRjKyspIHtcXG4rXFx0XFx0c25hcC1cXHUwMDNlY291bnRbdGNdID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXHRcXHRzbmFwLVxcdTAwM2VvZmZzZXRbdGNdID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWluX3JhdGVbdGNdID0gMDtcXG4rXFx0XFx0c25hcC1cXHUwMDNlbWF4X3JhdGVbdGNdID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdHNuYXAtXFx1MDAzZW1pbl9yYXRlW3RjXSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfbXFwcmlvX3NuYXBfY29weShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAsIG1xcHJpbyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rXFx0cGZ2Zi1cXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcDtcXG4rXFx0cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXAgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmVwbGFjZV9zZXR1cF9kb25lID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fbWRxX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTtcXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdG9yZV9vbGQoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXAgPSBwZnZmLVxcdTAwM2VvbGRfbXFfc25hcDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghc25hcClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRtZW1zZXQocGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlLCAwLCBudW1fdHhxICogc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcXG4rXFx0bWVtc2V0KHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyA9IDA7XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBzbmFwLVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gc25hcC1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHR1NjQgbWF4X3JhdGUgPSBzbmFwLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NSU5fUkFURTtcXG4rXFx0XFx0aWYgKG1heF9yYXRlKVxcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUFYX1JBVEU7XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHNuYXAtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2Mgc25hcC1cXHUwMDNlb2Zmc2V0W3RjXSArIHNuYXAtXFx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXFx1MDAzZW51bV90Yyk7XFxuK1xcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIHNuYXAtXFx1MDAzZW51bV90YzsgdGMrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIHRjLCBzbmFwLVxcdTAwM2Vjb3VudFt0Y10sXFxuK1xcdFxcdFxcdFxcdCAgICBzbmFwLVxcdTAwM2VvZmZzZXRbdGNdKTtcXG4rXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKClcXG4rXFx0ICogYWxvbmUgaXMgaW5zdWZmaWNpZW50IGFmdGVyIGEgZmFpbGVkIHJlcGxhY2UgdGhhdCBhbHJlYWR5IGJvdW5jZWQgdGhlXFxuK1xcdCAqIGludGVyZmFjZS4gSWYgb3BlbiBmYWlsZWQsIFRYIHNjaGVkdWxlcnMgd2VyZSBmcmVlZDsgZGVmZXIgc2hhcGVyIHJlc3RvcmVcXG4rXFx0ICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxcbitcXHQgKi9cXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgPSB0cnVlO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIHRydWUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9IGVsc2UgaWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19zbmFwX2Rlc3Ryb3koc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcXHUwMDI2cGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXApO1xcbitcXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXFx1MDAyNnBmdmYtXFx1MDAzZW9sZF9tcV9zbmFwKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fY2xlYXJfc3coc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xcbitcXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xcbitcXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKHBmdmYtXFx1MDAzZW5ldGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGZhaWxlZCB0byBjbGVhciBoYXJkd2FyZSBzaGFwZXJzOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cXHUwMDNlbmV0ZGV2O1xcbitcXHRpbnQgdHhxLCBlcnI7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Zm9yICh0eHEgPSAwOyB0eHEgXFx1MDAzYyBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5mbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV07XFxuK1xcbitcXHRcXHRpZiAoIW1pbl9yYXRlIFxcdTAwMjZcXHUwMDI2ICFtYXhfcmF0ZSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIG1heF9yYXRlKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0eHEsIGVycik7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xcbisgKiBiYW5kd2lkdGggb2ZmbG9hZC4gIEJvdGggbXFwcmlvIGFkZCBhbmQgZGVsZXRlICh3aGVuIG9mZmxvYWQgd2FzIGFjdGl2ZSlcXG4rICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuXFxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cXG4rICpcXG4rICogSW50ZW50aW9uYWwgYmVoYXZpb3VyOiB0aGlzIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGRyb3BzIGluLWZsaWdodCB0cmFmZmljXFxuKyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcXG4rICogYmUgcmVhbGxvY2F0ZWQgKGUuZy4gb25lIFNNUSBwZXIgbm9uLVFvUyBxdWV1ZSkgYW5kIGNhbm5vdCBiZSByZXByb2dyYW1tZWRcXG4rICogbGl2ZSB0b2RheSwgc28gYSBuZXRkZXYgYm91bmNlIGlzIHJlcXVpcmVkIG9uIGV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsXFxuKyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcXG4rICogYnVnIHRvIFxcXCJmaXhcXFwiIHdpdGhvdXQgaW1wbGVtZW50aW5nIHRoZSBsaXZlLXJlcHJvZ3JhbW1pbmcgcGF0aCBub3RlZCBiZWxvdy5cXG4rICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmdcXG4rICogbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnkgdGhlIG9wZW4gZXJyb3IgcGF0aC5cXG4rICpcXG4rICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzb1xcbisgKiBvdHgyX3htaXQoKSBjYW5ub3QgcmFjZSBvdHgyX2ZyZWVfcXVldWVfbWVtKCkuXFxuKyAqL1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcXG4re1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcztcXG4rXFx0Ym9vbCBydW5uaW5nID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LyogVE9ETzogRXhwbG9yZSBsaXZlIFRYIHNjaGVkdWxlciByZXByb2dyYW1taW5nIHRvIGF2b2lkIGEgZnVsbFxcbitcXHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXFxuK1xcdCAqL1xcbitcXHRuZXRkZXZfaW5mbyhuZXRkZXYsXFxuK1xcdFxcdCAgICBcXFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXFx1MDAyNm5ldGRldi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xcbitcXHR9XFxuK1xcdGRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWYgKHJ1bm5pbmcpIHtcXG4rXFx0XFx0XFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFxcdTAwMjZuZXRkZXYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0XFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uXFxuK1xcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XFxuK1xcdCAqIHJlLWFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgdmlhIG90eDJfbXFwcmlvX3VwKCkgYWZ0ZXIgdGhlIGtlcm5lbFxcbitcXHQgKiByZW1vdmVkIHRoZSBxZGlzYy5cXG4rXFx0ICovXFxuK1xcdGlmIChyYXRlX2xpbWl0KVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XFxuK1xcdGVsc2VcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHJ1bm5pbmcpIHtcXG4rXFx0XFx0c2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsIFxcdTAwMjZuZXRkZXYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XFxuK1xcdH0gZWxzZSBpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHQvKiBuZG9fb3BlbigpIGFscmVhZHkgZnJlZWQgdGhlIFRYIHNjaGVkdWxlcnMgb24gZmFpbHVyZSB3aGlsZVxcbitcXHRcXHQgKiBuZXRpZl9ydW5uaW5nKCkgbWF5IHN0aWxsIGJlIHRydWU7IGRyb3AgbXFwcmlvIHNvZnR3YXJlIHN0YXRlXFxuK1xcdFxcdCAqIG9ubHkgaW5zdGVhZCBvZiBzZW5kaW5nIHNoYXBlciBjbGVhcnMgdG8gZnJlZWQgcXVldWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfc3cocGZ2Zik7XFxuK1xcdFxcdC8qIG5kb19vcGVuKCkgcm9sbHMgYmFjayBvbiBmYWlsdXJlOyBtYXJrIHRoZSBpbnRlcmZhY2UgZG93biBzb1xcbitcXHRcXHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcXG4rXFx0XFx0ICogc3RhdGUuIENhbGxlciBob2xkcyBSVE5MOyBkZXZfY2xvc2UoKSB3b3VsZCBkZWFkbG9jay5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNldF9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19JTlRGX0RPV04pLFxcbitcXHRcXHRcXHQodW5zaWduZWQgbG9uZyAqKVxcdTAwMjZwZnZmLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xcbitcXHRcXHRzbXBfd21iKCk7XFxuK1xcdFxcdG5ldGlmX2Nsb3NlKG5ldGRldik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0aWYgKCFyYXRlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChxY291bnQgXFx1MDAzYz0gMSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBUT0RPOiBtcXByaW8gbWluX3JhdGUvbWF4X3JhdGUgYXJlIHBlciB0cmFmZmljIGNsYXNzLCBidXQgYmFuZHdpZHRoXFxuK1xcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxcbitcXHQgKiBXaXRob3V0IHBlci1UQyBUTDQgc2hhcGVycyB0aGUgZHJpdmVyIGNhbm5vdCBob25vciBUQy1sZXZlbCBsaW1pdHNcXG4rXFx0ICogZm9yIGEgdHJhZmZpYyBjbGFzcyB0aGF0IHNwYW5zIG11bHRpcGxlIHF1ZXVlcyB3aXRob3V0IGVpdGhlclxcbitcXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXFxuK1xcdCAqIGNhcCB3aGVuIGV2ZXJ5IG1lbWJlciBxdWV1ZSBpcyBhY3RpdmUuIFJlamVjdCB1bnRpbCBwZXItVEMgVEw0XFxuK1xcdCAqIHNoYXBpbmcgY2FuIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYWxsb2NhdGluZyBhZGRpdGlvbmFsIFRMNCBub2Rlc1xcbitcXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHQgICBcXFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxcXG5cXFwiLFxcbitcXHRcXHQgICBuYW1lLCB0YywgcWNvdW50KTtcXG4rXFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHE7XFxuK1xcbitcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgbnVtX3R4cSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcW9wdC1cXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobnVtX3R4cSBcXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBudW1fdHhxKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcXG4re1xcbitcXHR1NjQgbWJwcztcXG4rXFxuK1xcdGlmICghcmF0ZV9ieXRlc19wcylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcXG4rXFx0cmV0dXJuIGlsb2cyKG1icHMgLyAyKSBcXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXFxuK1xcdCAqIG9sZCBvbmUuIHJlcGxhY2Vfc2V0dXBfZG9uZSBhbmQgVENfUk9PVF9HUkFGVCBkaXN0aW5ndWlzaCBzdGFsZVxcbitcXHQgKiBvbGQtaW5zdGFuY2UgdGVhcmRvd24gZnJvbSBncmFmdCBmYWlsdXJlIGFmdGVyIHNldHVwLlxcbitcXHQgKi9cXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXFx1MDAyNlxcdTAwMjYgcGZ2Zi1cXHUwMDNlY3VyX21xX3NuYXApIHtcXG4rXFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUpXFxuK1xcdFxcdFxcdG90eDJfbXFwcmlvX3NuYXBfY29tbWl0KHBmdmYpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXHRcXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqL1xcbitcXHRpZiAoIWhhZF9tcXByaW8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGlmX3VwKSB7XFxuK1xcdFxcdGludCBkb3duX2VyciwgZXJyO1xcbitcXG4rXFx0XFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xcbitcXHRcXHRpZiAoZG93bl9lcnIpXFxuK1xcdFxcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdHJldHVybiBkb3duX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcXG4rXFx0ICogc3RhdGUgb25seS5cXG4rXFx0ICovXFxuK1xcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cXHUwMDNlZXh0YWNrO1xcbitcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcXHUwMDI2bXFwcmlvLVxcdTAwM2Vxb3B0O1xcbitcXHRib29sIHJlcGxhY2luZyA9IHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xcbitcXHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xcbitcXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xcbitcXG4rXFx0aWYgKCFxb3B0LVxcdTAwM2VodylcXG4rXFx0XFx0cmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XFxuK1xcbitcXHRpZiAoIWlmX3VwKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobXFwcmlvLVxcdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXFxcblxcXCIsIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtcXByaW8tXFx1MDAzZXNoYXBlcik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcXHUwMDI2cGZ2Zi1cXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXFx1MDAzZXBkZXYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlcGZjX2VuKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFxcblxcXCIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNleGRwX3Byb2cpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnBmdmYtXFx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKHRjID0gMDsgdGMgXFx1MDAzYyBxb3B0LVxcdTAwM2VudW1fdGM7IHRjKyspIHtcXG4rXFx0XFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xcbitcXHRcXHR1MzIgcWNvdW50ID0gcW9wdC1cXHUwMDNlY291bnRbdGNdO1xcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtaW5fcmF0ZSBcXHUwMDI2XFx1MDAyNiBtYXhfcmF0ZSBcXHUwMDI2XFx1MDAyNiBtaW5fcmF0ZSBcXHUwMDNlIG1heF9yYXRlKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1pblxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBxY291bnQsIHRjLCBcXFwibWF4XFxcIik7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1pbl9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1heF9yYXRlKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19zdGFnZV9jdXIocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXFx1MDAzZW5ldGRldiwgdHJ1ZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFxuK1xcdC8qIG90eDJfbXFwcmlvX3VwKCkgbWF5IGhhdmUgcmVzdG9yZWQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gZHVyaW5nXFxuK1xcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XFxuK1xcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXFxuK1xcdCAqIGxpbWl0cyBpbiBoYXJkd2FyZS5cXG4rXFx0ICovXFxuK1xcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xcbitcXHRcXHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxcbitcXHRcXHRcXHRtaW5fcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWluX3JhdGVbdGNdO1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxcbitcXHRcXHRcXHRtYXhfcmF0ZSA9IG1xcHJpby1cXHUwMDNlbWF4X3JhdGVbdGNdO1xcbitcXG4rXFx0XFx0Zm9yICh0eHEgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbitcXHRcXHQgICAgIHR4cSBcXHUwMDNjIHFvcHQtXFx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9kYmcobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcXG4rXFx0XFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTtcXG4rXFxuK1xcdFxcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBwZnZmLVxcdTAwM2VjdXJfbXFfc25hcC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2VudW1fdGM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHBmdmYtXFx1MDAzZWN1cl9tcV9zbmFwLVxcdTAwM2Vjb3VudFtpXSxcXG4rXFx0XFx0XFx0XFx0ICAgIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpIHtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSBmYWxzZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rY2xlYW51cDpcXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xcbitcXG4rXFx0XFx0b3R4Ml9tcXByaW9fY2xlYXJfcmVwbGFjZV9zdGF0ZShwZnZmKTtcXG4rXFx0XFx0aWYgKHJlc3RvcmVfZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByZXN0b3JlX2Vycik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgcHJpb3IgY29uZmlndXJhdGlvbiByZXN0b3JlZFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGlmIChleHRhY2spXFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXFxcIik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUpXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTE2MzIsNiArMjM3OSw3IEBAIEVYUE9SVF9TWU1CT0wob3R4Ml9pbml0X3RjKTtcXG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbiB7XFxuIFxcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcXG4rXFx0b3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KG5pYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChvdHgyX3NodXRkb3duX3RjKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmMwYmI3YjkzMjA1NmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5AQCAtMTAzOCw2ICsxMDQxLDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9xb3Nfcm9vdF9hZGQoc3RydWN0IG90eDJfbmljICpwZnZmLCB1MTYgaHRiX21hal9pZCwgdTE2IGh0Yl9kZWZjXFxuIFxcdFxcdCAgIFxcXCJUQ19IVEJfQ1JFQVRFOiBoYW5kbGU9MHgleCBkZWZjbHM9MHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICAgaHRiX21hal9pZCwgaHRiX2RlZmNscyk7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihwZnZmLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdHJvb3QgPSBvdHgyX3Fvc19hbGxvY19yb290KHBmdmYpO1xcbiBcXHRpZiAoSVNfRVJSKHJvb3QpKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIocm9vdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjA1OjIzLjcyOTM1ODY3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU0MTA4NDQ0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIG5ldHdvcmsgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8pLCBhZGRpbmcgc3VwcG9ydCBmb3IgbXFwcmlvIGhhcmR3YXJlIG9mZmxvYWQgcmF0ZSBsaW1pdGluZyBhbmQgcmVsYXRlZCBxdWV1ZSBzY2hlZHVsZXIgYWRqdXN0bWVudHMuIFRoaXMgZHJpdmVyIHRhcmdldHMgcGh5c2ljYWwgTWFydmVsbC9DYXZpdW0gT2N0ZW9uVFgyIGhhcmR3YXJlIC8gU21hcnROSUNzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmMyYzk2MDAxMmExZDllNGE4OWEzMzUyZmQzZjBiM2M1Nzg4ZDY2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDc6MDU6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IDE1M2ViNTdiYWQwNjcuLmM5YTQzMjZkNzI1ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICszMzEsMTIgQEAgc3RhdGljIGJvb2wgaXNfdmFsaWRfdHhzY2hxKHN0cnVjdCBydnUgKnJ2dSwgaW50IGJsa2FkZHIsXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHR9XG4gXG4tXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYylcbitcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcblwiLFxuK1x0XHRcdFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuaW5kZXggMTc1OTkyMTg4YzE4YS4uYTUxOWUwYTk3YTJiNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuQEAgLTYxNSw2ICs2MTUsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4rc3RhdGljIGludFxuK290eDJfbml4X3RtcV9yZWdfd3JpdGUoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgY250LFxuK1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4rXHRcdCAgICAgICB1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgaSwgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcbitcdGlmICghcmVxKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHJlcS1cdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcbitcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNudDsgaSsrKSB7XG4rXHRcdHJlcS1cdTAwM2VyZWdbaV0gPSByZWdfYWRkcltpXTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4rXHR9XG4rXG4rXHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xuK1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdGludCBlcnIsIHNtcSwgaSwgY250ID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xuK1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuK1x0XHRjbnQrKztcbitcbitcdFx0aWYgKGNudCBcdTAwM2MgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdFx0Y250ID0gMDtcbitcdH1cbitcbitcdGlmIChjbnQpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsXG4rXHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZmFpbDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK2ZhaWw6XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxuK3tcbitcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuK1x0c3RydWN0IG5peF90eHNjaHFfY29uZmlnICpyZXE7XG4rXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xuK1x0dTY0IHJlZ19hZGRyWzJdO1xuK1x0dTY0IHJlZ192YWxbMl07XG4rXHR1NjQgcmF0ZTtcbitcbitcdGlmICghbWF4cmF0ZSBcdTAwMjZcdTAwMjYgIW1pbnJhdGUpIHtcbitcdFx0c21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpO1xuK1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0XHRyZWdfdmFsWzBdID0gMDtcbitcdFx0cmVnX2FkZHJbMV0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFsxXSA9IDA7XG4rXHRcdHJldHVybiBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIDIsIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdH1cbitcbitcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXG4rXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4rXHQgKiBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKCkgcHJvZ3JhbW1lcyB0aGUgbGFyZ2VzdCBidXJzdCB0aGUgTklYXG4rXHQgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzXG4rXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbitcdCAqIGtlcm5lbC1zaWRlIGRlZmF1bHQgd2hlbiBubyBleHBsaWNpdCBidXJzdCBpcyBjb25maWd1cmVkLCBub3QgYVxuK1x0ICogaGFyZHdhcmUgY2FwLlxuK1x0ICpcbitcdCAqIG1xcHJpbyBzZXR1cCByZXN0YXJ0cyB0aGUgbmV0ZGV2IChvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldiksXG4rXHQgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvblxuK1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuK1x0ICogcmVseWluZyBvbiBzdGFsZSBoYXJkd2FyZSBzdGF0ZS5cbitcdCAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuK1x0aWYgKG1heHJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXG4rXHQvKiBDSVIrUElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuK1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuK1x0aWYgKG1pbnJhdGUpIHtcbitcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuK1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4rXHR9XG4rXHRuKys7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBuO1xuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXG4ge1xuIFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcbkBAIC02NTEsNyArNzg3LDExIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzKys7XG4gXHRcdC8qIE1EUSBjb25maWcgKi9cbi1cdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXG4gXHRcdHJlcS1cdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XG4gXHRcdHJlcS1cdTAwM2VyZWd2YWxbMV0gPSBwYXJlbnQgXHUwMDNjXHUwMDNjIDE2O1xuIFx0XHRyZXEtXHUwMDNlbnVtX3JlZ3MrKztcbkBAIC03NzksNiArOTE5LDkgQEAgaW50IG90eDJfdHhzY2hfYWxsb2Moc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFx0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcbiBcdH1cbiBcbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXEtXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1NNUV0gPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuK1xuIFx0cmMgPSBvdHgyX3N5bmNfbWJveF9tc2coXHUwMDI2cGZ2Zi1cdTAwM2VtYm94KTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuQEAgLTg0NCw2ICs5ODcsNyBAQCB2b2lkIG90eDJfdHhzY2hxX3N0b3Aoc3RydWN0IG90eDJfbmljICpwZnZmKVxuIFxuIFx0LyogQ2xlYXIgdGhlIHR4c2NocSBsaXN0ICovXG4gXHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCsrKSB7XG4rXHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtsdmxdID0gMDtcbiBcdFx0Zm9yIChzY2hxID0gMDsgc2NocSBcdTAwM2MgTUFYX1RYU0NIUV9QRVJfRlVOQzsgc2NocSsrKVxuIFx0XHRcdHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtzY2hxXSA9IDA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uZWRlN2YxMTEzYjcxNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2MvbWFydmVsbC9zaWxpY29ucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hY3NlYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdWFwaS9saW51eC9wa3Rfc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZTY0LmhcdTAwM2VcbkBAIC00ODMsNiArNDg0LDIzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbitzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwIHtcbitcdHU2NCBtaW5fcmF0ZVtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHR1NjQgbWF4X3JhdGVbVENfUU9QVF9NQVhfUVVFVUVdO1xuK1x0X191OCBudW1fdGM7XG4rXHRfX3UxNiBjb3VudFtUQ19RT1BUX01BWF9RVUVVRV07XG4rXHRfX3UxNiBvZmZzZXRbVENfUU9QVF9NQVhfUVVFVUVdO1xuK307XG4rXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcbitcdHUzMlx0ZmxhZ3M7XG4rXHR1NjRcdCptaW5fcmF0ZTtcbitcdHU2NFx0Km1heF9yYXRlO1xuK1x0Ym9vbFx0cmF0ZV9saW1pdDtcbitcdGJvb2xcdHJlcGxhY2Vfc2V0dXBfZG9uZTtcbitcdGJvb2xcdHJlcGxhY2VfZ3JhZnRfZG9uZTtcbit9O1xuK1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgKzUzMywxMCBAQCBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dTY0XHRcdFx0ZmxhZ3M7XG4gXHR1NjRcdFx0XHQqY3Ffb3BfYWRkcjtcbiBcbitcdHN0cnVjdCBvdHgyX21xcHJpb1x0bXFwcmlvO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0KmN1cl9tcV9zbmFwO1xuK1x0c3RydWN0IG1xX29mZmxvYWRfc25hcFx0Km9sZF9tcV9zbmFwO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNjgsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCA5YmVlMWI5MWVlYWE2Li5lYzI2MDFjNmMyNTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGMwZTIxMDBkZTFkOTMuLjY4YWQyZjNkMjIyNzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtOTA3LDExICs5MDcsMTMgQEAgc3RhdGljIGludCBvdHgyX21ib3hfdXBfaGFuZGxlcl9yZXBfZXZlbnRfdXBfbm90aWZ5KHN0cnVjdCBvdHgyX25pYyAqcGYsXG4gXG4gXHRpZiAoaW5mby1cdTAwM2VldmVudCA9PSBSVlVfRVZFTlRfUE9SVF9TVEFURSkge1xuIFx0XHRpZiAoaW5mby1cdTAwM2VldnRfZGF0YS5wb3J0X3N0YXRlKSB7XG4tXHRcdFx0cGYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX1BPUlRfVVA7XG4rXHRcdFx0c2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX1BPUlRfVVApLFxuK1x0XHRcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZXRkZXYpO1xuIFx0XHRcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwZi1cdTAwM2VmbGFncyBcdTAwMjY9IH5PVFgyX0ZMQUdfUE9SVF9VUDtcbitcdFx0XHRjbGVhcl9iaXQoX19idWlsdGluX2N0emxsKE9UWDJfRkxBR19QT1JUX1VQKSxcbitcdFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHRcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTtcbiBcdFx0fVxuQEAgLTIwMDcsNiArMjAwOSwxNCBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbitcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihwZi1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlcnMgZHVyaW5nIG9wZW46ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0Z290byBlcnJfZnJlZV9odztcbitcdH1cbitcbiBcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgcGYtXHUwMDNlaHcuY2ludF9jbnQ7IHFpZHgrKykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIyMDUsNiArMjIxNSw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGZyZWVfaXJxKHZlYywgcGYpO1xuIGVycl9kaXNhYmxlX25hcGk6XG4gXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XG4rZXJyX2ZyZWVfaHc6XG4gXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcbiBlcnJfZnJlZV9tZW06XG4gXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xuQEAgLTIyMjYsNyArMjIzNyw4IEBAIGludCBvdHgyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7XG4gXHRuZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcbi1cdHBmLVx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XG4rXHRzZXRfYml0KF9fYnVpbHRpbl9jdHpsbChPVFgyX0ZMQUdfSU5URl9ET1dOKSxcbitcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZi1cdTAwM2VmbGFncyk7XG4gXHQvKiAnaW50Zl9kb3duJyBtYXkgYmUgY2hlY2tlZCBvbiBhbnkgY3B1ICovXG4gXHRzbXBfd21iKCk7XG4gXG5AQCAtMjI4MCw2ICsyMjkyLDcgQEAgaW50IG90eDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2MgbmV0ZGV2LVx1MDAzZW51bV90eF9xdWV1ZXM7IHFpZHgrKylcbiBcdFx0bmV0ZGV2X3R4X3Jlc2V0X3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobmV0ZGV2LCBxaWR4KSk7XG4gXG4rXHRzeW5jaHJvbml6ZV9uZXQoKTtcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG4gXHQvKiBEbyBub3QgY2xlYXIgUlEvU1EgcmluZ3NpemUgc2V0dGluZ3MgKi9cbiBcdG1lbXNldF9zdGFydGF0KHFzZXQsIDAsIHNxZV9jbnQpO1xuQEAgLTI5MjMsNiArMjkzNiwxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuK1x0aWYgKHByb2cgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4rXHRcdG5ldGRldl9lcnIoZGV2LFxuK1x0XHRcdCAgIFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbXR1IFx1MDAzZSBNQVhfWERQX01UVSkge1xuIFx0XHRuZXRkZXZfd2FybihkZXYsIFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbmluZGV4IDAzOWZkNDdlYmY1MjIuLjA0NWI0NTczY2UxNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5AQCAtMTYsNiArMTYsOCBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfbWlycmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNfYWN0L3RjX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvc2NoX2dlbmVyaWMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiY24xMGsuaFwiXG4gI2luY2x1ZGUgXCJvdHgyX2NvbW1vbi5oXCJcbkBAIC0zMSw2ICszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4rLyogTWluIHBlci1xdWV1ZSBlZ3Jlc3Mgc2hhcGluZyByYXRlIHRoZSBOSVggVExYIGVuY29kZXIgc3VwcG9ydHMgKDIgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1x0MjUwMDAwVUxMXG4rLyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcdCgoTUFYX0JVUlNUX1NJWkUgKiAxMDAwMDAwVUxMKSAvIDhVTEwpXG4gXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxuIFx0XHRcdFx0ICAgICAgdTMyICpidXJzdF9leHAsIHUzMiAqYnVyc3RfbWFudGlzc2EpXG5AQCAtNjEsNiArNjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0KmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgXHUwMDNjXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbitcdFx0ICogQ04xMEspLCBub3QgYSBtaW5pbWFsIGJ1cnN0LlxuK1x0XHQgKi9cbiBcdFx0KmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDtcbiBcdFx0KmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhO1xuIFx0fVxuQEAgLTE2MDAsMTQgKzE2MDksNzUyIEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4rLyogRnJlZSB0aGUgcGVyLXF1ZXVlIG1pbi9tYXggcmF0ZSBjYWNoZXMuICovXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpO1xuK1x0ZGV2bV9rZnJlZShwZnZmLVx1MDAzZWRldiwgcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgYm9vbCByZXBsYWNpbmcpXG4re1xuK1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuK1xuK1x0aWYgKHJlcGxhY2luZyBcdTAwMjZcdTAwMjYgcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCxcbitcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKSk7XG4rXHRcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCxcbitcdFx0ICAgICAgIG51bV90eHEgKiBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSk7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3NuYXBfZnJlZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgIHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipzbmFwKVxuK3tcbitcdGlmICghKnNuYXApXG4rXHRcdHJldHVybjtcbitcbitcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsICpzbmFwKTtcbitcdCpzbmFwID0gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19zbmFwX2NvcHkoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKipkc3QsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBtcV9vZmZsb2FkX3NuYXAgKnNuYXA7XG4rXHRpbnQgdGM7XG4rXG4rXHRpZiAoISpkc3QpIHtcbitcdFx0c25hcCA9IGRldm1fa3phbGxvYyhwZnZmLVx1MDAzZWRldiwgc2l6ZW9mKCpzbmFwKSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghc25hcClcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0KmRzdCA9IHNuYXA7XG4rXHR9IGVsc2Uge1xuK1x0XHRzbmFwID0gKmRzdDtcbitcdH1cbitcbitcdHNuYXAtXHUwMDNlbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YysrKSB7XG4rXHRcdHNuYXAtXHUwMDNlY291bnRbdGNdID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXHRcdHNuYXAtXHUwMDNlb2Zmc2V0W3RjXSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0c25hcC1cdTAwM2VtaW5fcmF0ZVt0Y10gPSAwO1xuK1x0XHRzbmFwLVx1MDAzZW1heF9yYXRlW3RjXSA9IDA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuK1x0XHRcdHNuYXAtXHUwMDNlbWluX3JhdGVbdGNdID0gbXFwcmlvLVx1MDAzZW1pbl9yYXRlW3RjXTtcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4rXHRcdFx0c25hcC1cdTAwM2VtYXhfcmF0ZVt0Y10gPSBtcXByaW8tXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fc3RhZ2VfY3VyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHJldHVybiBvdHgyX21xcHJpb19zbmFwX2NvcHkocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCwgbXFwcmlvKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9jb21taXQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdG90eDJfbXFwcmlvX3NuYXBfZnJlZShwZnZmLCBcdTAwMjZwZnZmLVx1MDAzZW9sZF9tcV9zbmFwKTtcbitcdHBmdmYtXHUwMDNlb2xkX21xX3NuYXAgPSBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwO1xuK1x0cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3JlcGxhY2Vfc3RhdGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IGZhbHNlO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmVwbGFjZV9ncmFmdF9kb25lID0gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHJldHVybiBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9NRFFdICE9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KTtcbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbXFfb2ZmbG9hZF9zbmFwICpzbmFwID0gcGZ2Zi1cdTAwM2VvbGRfbXFfc25hcDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxLCBlcnI7XG4rXG4rXHRpZiAoIXNuYXApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2ZiwgZmFsc2UpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUpKTtcbitcdG1lbXNldChwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSwgMCwgbnVtX3R4cSAqIHNpemVvZigqcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpKTtcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gMDtcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gc25hcC1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdHU2NCBtYXhfcmF0ZSA9IHNuYXAtXHUwMDNlbWF4X3JhdGVbdGNdO1xuK1xuK1x0XHRpZiAobWluX3JhdGUpXG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgfD0gVENfTVFQUklPX0ZfTUlOX1JBVEU7XG4rXHRcdGlmIChtYXhfcmF0ZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyB8PSBUQ19NUVBSSU9fRl9NQVhfUkFURTtcbitcbitcdFx0Zm9yICh0eHEgPSBzbmFwLVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBzbmFwLVx1MDAzZW9mZnNldFt0Y10gKyBzbmFwLVx1MDAzZWNvdW50W3RjXTsgdHhxKyspIHtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHNuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2Mgc25hcC1cdTAwM2VudW1fdGM7IHRjKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCB0Yywgc25hcC1cdTAwM2Vjb3VudFt0Y10sXG4rXHRcdFx0XHQgICAgc25hcC1cdTAwM2VvZmZzZXRbdGNdKTtcbitcbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogUmVidWlsZCB0aGUgVFggc2NoZWR1bGVyIHZpYSBuZXRkZXYgcmVzdGFydCB3aGVuIHJ1bm5pbmc7IG90eDJfbXFwcmlvX3VwKClcbitcdCAqIGFsb25lIGlzIGluc3VmZmljaWVudCBhZnRlciBhIGZhaWxlZCByZXBsYWNlIHRoYXQgYWxyZWFkeSBib3VuY2VkIHRoZVxuK1x0ICogaW50ZXJmYWNlLiBJZiBvcGVuIGZhaWxlZCwgVFggc2NoZWR1bGVycyB3ZXJlIGZyZWVkOyBkZWZlciBzaGFwZXIgcmVzdG9yZVxuK1x0ICogdG8gdGhlIG5leHQgc3VjY2Vzc2Z1bCBuZG9fb3BlbigpIHZpYSBvdHgyX21xcHJpb191cCgpLlxuK1x0ICovXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCB0cnVlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fSBlbHNlIGlmIChwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdKSB7XG4rXHRcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fc25hcF9kZXN0cm95KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VjdXJfbXFfc25hcCk7XG4rXHRvdHgyX21xcHJpb19zbmFwX2ZyZWUocGZ2ZiwgXHUwMDI2cGZ2Zi1cdTAwM2VvbGRfbXFfc25hcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX2NsZWFyX3N3KHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4rXHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0bmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCAwKTtcbitcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rfVxuK1xuKy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuKyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cbisgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbisgKi9cbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcocGZ2Zi1cdTAwM2VuZXRkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG90eDJfbXFwcmlvX21kcV9hbGxvY2F0ZWQocGZ2ZikpXG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIGhhcmR3YXJlIHNoYXBlcnM6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS5cbisgKlxuKyAqIEludGVudGlvbmFsIGJlaGF2aW91cjogdGhpcyBmdWxsIHN0b3Avb3BlbiBjeWNsZSBkcm9wcyBpbi1mbGlnaHQgdHJhZmZpY1xuKyAqIChjYXJyaWVyIG9mZiwgSVJRL05BUEkgdGVhcmRvd24sIHF1ZXVlIGRyYWluKS4gIFRoZSBOSVggVFggc2NoZWR1bGVyIG11c3RcbisgKiBiZSByZWFsbG9jYXRlZCAoZS5nLiBvbmUgU01RIHBlciBub24tUW9TIHF1ZXVlKSBhbmQgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZFxuKyAqIGxpdmUgdG9kYXksIHNvIGEgbmV0ZGV2IGJvdW5jZSBpcyByZXF1aXJlZCBvbiBldmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLFxuKyAqIGRlbGV0ZSwgYW5kIHJvbGxiYWNrLiAgVXNlcnMgc2VlIGEgYnJpZWYgY29ubmVjdGl2aXR5IGJsaXA7IHRoaXMgaXMgbm90IGFcbisgKiBidWcgdG8gXCJmaXhcIiB3aXRob3V0IGltcGxlbWVudGluZyB0aGUgbGl2ZS1yZXByb2dyYW1taW5nIHBhdGggbm90ZWQgYmVsb3cuXG4rICogSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biB3aXRob3V0IGNhbGxpbmdcbisgKiBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieSB0aGUgb3BlbiBlcnJvciBwYXRoLlxuKyAqXG4rICogUXVpZXNjZSB0aGUgdHJhbnNtaXQgcGF0aCBsaWtlIF9fZGV2X2Nsb3NlX21hbnkoKSBiZWZvcmUgbmRvX3N0b3AoKSBzb1xuKyAqIG90eDJfeG1pdCgpIGNhbm5vdCByYWNlIG90eDJfZnJlZV9xdWV1ZV9tZW0oKS5cbisgKi9cbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGJvb2wgcmF0ZV9saW1pdClcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcztcbitcdGJvb2wgcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCBlcnI7XG4rXG4rXHQvKiBUT0RPOiBFeHBsb3JlIGxpdmUgVFggc2NoZWR1bGVyIHJlcHJvZ3JhbW1pbmcgdG8gYXZvaWQgYSBmdWxsXG4rXHQgKiBuZG9fc3RvcCgpL25kb19vcGVuKCkgYm91bmNlIG9uIGV2ZXJ5IG1xcHJpbyBjaGFuZ2UuXG4rXHQgKi9cbitcdG5ldGRldl9pbmZvKG5ldGRldixcbitcdFx0ICAgIFwibXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcXG5cIik7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRjbGVhcl9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRzbXBfbWJfX2FmdGVyX2F0b21pYygpOyAvKiBDb21taXQgbmV0aWZfcnVubmluZygpLiAqL1xuK1x0fVxuK1x0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAocnVubmluZykge1xuK1x0XHRcdHNldF9iaXQoX19MSU5LX1NUQVRFX1NUQVJULCBcdTAwMjZuZXRkZXYtXHUwMDNlc3RhdGUpO1xuK1x0XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi5cbitcdCAqIE9uIHRlYXJkb3duLCBkcm9wIG1xcHJpbyBzb2Z0d2FyZSBzdGF0ZSBzbyBuZG9fb3BlbigpIGRvZXMgbm90XG4rXHQgKiByZS1hcHBseSBiYW5kd2lkdGggbGltaXRzIHZpYSBvdHgyX21xcHJpb191cCgpIGFmdGVyIHRoZSBrZXJuZWxcbitcdCAqIHJlbW92ZWQgdGhlIHFkaXNjLlxuK1x0ICovXG4rXHRpZiAocmF0ZV9saW1pdClcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XG4rXHRlbHNlXG4rXHRcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1xuK1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4rXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcnVubmluZykge1xuK1x0XHRzZXRfYml0KF9fTElOS19TVEFURV9TVEFSVCwgXHUwMDI2bmV0ZGV2LVx1MDAzZXN0YXRlKTtcbitcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4rXHR9IGVsc2UgaWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIkZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxcblwiLFxuK1x0XHRcdCAgIGVycik7XG4rXHRcdC8qIG5kb19vcGVuKCkgYWxyZWFkeSBmcmVlZCB0aGUgVFggc2NoZWR1bGVycyBvbiBmYWlsdXJlIHdoaWxlXG4rXHRcdCAqIG5ldGlmX3J1bm5pbmcoKSBtYXkgc3RpbGwgYmUgdHJ1ZTsgZHJvcCBtcXByaW8gc29mdHdhcmUgc3RhdGVcbitcdFx0ICogb25seSBpbnN0ZWFkIG9mIHNlbmRpbmcgc2hhcGVyIGNsZWFycyB0byBmcmVlZCBxdWV1ZXMuXG4rXHRcdCAqL1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9zdyhwZnZmKTtcbitcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4rXHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuK1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuK1x0XHQgKi9cbitcdFx0c2V0X2JpdChfX2J1aWx0aW5fY3R6bGwoT1RYMl9GTEFHX0lOVEZfRE9XTiksXG4rXHRcdFx0KHVuc2lnbmVkIGxvbmcgKilcdTAwMjZwZnZmLVx1MDAzZWZsYWdzKTtcbitcdFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXG4rXHRcdHNtcF93bWIoKTtcbitcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFRPRE86IG1xcHJpbyBtaW5fcmF0ZS9tYXhfcmF0ZSBhcmUgcGVyIHRyYWZmaWMgY2xhc3MsIGJ1dCBiYW5kd2lkdGhcbitcdCAqIG9mZmxvYWQgc2hhcGVzIG9uIHBlci1xdWV1ZSBNRFEgbm9kZXMgcGFyZW50ZWQgdW5kZXIgYSBzaW5nbGUgVEw0LlxuK1x0ICogV2l0aG91dCBwZXItVEMgVEw0IHNoYXBlcnMgdGhlIGRyaXZlciBjYW5ub3QgaG9ub3IgVEMtbGV2ZWwgbGltaXRzXG4rXHQgKiBmb3IgYSB0cmFmZmljIGNsYXNzIHRoYXQgc3BhbnMgbXVsdGlwbGUgcXVldWVzIHdpdGhvdXQgZWl0aGVyXG4rXHQgKiBkaXZpZGluZyB0aGUgcmF0ZSBhY3Jvc3MgcXVldWVzICh1QVBJIG1pc21hdGNoKSBvciBleGNlZWRpbmcgdGhlIFRDXG4rXHQgKiBjYXAgd2hlbiBldmVyeSBtZW1iZXIgcXVldWUgaXMgYWN0aXZlLiBSZWplY3QgdW50aWwgcGVyLVRDIFRMNFxuK1x0ICogc2hhcGluZyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFkZGl0aW9uYWwgVEw0IG5vZGVzXG4rXHQgKiBiZXlvbmQgdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS5cbitcdCAqL1xuK1x0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdCAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXFxuXCIsXG4rXHRcdCAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0ICAgICAgIFwibXFwcmlvOiAlcyByYXRlIGZvciB0YyAlZCBub3Qgc3VwcG9ydGVkIHdpdGggJXUgcXVldWVzXCIsXG4rXHRcdFx0ICAgICAgIG5hbWUsIHRjLCBxY291bnQpO1xuK1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXG4re1xuK1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcdGludCB0YywgdHhxO1xuK1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBudW1fdHhxKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcIixcbitcdFx0XHRcdCAgICAgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwiLFxuK1x0XHRcdCAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdGZvciAodHhxID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuK1x0XHQgICAgIHR4cSBcdTAwM2MgcW9wdC1cdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xuK1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4rXHRcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdFx0ICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cIixcbitcdFx0XHRcdFx0ICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICB0eHEsIG51bV90eHEpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcbit7XG4rXHR1NjQgbWJwcztcbitcbitcdGlmICghcmF0ZV9ieXRlc19wcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2MgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QUylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcbitcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFx1MDAyNm1xcHJpby1cdTAwM2Vxb3B0O1xuK1x0Ym9vbCBoYWRfbXFwcmlvID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXG4rXHQvKiB0YyBxZGlzYyByZXBsYWNlIHJ1bnMgc2V0dXAgb24gdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlXG4rXHQgKiBvbGQgb25lLiByZXBsYWNlX3NldHVwX2RvbmUgYW5kIFRDX1JPT1RfR1JBRlQgZGlzdGluZ3Vpc2ggc3RhbGVcbitcdCAqIG9sZC1pbnN0YW5jZSB0ZWFyZG93biBmcm9tIGdyYWZ0IGZhaWx1cmUgYWZ0ZXIgc2V0dXAuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX3NldHVwX2RvbmUgXHUwMDI2XHUwMDI2IHBmdmYtXHUwMDNlY3VyX21xX3NuYXApIHtcbitcdFx0ZXJyID0gMDtcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSlcbitcdFx0XHRvdHgyX21xcHJpb19zbmFwX2NvbW1pdChwZnZmKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0aW50IGRvd25fZXJyLCBlcnI7XG4rXG4rXHRcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbitcdFx0aWYgKGRvd25fZXJyKVxuK1x0XHRcdHJldHVybiBkb3duX2VycjtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0cmV0dXJuIGRvd25fZXJyO1xuK1x0fVxuK1xuK1x0LyogbmRvX3N0b3AoKSBhbHJlYWR5IGZyZWVkIHRoZSBUWCBzY2hlZHVsZXIgVEwgbm9kZXM7IGRyb3Agc29mdHdhcmVcbitcdCAqIHN0YXRlIG9ubHkuXG4rXHQgKi9cbitcdG90eDJfbXFwcmlvX2NsZWFyX3N3KHBmdmYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4re1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVx1MDAzZWV4dGFjaztcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgdGMsIHR4cSwgZXJyLCBpO1xuK1xuK1x0aWYgKCFxb3B0LVx1MDAzZWh3KVxuK1x0XHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcbitcdGlmICghaWZfdXApIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwibXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChtcXByaW8tXHUwMDNlc2hhcGVyICE9IFRDX01RUFJJT19TSEFQRVJfQldfUkFURSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcblwiLCBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwiVW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcIixcbitcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKCF0ZXN0X2JpdChRT1NfQ0lSX1BJUl9TVVBQT1JULCBcdTAwMjZwZnZmLVx1MDAzZWh3LmNhcF9mbGFnKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlcGZjX2VuKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2V4ZHBfcHJvZykge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmVcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZwZnZmLVx1MDAzZXFvcy5xb3NfdHJlZSkpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YysrKSB7XG4rXHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0aWYgKG1pbl9yYXRlIFx1MDAyNlx1MDAyNiBtYXhfcmF0ZSBcdTAwMjZcdTAwMjYgbWluX3JhdGUgXHUwMDNlIG1heF9yYXRlKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcblwiLFxuK1x0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcbitcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwibWluXCIpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWF4X3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1heFwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG1pbl9yYXRlKSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXFxuXCIsXG4rXHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCIsXG4rXHRcdFx0XHRcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQobWF4X3JhdGUpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3N0YWdlX2N1cihwZnZmLCBtcXByaW8pO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gY2xlYW51cDtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYsIHJlcGxhY2luZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX21xcHJpb19tZHFfYWxsb2NhdGVkKHBmdmYpKSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHR9XG4rXG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IG1xcHJpby1cdTAwM2VmbGFncztcbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuK1x0XHR1MzIgcWNvdW50ID0gcW9wdC1cdTAwM2Vjb3VudFt0Y107XG4rXG4rXHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuK1x0XHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcbitcdFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLiBNdWx0aS1xdWV1ZSBUQ3Mgd2l0aCByYXRlc1xuK1x0XHQgKiBhcmUgcmVqZWN0ZWQgYWJvdmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y107XG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbitcbitcdFx0Zm9yICh0eHEgPSBxb3B0LVx1MDAzZW9mZnNldFt0Y107XG4rXHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gKyBxY291bnQ7IHR4cSsrKSB7XG4rXHRcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwiLFxuK1x0XHRcdFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XG4rXHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXSA9IG1heF9yYXRlO1xuK1xuK1x0XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLFxuK1x0XHRcdFx0XHRcdFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlY3VyX21xX3NuYXAtXHUwMDNlbnVtX3RjOyBpKyspXG4rXHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBwZnZmLVx1MDAzZWN1cl9tcV9zbmFwLVx1MDAzZWNvdW50W2ldLFxuK1x0XHRcdFx0ICAgIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSA9IHRydWU7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2VfZ3JhZnRfZG9uZSA9IGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0b3R4Ml9tcXByaW9fc25hcF9jb21taXQocGZ2Zik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitjbGVhbnVwOlxuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdGludCByZXN0b3JlX2VyciA9IG90eDJfbXFwcmlvX3Jlc3RvcmVfb2xkKHBmdmYpO1xuK1xuK1x0XHRvdHgyX21xcHJpb19jbGVhcl9yZXBsYWNlX3N0YXRlKHBmdmYpO1xuK1x0XHRpZiAocmVzdG9yZV9lcnIpIHtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZCBhbmQgcHJpb3IgY29uZmlndXJhdGlvbiByb2xsYmFjayBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICByZXN0b3JlX2Vycik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQgYW5kIHByaW9yIGNvbmZpZ3VyYXRpb24gcm9sbGJhY2sgZmFpbGVkOiAlZFwiLFxuK1x0XHRcdFx0XHRcdCAgICAgICByZXN0b3JlX2Vycik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IHByaW9yIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcXG5cIik7XG4rXHRcdFx0aWYgKGV4dGFjaylcbitcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdFx0ICAgXCJtcXByaW86IHJlcGxhY2UgZmFpbGVkOyBwcmlvciBjb25maWd1cmF0aW9uIHJlc3RvcmVkXCIpO1xuK1x0XHR9XG4rXHRcdHJldHVybiBlcnIgPyBlcnIgOiAtRUlPO1xuK1x0fVxuK1x0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbitcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4re1xuK1x0c3dpdGNoIChyb290LVx1MDAzZWNvbW1hbmQpIHtcbitcdGNhc2UgVENfUk9PVF9HUkFGVDpcbitcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJlcGxhY2Vfc2V0dXBfZG9uZSlcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5yZXBsYWNlX2dyYWZ0X2RvbmUgPSB0cnVlO1xuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4rXG4rXHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC0xNjMyLDYgKzIzNzksNyBAQCBFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF90Yyk7XG4gdm9pZCBvdHgyX3NodXRkb3duX3RjKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuIHtcbiBcdG90eDJfZGVzdHJveV90Y19mbG93X2xpc3QobmljKTtcbitcdG90eDJfbXFwcmlvX3NuYXBfZGVzdHJveShuaWMpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG90eDJfc2h1dGRvd25fdGMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuaW5kZXggNjljMDkxMWUyOGU5MS4uYzBiYjdiOTMyMDU2YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5AQCAtMTE4LDYgKzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4rXHQvKiA2NTUzNiBpcyB0aGUga2VybmVsLXNpZGUgZGVmYXVsdCBidXJzdCB3aGVuIEhUQiBkb2VzIG5vdCBzdXBwbHkgYW5cbitcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXG4rXHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSsrO1xuQEAgLTEwMzgsNiArMTA0MSwxNCBAQCBzdGF0aWMgaW50IG90eDJfcW9zX3Jvb3RfYWRkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IGh0Yl9tYWpfaWQsIHUxNiBodGJfZGVmY1xuIFx0XHQgICBcIlRDX0hUQl9DUkVBVEU6IGhhbmRsZT0weCV4IGRlZmNscz0weCV4XFxuXCIsXG4gXHRcdCAgIGh0Yl9tYWpfaWQsIGh0Yl9kZWZjbHMpO1xuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihwZnZmLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIkhUQjogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJIVEI6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0cm9vdCA9IG90eDJfcW9zX2FsbG9jX3Jvb3QocGZ2Zik7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocm9vdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNToyMy43MjkzNjE3ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTMxMzI5MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBwcmVzZW50cyBhIHJlYXNvbmFibGUgdGFyZ2V0IGZvciBmdXp6aW5nIGJhc2VkIG9uIG91ciBlc3RhYmxpc2hlZCBndWlkZWxpbmVzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLiBJdCBhcHBlYXJzIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgIGRpcmVjdG9yeS4gSSBzZWUgY2hhbmdlcyBpbiBgcnZ1X25peC5jYCwgYG90eDJfY29tbW9uLmMvaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIGEgcHJldHR5IGNvbXByZWhlbnNpdmUgdXBkYXRlIHRvIHNldmVyYWwga2V5IG1vZHVsZXMuXG5cbk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgZHJpdmVyIGFuZCBoYXJkd2FyZSByZWFjaGFiaWxpdHkuIFRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyIGlzIG9idmlvdXNseSB0aGUgdGFyZ2V0IChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJgKS4gTm93LCBhIGNyaXRpY2FsIHF1ZXN0aW9uIGFyaXNlczogaXMgdGhpcyBkcml2ZXIgdGllZCB0byBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSwgbGlrZSBhIFNtYXJ0TklDIG9yIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZGV2aWNlLCBvciBkb2VzIGl0IGFsc28gc3VwcG9ydCBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gS25vd2luZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3Qgb3VyIGZ1enppbmcgYXBwcm9hY2guIFBoeXNpY2FsIGhhcmR3YXJlIG9mdGVuIGludHJvZHVjZXMgY29tcGxleGl0aWVzIHJlbGF0ZWQgdG8gYWNjZXNzaWJpbGl0eSBhbmQgcmVwcm9kdWNpYmlsaXR5LCB3aGVyZWFzIHZpcnR1YWxpemF0aW9uIHByb3ZpZGVzIGEgbW9yZSBjb250cm9sbGVkIGFuZCBwb3RlbnRpYWxseSBzaW1wbGVyIHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIEkgY2FuIHRlc3QgdGhpcyB3aXRoaW4gYW4gZWFzaWx5IGZ1enphYmxlIHNldHVwLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIE1hcnZlbGwgT2N0ZW9uVFgyIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGFuZCB2aXJ0dWFsIG1hY2hpbmUgc3VwcG9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5OTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNToyOC42NjA2OTM1MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTYwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6OTpjb25maWcgT0NURU9OVFgyX0FGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTItXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTIyPWNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiRGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoyNDpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXFx0ZGVmYXVsdCBuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzE6Y29uZmlnIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz01MT1jb25maWcgUlZVX0VTV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFJWVSBFLVN3aXRjaCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTU0LVxcdGRlZmF1bHQgbVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBhZi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICs9IG5pYy9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlPTY9Y2NmbGFncy15ICs9IC1JJChzcmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IHJ2dV9tYm94Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfQUYpICs9IHJ2dV9hZi5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGUtOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo2NzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9DTjEwS19SUE0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaDoxNjojZGVmaW5lXFx0UENJX0RFVklEX09DVEVPTlRYMl9DR1hcXHRcXHQweEEwNTlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0xNTQ9REVGSU5FX1NIT1dfQVRUUklCVVRFKG5wY19tY2FtX2xheW91dCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1xcdFxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE2NTojZGVmaW5lIERFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKF9fbmFtZSwgX19zaXplKVxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY2LXN0YXRpYyBpbnQgX19uYW1lICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcdFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzAtfVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTcxOl9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTgxPXN0YXRpYyBpbnQgbnBjX21jYW1fZHN0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQyLSNkZWZpbmUgVE9UQUxfU1ogKE1BWF9OVU1fQkFOS1MgKiBNQVhfTlVNX1NVQl9CQU5LUyAqIE1BWF9TVUJCQU5LX0RFUFRIICogNjQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI0MzpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9kc3RhdHMsIFRPVEFMX1NaKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYz0yNDU9c3RhdGljIGludCBucGNfbWNhbV9taXNtYXRjaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcXFwiJXVcXFxcdCVkXFxcXHQldVxcXFxuXFxcIiBuZWVkcyBsZXNzIHRoYW4gNjQgY2hhcmFjdGVycyB0byBwcmludC4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjIxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9QVFBcXHRcXHRcXHQweEEwMENcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMi0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFBcXHRcXHQweEIxMDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcXHQweEI2MDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyODojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlNUXFx0XFx0XFx0MHhBMDg1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXFx0XFx0XFx0MHhBMDlFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01ODk9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTEtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTM6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTUtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTZYWF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTk2OlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Ny1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk4LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDAtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NjAyOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA0LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk1TU1fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwNTpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDYtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXFx0eyAwLCB9ICAvKiBlbmQgb2YgdGFibGUgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTkzMy1cXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6OTM0OlxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzUtXFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ0Nz1pbnQgcnZ1X2dldF9udW1fbGJrX2NoYW5zKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM0NTM6XFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDU0LVxcdFxcdFxcdCAgICAgIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDcxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRlxcdDB4QTBGOFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzQ3Mz1zdGF0aWMgaW50IHJ2dV9lbmFibGVfc3Jpb3Yoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ5NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDk1OlxcdGlmIChydnUtXFx1MDAzZXZmX2RldmlkID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNDk2LVxcdFxcdGNoYW5zID0gcnZ1X2dldF9udW1fbGJrX2NoYW5zKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuaC0yMy0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlxcdFxcdDB4QTA2NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI1OiNkZWZpbmVcXHRQQ0lfREVWSURfT0NURU9OVFgyX0xCS1xcdFxcdFxcdDB4QTA2MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM9MzkyPXN0YXRpYyB2b2lkIHJ2dV9sYmtfc2V0X2NoYW5uZWxzKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQxNS1cXHRcXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmM6NDE2OlxcdFxcdFxcdFxcdCAgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLLCBwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MTctXFx0XFx0aWYgKCFwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0yODAwPXN0YXRpYyB2b2lkIHJ2dV9kYmdfbnBhX2luaXQoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yODE5LS8qIFBlci1sbWFjIENHWCBkZWJ1Z2ZzIGZpbGVzIG5lZWQgYm90aCBSVlUgYW5kIENHWCBoYW5kbGU7IGlub2RlLVxcdTAwM2VpX3ByaXZhdGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4MjA6ICogcG9pbnRzIGhlcmUgc28gc2VxX2ZpbGUgb3BzIGF2b2lkIHBjaV9nZXRfZGV2aWNlKFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4MjEtICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBydnVfbmljcGYubyBvdHgyX3B0cC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgKz0gcnZ1X25pY3ZmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgKz0gcnZ1X3JlcC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00My0vKiBQQ0kgZGV2aWNlIElEcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYgICAgICAgICAgICAgIDB4QTA2M1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ1OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcXHRcXHQweEEwNjRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NjojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcXHRcXHQweEEwRjhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUyOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXFx0XFx0MHhBMEY3XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTk9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfbGJrdmYoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjIwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MjE6XFx0cmV0dXJuIChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02MjItXFx0XFx0KHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfUlZVX1JFUCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02Mzc9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02Mzgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjYzOTpcXHRyZXR1cm4gcGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC02NDAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6Mzc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM4LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3ZmX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyMzpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzoyNDpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy0yNi1cXHR7IH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MDU6MjguNzA5MDE0MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQzMTE1MjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgT2N0ZW9uVFgyIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgYWJvdXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgVGhpcyBtZWFucyBsb29raW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IGRlcGVuZCBvbiBwaHlzaWNhbCBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0J3Mga2V5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgZmFtaWx5LCB3aGljaCwgZnJvbSBteSBleHBlcmllbmNlLCBhcmUgcHJvcHJpZXRhcnkgaGFyZHdhcmUgU29DcyBvciBTbWFydE5JQ3MgZnJvbSBDYXZpdW0vTWFydmVsbC4gVGhleSBnbyBieSBuYW1lcyBsaWtlIE9DVEVPTlRYMl9BRiwgT0NURU9OVFgyX1BGLCBhbmQgT0NURU9OVFgyX1ZGIGFuZCBhcmUgYmFzZWQgb24gdGhlIE9jdGVvblRYMiBDTjlLL0NOMTBLL0NOMjBLIHNpbGljb24uIEkga25vdyB0aGVzZSByZXF1aXJlIGFjdHVhbCBPY3Rlb25UWDIgaGFyZHdhcmUgYW5kIHNwZWNpZmljIFBDSSBkZXZpY2VzOyB0aGV5IGFyZSBub3QgZ29pbmcgdG8gcnVuIHdpdGhvdXQgdGhlIHJlYWwgc2lsaWNvbi4gTm8gd2F5IHdpbGwgdGhleSBydW4gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2gncyBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYCBkaXJlY3RvcnkuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIG1vZGlmaWVkIGZpbGVzIGNvbmZpcm1zIHRoaXMuICBXZSdyZSBsb29raW5nIGF0IGBydnVfbml4LmNgLCBgb3R4Ml9jb21tb24uYy8uaGAsIGBvdHgyX2RjYm5sLmNgLCBgb3R4Ml9ldGh0b29sLmNgLCBgb3R4Ml9wZi5jYCwgYG90eDJfdGMuY2AsIGFuZCBgcW9zLmNgLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0ZWQuXG5cblNpbmNlIGFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY2xlYW5seSB3aXRoaW4gdGhlIE9jdGVvblRYMiBkcml2ZXIgY29kZSwgYW5kIHRoaXMgZHJpdmVyIGlzIHVuZGVuaWFibHkgdGllZCB0byBwaHlzaWNhbCBNYXJ2ZWxsIGhhcmR3YXJlLCB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjb25kaXRpb24gaXMgZGVmaW5pdGVseSBtZXQuIEkndmUgZG91YmxlLWNoZWNrZWQgdGhlIGdpdCBkaWZmIGFuZCBjb25maXJtZWQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgb3V0c2lkZSB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2AgZGlyZWN0b3J5LlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBmYWxzZS4gVGhlcmUncyBubyBwb2ludCBpbiBmdXp6aW5nIHRoaXMgYXMgaXQgY2FuJ3QgYmUgZXhlY3V0ZWQgd2l0aG91dCB0aGUgcmVhbCBoYXJkd2FyZS4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgYXJlIGVtcHR5LCBhbmQgdGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBhIGRyaXZlciB0aGF0IGZ1bmRhbWVudGFsbHkgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGNhbid0IGJlIGVtdWxhdGVkLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTgxOSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6MDU6MzkuMTQwMTY4NjM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBuZXR3b3JrIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvKSwgYWRkaW5nIHN1cHBvcnQgZm9yIG1xcHJpbyBoYXJkd2FyZSBvZmZsb2FkIHJhdGUgbGltaXRpbmcgYW5kIHJlbGF0ZWQgcXVldWUgc2NoZWR1bGVyIGFkanVzdG1lbnRzLiBUaGlzIGRyaXZlciB0YXJnZXRzIHBoeXNpY2FsIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBoYXJkd2FyZSAvIFNtYXJ0TklDcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzowNTozOS4xNDAyMDYxNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrwm[1] Phase: Running StartedAt: 2026-09-08 07:05:50 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrwm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 07:05:50 +0000 UTC FinishedAt: 2026-09-08 07:05:54 +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,}