Name: series-workflowmwk5x Phase: Failed StartedAt: 2026-09-06 08:24:18 +0000 UTC FinishedAt: 2026-09-06 08:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwk5x[0] Phase: Succeeded StartedAt: 2026-09-06 08:24:18 +0000 UTC FinishedAt: 2026-09-06 08:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwk5x[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 08:24:18 +0000 UTC FinishedAt: 2026-09-06 08:48:39 +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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1MzOTAgLyBDT05GSUdfVkZJT19BUCkgYW5kIGNhbm5vdCBiZSBidWlsdCBvciBleGVjdXRlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3N2I3M2IyYzE0NGVmNDA4MmVhMzYwZDE3ZjJiYzBiNDAyODY5YTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjQ4OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZDAzNzYzMmRmODBlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMzEsNiAmIzQzOzMxLDcgQEBcbiAjZGVmaW5lIEFQX1FVRVVFX0lOX1VTRSBcJiMzNDtpbiB1c2VcJiMzNDtcbiBcbiAjZGVmaW5lIEFQX1JFU0VUX0lOVEVSVkFMXHRcdDIwXHQvKiBSZXNldCBzbGVlcCBpbnRlcnZhbCAoMjBtcylcdFx0Ki9cbiYjNDM7I2RlZmluZSBBUF9SRVNFVF9NQVhfV0FJVFx0XHQyMDAwXHQvKiBNYXhpbXVtIHdhaXQgZm9yIHJlc2V0ICgyMDAwbXMpXHQqL1xuIFxuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KTtcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7XG5AQCAtMjI2LDI3ICYjNDM7MjI3LDkwIEBAIHN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9tZGV2X2dldF9xdWV1ZShcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIGNsZWFycyB0aGUgSVIgYml0IG9yIGdpdmVzIHVwIGFmdGVyIDUgdHJpZXNcbi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlclxuLSAqXG4tICogQ2hlY2tzIHRoZSBJUlEgYml0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgQVBRTiB1c2luZyBhcF90YXBxLlxuLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLlxuLSAqIFJldHVybnMgaWYgYXBfdGFwcSBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4tICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuXG4mIzQzOyAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSB3YWl0IGZvciB0aGUgSVIgYml0IHRvIGNsZWFyIGFmdGVyIGEgZGlzYWJsZVxuJiM0MzsgKlxuJiM0MzsgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlXG4mIzQzOyAqXG4mIzQzOyAqIFJlcGVhdGVkbHkgcG9sbHMgdGhlIEFQIHF1ZXVlIHN0YXR1cyB2aWEgUFFBUChUQVBRKSBldmVyeSAyMG1zIHVudGlsIHRoZSBJUlxuJiM0MzsgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEJlY2F1c2UgUFFBUChBUUlDKSBkaXNhYmxlIGluaXRpYXRlcyBhbiBhc3luY2hyb25vdXMgcHJvY2VzcywgYVxuJiM0MzsgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC5cbiYjNDM7ICogVGhlIGhvc3QgbXVzdCBjb25maXJtIElSPTAgYmVmb3JlIHVucGlubmluZyB0aGUgTklCIHBhZ2UgdG8gYXZvaWQgYSB3aWxkXG4mIzQzOyAqIERNQSB3cml0ZSB0byBhIGZyZWVkIHBhZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogLSAwXHRcdGlmIHRoZSBJUiBiaXQgaXMgY2xlYXIgKGkuZS4sIGludGVycnVwdHMgYXJlIGRpc2FibGVkKS5cbiYjNDM7ICpcbiYjNDM7ICogLSAtRU5PREVWXHRpZiB0aGUgUFFBUC1UQVBRIHJlc3BvbnNlIGNvZGUgaW5kaWNhdGVzIHRoZSBxdWV1ZSBpcyBub3QgYXZhaWxhYmxlLFxuJiM0MzsgKlx0XHRpcyBkZWNvbmZpZ3VyZWQsIG9yIGlzIGNoZWNrc3RvcHBlZCAoaS5lLiwgbm90IG9wZXJhdGlvbmFsKS5cbiYjNDM7ICpcbiYjNDM7ICogLSAtRVRJTUVET1VUXHR0aGUgZnVuY3Rpb24gdGltZWQgb3V0IGJlZm9yZSB0aGUgSVIgYml0IHdhcyBjbGVhcmVkLlxuICAqL1xuLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4mIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF90YXBxX3JjKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLCB1OCByYylcbiYjNDM7e1xuJiM0MztcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoVEFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtQUUFQKFRBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X2lycWNsZWFyX3RpbWVvdXQoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChUQVBRKSB0aW1lZCBvdXQgd2FpdGluZyBmb3IgSVJRIGNsZWFyIG9uICUwMnguJTA0eDogcmM9JSMwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1BRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLCB1OCByYylcbiYjNDM7e1xuJiM0MztcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtQUUFQKEFRSUMpIGRpc2FibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X3phcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChaQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1BRQVAoWkFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuIFxuIFx0ZG8ge1xuLVx0XHRzdGF0dXMgPSBhcF90YXBxKGFwcW4sIE5VTEwpO1xuJiM0MztcdFx0c3RhdHVzID0gYXBfdGFwcShxLVx1MDAzZWFwcW4sIE5VTEwpO1xuIFx0XHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxuIFx0XHRcdGlmICghc3RhdHVzLmlycV9lbmFibGVkKVxuLVx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbkBAIC0yNTUsMTQgJiM0MzszMTksMTQgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDslczogdGFwcSByYyAlMDJ4OiAlMDR4XFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdFx0fVxuIFx0fSB3aGlsZSAoLS1yZXRyeSk7XG4gXG4tXHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XFxuXCYjMzQ7LFxuLVx0XHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XG4mIzQzO1x0cmVwb3J0X2lycWNsZWFyX3RpbWVvdXQocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XG4tICogQHE6IFRoZSB2ZmlvX2FwX3F1ZXVlXG4mIzQzOyAqIHZmaW9fYXBfaXJxX2Rpc2FibGUgLSBkaXNhYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlXG4mIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuJiM0MzsgKlxuJiM0MzsgKiBJc3N1ZXMgUFFBUChBUUlDKSB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBBUCBxdWV1ZS4gT24gc3VjY2Vzc1xuJiM0MzsgKiAoQVBfUkVTUE9OU0VfTk9STUFMIG9yIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEKSwgcG9sbHMgdmlhXG4mIzQzOyAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoKSB1bnRpbCB0aGUgSVIgYml0IGlzIGNvbmZpcm1lZCBjbGVhciBiZWZvcmVcbiYjNDM7ICogZnJlZWluZyB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBndWVzdCBJU0MuIFRoaXMgd2FpdCBpc1xuJiM0MzsgKiBuZWNlc3NhcnkgYmVjYXVzZSBBUUlDIGRpc2FibGUgaXMgYXN5bmNocm9ub3VzOiBmcmVlaW5nIHRoZSBOSUIgYmVmb3JlIElSPTBcbiYjNDM7ICogaXMgY29uZmlybWVkIHJpc2tzIGEgd2lsZCBETUEgd3JpdGUgdG8gYSBmcmVlZCBob3N0IHBhZ2UuXG4gICpcbi0gKiBVc2VzIGFwX2FxaWMgdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0aW9uIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHJlc2V0XG4tICogaW4gcHJvZ3Jlc3Mgb3IgSVJRIGRpc2FibGUgY29tbWFuZCBhbHJlYWR5IHByb2NlZWRlZDogY2FsbHNcbi0gKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdG8gY2hlY2sgZm9yIHRoZSBJUlEgYml0IHRvIGJlIGNsZWFyXG4tICogYW5kIGNhbGxzIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIHRvIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkXG4tICogd2l0aCB0aGUgQVAgaW50ZXJydXB0IGhhbmRsaW5nLlxuJiM0MzsgKiBSZXRyaWVzIHVwIHRvIDUgdGltZXMgKHdpdGggMjBtcyBzbGVlcCkgaWYgdGhlIHF1ZXVlIGlzIGJ1c3kgb3IgYSByZXNldCBpc1xuJiM0MzsgKiBpbiBwcm9ncmVzcy5cbiAgKlxuLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLFxuLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy5cbiYjNDM7ICogSWYgdGhlIElSIGJpdCBjYW5ub3QgYmUgY29uZmlybWVkIGNsZWFyICh0aW1lb3V0KSwgdGhlIE5JQiBwYWdlIGFuZCBndWVzdFxuJiM0MzsgKiBJU0MgYXJlIGludGVudGlvbmFsbHkgbGVha2VkLiBJZiB0aGUgcGFnZSB3ZXJlIHVucGlubmVkIGFuZCByZXR1cm5lZCB0byB0aGVcbiYjNDM7ICogYWxsb2NhdG9yLCBhIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwgYWRkcmVzcyB3b3VsZFxuJiM0MzsgKiBjb3JydXB0IG1lbW9yeSBiZWxvbmdpbmcgdG8gYSBuZXcgb3duZXIg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdCBjb3VsZCBjcmFzaFxuJiM0MzsgKiBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC5cbiAgKlxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4mIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbiYjNDM7ICogcmVzb3VyY2VzIGFyZSBmcmVlZCBpbW1lZGlhdGVseSBzaW5jZSB0aGUgaGFyZHdhcmUgY2FuIG5vIGxvbmdlciB3cml0ZSB0b1xuJiM0MzsgKiB0aGUgTklCLlxuICAqXG4gICogUmV0dXJuOiBcdTAwMjZzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzXG4gICovXG5AQCAtMzEwLDM0ICYjNDM7MzgyLDg3IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4mIzQzO1x0aW50IHJldHJpZXMgPSA1LCByZXQ7XG4gXG4gXHRkbyB7XG4gXHRcdHN0YXR1cyA9IGFwX2FxaWMocS1cdTAwM2VhcHFuLCBhcWljX2dpc2EsIDApO1xuIFx0XHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0XHRcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbi1cdFx0XHRnb3RvIGVuZF9mcmVlO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4mIzQzO1x0XHRcdCAqIGFscmVhZHkgZGlzYWJsZWQgb3IgYSBwcmlvciBhc3luYyByZXF1ZXN0IGlzIHN0aWxsXG4mIzQzO1x0XHRcdCAqIGNvbXBsZXRpbmcgKE9USEVSV0lTRV9DSEFOR0VEKS4gIEluIGJvdGggY2FzZXMsIHdlIG11c3RcbiYjNDM7XHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuJiM0MztcdFx0XHQgKiBiZWZvcmUgcHJvY2VlZGluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMCB8fCByZXQgPT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9mcmVlO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUaW1lZCBvdXQgd2FpdGluZyB0byBjb25maXJtIGludGVycnVwdHMgYXJlIGRpc2FibGVkLlxuJiM0MztcdFx0XHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XG4mIzQzO1x0XHRcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxuJiM0MztcdFx0XHQgKiByZXVzZSB0aGUgTklCIHdoaWxlIGhhcmR3YXJlIGNhbiBzdGlsbCB3cml0ZSB0byBpdC5cbiYjNDM7XHRcdFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xuJiM0MztcdFx0XHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcbiYjNDM7XHRcdFx0ICogc2lnbmFscyB0byB0aGUgZ3Vlc3QgdGhhdCB0aGUgcmVzZXQgb3BlcmF0aW9uIGRpZCBub3RcbiYjNDM7XHRcdFx0ICogY29tcGxldGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG4mIzQzO1x0XHRcdFx0bWVtc2V0KFx1MDAyNnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpO1xuJiM0MztcdFx0XHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Z290byBlbmRfZmFpbDtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuJiM0MztcdFx0Y2FzZSBBUF9SRVNQT05TRV9TVEFURV9DSEFOR0VfSU5fUFJPR1JFU1M6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuJiM0MztcdFx0XHQvKiBBUCBub3Qgb3BlcmF0aW9uYWw7IG5vIGZ1cnRoZXIgaW50ZXJydXB0cyBwb3NzaWJsZSAqL1xuJiM0MztcdFx0XHRyZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4mIzQzO1x0XHRjYXNlIEFQX1JFU1BPTlNFX0lOVkFMSURfR0lTQTpcbiYjNDM7XHRcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfU0VDUkVUX05PVF9VTklRVUU6XG4mIzQzO1x0XHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi9cbi1cdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZFxuJiM0MztcdFx0XHQgKiBhbmQgdGhlIGhhcmR3YXJlIHN0aWxsIGhvbGRzIHRoZSBOSUIgYWRkcmVzcy4gRG8gbm90XG4mIzQzO1x0XHRcdCAqIGZyZWUgcmVzb3VyY2VzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKHJldHJpZXMtLSk7XG4gXG4tXHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1x0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1xuJiM0MztlbmRfZmFpbDpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlXG4mIzQzO1x0ICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlXG4mIzQzO1x0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcbiYjNDM7XHQgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkXG4mIzQzO1x0ICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbFxuJiM0MztcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJiMzOTtzIG1lbW9yeSDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0XG4mIzQzO1x0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXG4mIzQzO1x0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzdGF0dXM7XG4mIzQzO1xuIGVuZF9mcmVlOlxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXG4mIzQzO1x0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcbiYjNDM7XHQgKiBpbnRlcnJ1cHRzIGNhbiBub3QgYmUgcHJvY2Vzc2VkLCBzbyBmcmVlIHRoZSBBUUlDIHJlc291cmNlcyAtIHRoZSBwaW5uZWQgTklCXG4mIzQzO1x0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcbiYjNDM7XHQgKiBub3QgYmUgbGVha2VkLlxuJiM0MztcdCAqL1xuIFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDAxLDIyICYjNDM7NTI2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU5cbiYjNDM7ICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0XG4gICpcbi0gKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVyc1xuJiM0MzsgKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZFxuICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZVxuLSAqIEB2Y3B1OiB0aGUgdmNwdSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVnaXN0ZXJzIHNwZWNpZnlpbmcgdGhlIHBhcmFtZXRlcnNcbi0gKlx0ICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uXG4mIzQzOyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGFcbiYjNDM7ICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcbiYjNDM7ICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cbiAgKlxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcbi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQ1xuJiM0MzsgKiBUaGUgY29uZGl0aW9uIGNvZGUgYW5kIEFQLXF1ZXVlIHN0YXR1cyB3b3JkIHJldHVybmVkIGJ5IFBRQVAoQVFJQykgYXJlXG4mIzQzOyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbFxuJiM0MzsgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LlxuICAqXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcbi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbiYjNDM7ICogUmVzb3VyY2UgbWFuYWdlbWVudCBpcyBiYXNlZCBzb2xlbHkgb24gd2hldGhlciBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjpcbiYjNDM7ICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWRcbiYjNDM7ICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuXG4mIzQzOyAqIC0gQWxsIG90aGVyIHJlc3BvbnNlczogaGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUI7IHRoZSBuZXdseSBwaW5uZWRcbiYjNDM7ICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmVcbiYjNDM7ICogICBsZWZ0IGludGFjdC5cbiAgKlxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxuLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LlxuJiM0MzsgKiBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaXMgcmV0dXJuZWQgaWYgdmZpb19waW5fcGFnZXMoKSBvclxuJiM0MzsgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTQyOCwxNyAmIzQzOzU2MCwxOSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9O1xuIFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XG4gXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xuLVx0aW50IG5pc2M7XG4mIzQzO1x0aW50IG5pc2MsIHJldDtcbiBcdHN0cnVjdCBrdm0gKmt2bTtcbiBcdHBoeXNfYWRkcl90IGhfbmliO1xuIFx0ZG1hX2FkZHJfdCBuaWI7XG4tXHRpbnQgcmV0O1xuIFxuIFx0LyogVmVyaWZ5IHRoYXQgdGhlIG5vdGlmaWNhdGlvbiBpbmRpY2F0b3IgYnl0ZSBhZGRyZXNzIGlzIHZhbGlkICovXG4gXHRpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgXHUwMDI2bmliKSkge1xuIFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbiBcdFx0XHRcdCBfX2Z1bmNfXywgXHUwMDI2bmliLCBxLVx1MDAzZWFwcW4pO1xuLVxuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IGludmFsaWQgTklCIGFkZHJlc3MgJXBhZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgXHUwMDI2bmliKTtcbiBcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7XG4gXHRcdHJldHVybiBzdGF0dXM7XG4gXHR9XG5AQCAtNDUzLDcgJiM0Mzs1ODcsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxuIFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiB2ZmlvX3Bpbl9wYWdlcyBmYWlsZWQ6IHJjPSVkLFwmIzM0O1xuIFx0XHRcdFx0IFwmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCByZXQsIFx1MDAyNm5pYiwgcS1cdTAwM2VhcHFuKTtcbi1cbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiB2ZmlvX3Bpbl9wYWdlcyBmYWlsZWQgcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJldCk7XG4gXHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTO1xuIFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0fVxuQEAgLTQ3Niw3ICYjNDM7NjEzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiBcdGlmIChuaXNjIFx1MDAzYyAwKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IGdpc2MgcmVnaXN0cmF0aW9uIGZhaWxlZDogbmlzYz0lZCwgaXNjPSVkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCBuaXNjLCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tXG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogR0lTQyByZWdpc3RyYXRpb24gZmFpbGVkIHJjPSVkIGlzYz0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgbmlzYywgaXNjKTtcbiBcdFx0dmZpb191bnBpbl9wYWdlcyhcdTAwMjZxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZXZkZXYsIG5pYiwgMSk7XG4gXHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTO1xuIFx0XHRyZXR1cm4gc3RhdHVzO1xuQEAgLTQ4OSwyNCAmIzQzOzYyOSwzOCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcbiYjNDM7XHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbiYjNDM7XHRcdCAqIFRoZSBuZXcgcmVzb3VyY2VzIGFyZSBzYXZlZCBmb3IgdHJhY2tpbmcgYW5kIGZ1dHVyZSB0ZWFyZG93bi5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuJiM0MztcdFx0ICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LiBUaGVcbiYjNDM7XHRcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXG4mIzQzO1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKi9cbiBcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0XHRxLVx1MDAzZXNhdmVkX2lvdmEgPSBuaWI7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4tXHRcdC8qIFdlIGNvdWxkIG5vdCBtb2RpZnkgSVJRIHNldHRpbmdzOiBjbGVhciBuZXcgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUIgKENDPTMgb3IgZXJyb3IpLiBUaGVcbiYjNDM7XHRcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxuJiM0MztcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuJiM0MztcdFx0ICogSVNDIHRoYXQgd2VyZSBwcmVwYXJlZCBmb3IgdGhpcyAocmVqZWN0ZWQpIHJlcXVlc3QuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0IF9fZnVuY19fLCByZXQsIGlzYywgcS1cdTAwM2VhcHFuKTtcbiYjNDM7XHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogR0lTQyB1bnJlZ2lzdGVyIGZhaWxlZCByYz0lZCBpc2M9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByZXQsIGlzYyk7XG4mIzQzO1x0XHR9XG4gXHRcdHZmaW9fdW5waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEpO1xuIFx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcXG5cJiMzNDssIF9fZnVuY19fLCBxLVx1MDAzZWFwcW4sXG4tXHRcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuLVx0XHR2ZmlvX2FwX2lycV9kaXNhYmxlKHEpO1xuLVx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbkBAIC01MTcsNiAmIzQzOzY3MSwxMSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRcdFx0XHQgYXFpY19naXNhLnpvbmUsIGFxaWNfZ2lzYS5pciwgYXFpY19naXNhLmdpc2MsXG4gXHRcdFx0XHQgYXFpY19naXNhLmdmLCBhcWljX2dpc2EuZ2lzYSwgYXFpY19naXNhLmlzYyxcbiBcdFx0XHRcdCBxLVx1MDAzZWFwcW4pO1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggcmM9JSMwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0ICAgICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc3RhdHVzO1xuQEAgLTYwMSw3ICYjNDM7NzYwLDggQEAgc3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoISh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYSBcdTAwMjYgRUNBX0FJVikpIHtcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCBhcHFuLCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYSk7XG4tXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1BRQVAoQVFJQykgZm9yICUwMnguJTA0eDogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG5AQCAtNjEwLDcgJiM0Mzs3NzAsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IFBRQVAoQVFJQykgaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlcjogYXBxbj0weCUwNHhcXG5cJiMzNDssXG4gXHRcdFx0XHQgX19mdW5jX18sIGFwcW4pO1xuLVxuJiM0MztcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IGhvb2sgbm90IHJlZ2lzdGVyZWQgd2l0aCB0aGUgdmZpb19hcCBkcml2ZXJcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNjIzLDYgJiM0Mzs3ODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogbWRldiAlMDhseC0lMDRseC0lMDRseC0lMDRseC0lMDRseCUwOGx4IG5vdCBpbiB1c2U6IGFwcW49MHglMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcbiBcdFx0XHRcdCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLCBhcHFuKTtcbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KG1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBtZGV2IG5vdCBpbiB1c2VcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuQEAgLTYzMSwxMSAmIzQzOzc5NSwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXG5cJiMzNDssXG4gXHRcdFx0XHQgX19mdW5jX18sIEFQX1FJRF9DQVJEKGFwcW4pLFxuIFx0XHRcdFx0IEFQX1FJRF9RVUVVRShhcHFuKSk7XG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZm9yICUwMnguJTA0eDogcXVldWUgbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHRzdGF0dXMgPSB2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzLnJlZ3MuZ3Byc1sxXTtcbi1cbiBcdC8qIElmIElSIGJpdCgxNikgaXMgc2V0IHdlIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovXG4gXHRpZiAoKHN0YXR1cyBcdTAwM2VcdTAwM2UgKDYzIC0gMTYpKSBcdTAwMjYgMHgwMSlcbiBcdFx0cXN0YXR1cyA9IHZmaW9fYXBfaXJxX2VuYWJsZShxLCBzdGF0dXMgXHUwMDI2IDB4MDcsIHZjcHUpO1xuQEAgLTY5MiwxNCAmIzQzOzg1OCwxNCBAQCBzdGF0aWMgYm9vbCBfcXVldWVfcGFzc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHRpZiAoIXEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHN3aXRjaCAocS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSkge1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcXVldWUgaXMgb25seSBwYXNzYWJsZSBpZiB6ZXJvaXphdGlvbiB3YXMgY29uZmlybWVkIGJ5XG4mIzQzO1x0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcbiYjNDM7XHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbiYjNDM7XHQgKiBUaGlzIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBsZWFraW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcXVldWVcbiYjNDM7XHQgKiB0byB0aGUgZ3Vlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xuIH1cbiBcbiAvKlxuQEAgLTE0MTAsNyAmIzQzOzE1NzYsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiB7XG4gXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XG4gXG4tXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XG4mIzQzO1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE1LDM3ICYjNDM7MjA4MSwxMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX2ZpbmRfcXVldWUoaW50IGFwcW4pXG4gXHRyZXR1cm4gcTtcbiB9XG4gXG4tc3RhdGljIGludCBhcHFfc3RhdHVzX2NoZWNrKGludCBhcHFuLCBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzICpzdGF0dXMpXG4mIzQzO3N0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcbiYjNDM7XHRcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXG4mIzQzO1x0XHQgKiByZXR1cm5lZCBmcm9tIFRBUFEgbXVzdCBiZSB2ZXJpZmllZCB0byBjb25maXJtIHRoYXQgdGhlXG4mIzQzO1x0XHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHN0YXR1cy1cdTAwM2VxdWV1ZV9lbXB0eSBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2VyZXBsaWVzX3dhaXRpbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0YXR1cy1cdTAwM2VpcnFfZW5hYmxlZCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2Vhc3luYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsOiBpbnRlcnJ1cHRzIGFyZSBub3QgcG9zc2libGUgc29cbiYjNDM7XHRcdCAqIEFRSUMgcmVzb3VyY2VzIGNhbiBiZSBzYWZlbHkgZnJlZWQuIEhvd2V2ZXIsIHplcm9pemF0aW9uXG4mIzQzO1x0XHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxuJiM0MztcdFx0ICogdGhlc2UgcmVzcG9uc2UgY29kZXMgYXJlIHJldHVybmVkIOKAlCB0aGVyZSBpcyBubyB3YXkgdG9cbiYjNDM7XHRcdCAqIGRpc3Rpbmd1aXNoIGEgemVyb2l6ZWQgcXVldWUgZnJvbSBvbmUgdGhhdCBoYXMgbm90IGJlZW5cbiYjNDM7XHRcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcbiYjNDM7XHRcdCAqIGJlIGZyZWVkIGJ1dCB0aGF0IHplcm9pemF0aW9uIGhhcyBub3QgYmVlbiBjb25maXJtZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSByZXNldCBpcyBpbiBwcm9ncmVzcy4gSXQgbWF5IGJlIHRoZSByZXNldCB3ZSBpc3N1ZWQgb3Igb25lXG4mIzQzO1x0XHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXG4mIzQzO1x0XHQgKiB3aWxsIGJlIHplcm9pemVkLCBzbyBrZWVwIHdhaXRpbmcuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbiYjNDM7XHRcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOlxuIFx0XHQvKlxuJiM0MztcdFx0ICogQVBfUkVTUE9OU0VfQlVTWTpcbiYjNDM7XHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbiYjNDM7XHRcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRVxuJiM0MztcdFx0ICogQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOlxuIFx0XHQgKiBUaGVzZSBhc3luY2hyb25vdXMgcmVzcG9uc2UgY29kZXMgaW5kaWNhdGUgYSBQUUFQKEFBUFEpXG4gXHRcdCAqIGluc3RydWN0aW9uIHRvIGFzc29jaWF0ZSBhIHNlY3JldCB3aXRoIHRoZSBndWVzdCBmYWlsZWQuIEFsbFxuIFx0XHQgKiBzdWJzZXF1ZW50IEFQIGluc3RydWN0aW9ucyB3aWxsIGVuZCB3aXRoIHRoZSBhc3luY2hyb25vdXNcbi1cdFx0ICogcmVzcG9uc2UgY29kZSB1bnRpbCB0aGUgQVAgcXVldWUgaXMgcmVzZXQ7IHNvLCBsZXQmIzM5O3MgcmV0dXJuXG4tXHRcdCAqIGEgdmFsdWUgaW5kaWNhdGluZyBhIHJlc2V0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi5cbiYjNDM7XHRcdCAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiBcdFx0ICovXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiBcdGRlZmF1bHQ6XG4tXHRcdFdBUk4odHJ1ZSxcbi1cdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gdmVyaWZ5IHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eDogVEFQUSByYz0ldVxcblwmIzM0Oyxcbi1cdFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdHJlcG9ydF90YXBxX3JjKHEsIHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cdTAwM2VzYXZlZF9pb3ZhKSB7XG4mIzQzO1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuJiM0MztcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFx1MDAyNiBHSVNDKSB0byBwcmV2ZW50IGhvc3QgY3Jhc2hcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KSB7XG4mIzQzO1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7UmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBXQUlUX01TRyBcJiMzNDtXYWl0ZWQgJWRtcyBmb3IgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4ICgldSwgJXUsICV1KVwmIzM0O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogYXBxX3Jlc2V0X2ZpbmFsaXplIC0gc3RvcmUgZmluYWwgVEFQUSBzdGF0dXMgYW5kIGZyZWUgQVFJQyByZXNvdXJjZXMuXG4mIzQzOyAqIEBxOiAgICAgIHRoZSB2ZmlvX2FwX3F1ZXVlXG4mIzQzOyAqIEBzdGF0dXM6IHRoZSBmaW5hbCBBUCBxdWV1ZSBzdGF0dXMgcmV0dXJuZWQgYnkgUFFBUChUQVBRKVxuJiM0MzsgKiBAcmV0OiAgICB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYXBxX3N0YXR1c19jaGVjaygpXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyB0aGUgZnVsbCBUQVBRIHN0YXR1cyB3b3JkIHRvIHEtXHUwMDNlcmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1c1xuJiM0MzsgKiBiaXRzIHJlZmxlY3QgdGhlIGNvbmZpcm1lZCBlbmQgc3RhdGUgb2YgdGhlIHF1ZXVlLiBJZiByZXQgPT0gMCxcbiYjNDM7ICogemVyb2l6YXRpb24gd2FzIGNvbmZpcm1lZCBhbmQgdGhlIHJlc3BvbnNlIGNvZGUgaXMgb3ZlcnJpZGRlbiB3aXRoXG4mIzQzOyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yXG4mIzQzOyAqIHJldCA9PSAtRU5PREVWIChERUNPTkZJR1VSRUQgb3IgQ0hFQ0tTVE9QUEVEKSwgdGhlIG5vbi16ZXJvIHJlc3BvbnNlXG4mIzQzOyAqIGNvZGUgaXMgbGVmdCBpbnRhY3Qgc28gX3F1ZXVlX3Bhc3NhYmxlKCkgY29ycmVjdGx5IHJldHVybnMgZmFsc2UuXG4mIzQzOyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfTk9STUFMO1xuJiM0MztcdGlmIChxLVx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxuJiM0MztcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG4ge1xuIFx0aW50IHJldCA9IC1FQlVTWSwgZWxhcHNlZCA9IDA7XG5AQCAtMTk1OCw5ICYjNDM7MjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRtc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpO1xuIFx0XHRlbGFwc2VkICYjNDM7PSBBUF9SRVNFVF9JTlRFUlZBTDtcbiBcdFx0c3RhdHVzID0gYXBfdGFwcShxLVx1MDAzZWFwcW4sIE5VTEwpO1xuLVx0XHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXHUwMDNlYXBxbiwgXHUwMDI2c3RhdHVzKTtcbi1cdFx0aWYgKHJldCA9PSAtRUlPKVxuJiM0MztcdFx0cmV0ID0gYXBxX3N0YXR1c19jaGVjayhxLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtRUlPKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRBUFEgcmV0dXJuZWQgYW4gaW52YWxpZCByZXNwb25zZSBjb2RlLiBUaGlzXG4mIzQzO1x0XHRcdCAqIGluZGljYXRlcyBhIGhhcmR3YXJlIG9yIGZpcm13YXJlIGJ1ZzsgdGhlIHF1ZXVlXG4mIzQzO1x0XHRcdCAqIGNhbm5vdCBnZW5lcmF0ZSBBUCBpbnRlcnJ1cHRzIG9yIERNQS13cml0ZSB0byB0aGVcbiYjNDM7XHRcdFx0ICogTklCLCBzbyBmcmVlIHRoZSBBUUlDIHJlc291cmNlcyByYXRoZXIgdGhhbiBsZWFrIHRoZW0uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGVsYXBzZWQgXHUwMDNlPSBBUF9SRVNFVF9NQVhfV0FJVCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcbiYjNDM7XHRcdFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXG4mIzQzO1x0XHRcdCAqIHN1Y2Nlc3NmdWxseS4gRnJlZSBBUUlDIHJlc291cmNlcyBhbmQgcmV0dXJuLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXG4mIzQzO1x0XHRcdCAqIGRlY29uZmlndXJlZCBvciBjaGVja3N0b3BwZWQ7IGludGVycnVwdHMgYXJlIG5vdFxuJiM0MztcdFx0XHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcbiYjNDM7XHRcdFx0ICogcXVldWUgY2Fubm90IGdlbmVyYXRlIGludGVycnVwdHMsIHNvIHRoZSBOSUIgcGFnZSBpc1xuJiM0MztcdFx0XHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVikge1xuJiM0MztcdFx0XHRcdGFwcV9yZXNldF9maW5hbGl6ZShxLCBcdTAwMjZzdGF0dXMsIHJldCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRpbWVkIG91dCB3aXRob3V0IGJlaW5nIGFibGUgdG8gdmVyaWZ5IHphcHEgY29tcGxldGVkLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBUaGUgQVFJQyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcXVldWUgLSB0aGUgcGlubmVkXG4mIzQzO1x0XHRcdCAqIHBhZ2UgY29udGFpbmluZyB0aGUgTklCIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLVxuJiM0MztcdFx0XHQgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXRcbiYjNDM7XHRcdFx0ICogZm9yIEFQIGludGVycnVwdCBkZWxpdmVyeSB1bnRpbCB0aGUgcmVzZXQgY29tcGxldGVzO1xuJiM0MztcdFx0XHQgKiBmcmVlaW5nIHRoZSBwaW5uZWQgcGFnZSB3aGlsZSB0aGUgaGFyZHdhcmUgbWF5IHN0aWxsXG4mIzQzO1x0XHRcdCAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGRcbiYjNDM7XHRcdFx0ICogY29ycnVwdCBob3N0IG1lbW9yeS5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmVcbiYjNDM7XHRcdFx0ICogdGVybWluYXRlZCBhbmQgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgSVNDIHJlZ2lzdHJhdGlvblxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGxlYWtlZC4gVGhpcyBpcyBwcmVmZXJhYmxlIHRvIGVpdGhlciBhIHdpbGQgRE1BXG4mIzQzO1x0XHRcdCAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkXG4mIzQzO1x0XHRcdCAqIHRoZSBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2sgbXV0ZXggd2hpY2ggc2VyaWFsaXplcyBhY2Nlc3NcbiYjNDM7XHRcdFx0ICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZFxuJiM0MztcdFx0XHQgKiBoYW5nIGFsbCBndWVzdHMgdG8gd2hpY2ggdGhvc2UgbWRldnMgYXJlIGF0dGFjaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogWmVyb2l6YXRpb24gY291bGQgbm90IGJlIGNvbmZpcm1lZDsgc2V0XG4mIzQzO1x0XHRcdCAqIHJlc2V0X3N0YXR1cyB0byBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUy5cbiYjNDM7XHRcdFx0ICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgdG8gc2lnbmFsIHRoYXQgdGhlIHJlc2V0XG4mIzQzO1x0XHRcdCAqIGRpZCBub3QgY29tcGxldGUsIGFuZCBlbnN1cmVzIHRoYXQgaWYgdGhlIHF1ZXVlXG4mIzQzO1x0XHRcdCAqIGlzIHJlc2V0IGFnYWluLCB0aGUgcmUtaXNzdWUgbG9naWMgaW5cbiYjNDM7XHRcdFx0ICogYXBxX3Jlc2V0X2NoZWNrKCkgd2lsbCByZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHtcbiYjNDM7XHRcdFx0YXBxX3Jlc2V0X2ZpbmFsaXplKHEsIFx1MDAyNnN0YXR1cywgcmV0KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuIFx0XHRcdHByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCxcbiBcdFx0XHRcdFx0ICAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbkBAIC0xOTc1LDExICYjNDM7MjI5MSw3IEBAIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG4gXHRcdFx0ICAgIHJldCA9PSAtRUFHQUlOKSB7XG4gXHRcdFx0XHRzdGF0dXMgPSBhcF96YXBxKHEtXHUwMDNlYXBxbiwgMCk7XG4gXHRcdFx0XHRtZW1jcHkoXHUwMDI2cS1cdTAwM2VyZXNldF9zdGF0dXMsIFx1MDAyNnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpO1xuLVx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChxLVx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxuLVx0XHRcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTE5OTUsMjIgJiM0MzsyMzA3LDI3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfU1RBVEVfQ0hBTkdFX0lOX1BST0dSRVNTOlxuIFx0XHQvKlxuIFx0XHQgKiBMZXQmIzM5O3MgdmVyaWZ5IHdoZXRoZXIgdGhlIFpBUFEgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvbiBhIHdvcmsgcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbiBcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdFdBUk4odHJ1ZSxcbi1cdFx0ICAgICBcJiMzNDtQUUFQL1pBUFEgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSV1XFxuXCYjMzQ7LFxuLVx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgYXJjaGl0ZWN0dXJlIGRlZmluZXMgb25seSB0aGUgcmVzcG9uc2UgY29kZXMgYWJvdmUgYXNcbiYjNDM7XHRcdCAqIHZhbGlkIGZvciBaQVBRLiBBbnkgb3RoZXIgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgYSBoYXJkd2FyZVxuJiM0MztcdFx0ICogb3IgZmlybXdhcmUgYnVnLiBTaW5jZSBhIG1hbGZ1bmN0aW9uaW5nIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZVxuJiM0MztcdFx0ICogQVAgaW50ZXJydXB0cyBvciBETUEtd3JpdGUgdG8gdGhlIE5JQiwgZnJlZSB0aGUgQVFJQyByZXNvdXJjZXNcbiYjNDM7XHRcdCAqIHJhdGhlciB0aGFuIGxlYWsgdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVwb3J0X3phcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuJiM0MztcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDYxLDEyICYjNDM7MjM3OCwyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4gXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXHUwMDNla3ZtKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAobWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIpIHtcbiYjNDM7XHRcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlcik7XG4mIzQzO1x0XHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIpIHtcbiYjNDM7XHRcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIpO1xuJiM0MztcdFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4ge1xuIFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG4gXHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuIFxuIFx0dmZpb19hcF9tZGV2X3Vuc2V0X2t2bShtYXRyaXhfbWRldik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHR2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhtYXRyaXhfbWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXF1ZXN0KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGNvdW50KVxuQEAgLTI0NTcsOCAmIzQzOzI3OTAsOSBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIFx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbi1cdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4gXHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xuJiM0MztcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcbiYjNDM7XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRpZiAobWF0cml4X21kZXYpIHtcbiBcdFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xuQEAgLTI1MzQsNiAmIzQzOzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtXHUwMDNlaW5mby5hcW0pKSB7XG4gXHRcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHF1ZXVlIGlzIG5vIGxvbmdlciBpbiB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uLlxuJiM0MztcdFx0ICogVGhlIGhhcmR3YXJlIGNhbm5vdCBETUEtd3JpdGUgdG8gdGhlIE5JQiwgc28gaXQgaXMgc2FmZVxuJiM0MztcdFx0ICogdG8gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgZGlyZWN0bHkgd2l0aG91dCBpc3N1aW5nIGFcbiYjNDM7XHRcdCAqIFpBUFEuIElmIHRoZSBxdWV1ZSBpcyBub3QgYXNzaWduZWQgdG8gYW4gbWRldixcbiYjNDM7XHRcdCAqIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIGlzIGEgbm8tb3AuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdH1cbiBcbiBkb25lOlxuQEAgLTI1NDEsOCAmIzQzOzI4ODQsOCBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHRcdHZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7XG4gXG4gXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLCBOVUxMKTtcbi1cdGtmcmVlKHEpO1xuIFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xuJiM0MztcdGtmcmVlKHEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNjk3LDExICYjNDM7MzA0MCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGFxcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0XHRcdCAgIEFQX0RPTUFJTlMpO1xuIFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tXHUwMDNlYWRtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKiljdXJfY29uZmlnX2luZm8tXHUwMDNlYWRtLFxuLVx0XHRcdFx0ICAgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRcdFx0ICAgQVBfRE9NQUlOUyk7XG4gXG4gXHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcbkBAIC0yODEyLDcgJiM0MzszMTU1LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sIGFxbV9hZGQsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsXG4tXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfUzM5MCAvIENPTkZJR19WRklPX0FQKSBhbmQgY2Fubm90IGJlIGJ1aWx0IG9yIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDc3YjczYjJjMTQ0ZWY0MDgyZWEzNjBkMTdmMmJjMGI0MDI4NjlhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDg6NDg6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKaW5kZXggOTQwYzBmZjY2OGJlZS4uZDAzNzYzMmRmODBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFICYjMzQ7aW4gdXNlJiMzNDsKIAogI2RlZmluZSBBUF9SRVNFVF9JTlRFUlZBTAkJMjAJLyogUmVzZXQgc2xlZXAgaW50ZXJ2YWwgKDIwbXMpCQkqLwomIzQzOyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVQJCTIwMDAJLyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKQkqLwogCiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7CiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7CkBAIC0yMjYsMjcgJiM0MzsyMjcsOTAgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKAogfQogCiAvKioKLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzCi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlcgotICoKLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS4KLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLgotICogUmV0dXJucyBpZiBhcF90YXBxIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgotICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuCiYjNDM7ICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlCiYjNDM7ICoKJiM0MzsgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVIKJiM0MzsgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuCiYjNDM7ICoKJiM0MzsgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGEKJiM0MzsgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC4KJiM0MzsgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGQKJiM0MzsgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqIC0gMAkJaWYgdGhlIElSIGJpdCBpcyBjbGVhciAoaS5lLiwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQpLgomIzQzOyAqCiYjNDM7ICogLSAtRU5PREVWCWlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsCiYjNDM7ICoJCWlzIGRlY29uZmlndXJlZCwgb3IgaXMgY2hlY2tzdG9wcGVkIChpLmUuLCBub3Qgb3BlcmF0aW9uYWwpLgomIzQzOyAqCiYjNDM7ICogLSAtRVRJTUVET1VUCXRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X3RhcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O21hdHJpeF9tZGV2KQomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkgICAgICYjMzQ7UFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzOwllbHNlCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksIHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X2lycWNsZWFyX3RpbWVvdXQoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O21hdHJpeF9tZGV2KQomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkgICAgICYjMzQ7UFFBUChUQVBRKSB0aW1lZCBvdXQgd2FpdGluZyBmb3IgSVJRIGNsZWFyIG9uICUwMnguJTA0eDogcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzOwllbHNlCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UFFBUChUQVBRKSB0aW1lZCBvdXQgd2FpdGluZyBmb3IgSVJRIGNsZWFyIG9uICUwMnguJTA0eDogcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksIHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpCiYjNDM7ewomIzQzOwlpZiAocS0mZ3Q7bWF0cml4X21kZXYpCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGRpc2FibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pLCByYyk7CiYjNDM7CWVsc2UKJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtQUUFQKEFRSUMpIGRpc2FibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfemFwcV9yYyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpCiYjNDM7ewomIzQzOwlpZiAocS0mZ3Q7bWF0cml4X21kZXYpCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pLCByYyk7CiYjNDM7CWVsc2UKJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiB7CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7CiAJaW50IHJldHJ5ID0gNTsKIAogCWRvIHsKLQkJc3RhdHVzID0gYXBfdGFwcShhcHFuLCBOVUxMKTsKJiM0MzsJCXN0YXR1cyA9IGFwX3RhcHEocS0mZ3Q7YXBxbiwgTlVMTCk7CiAJCXN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHsKIAkJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CiAJCWNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6CiAJCQlpZiAoIXN0YXR1cy5pcnFfZW5hYmxlZCkKLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiAwOwogCQkJZmFsbHRocm91Z2g7CiAJCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKIAkJCW1zbGVlcCgyMCk7CkBAIC0yNTUsMTQgJiM0MzszMTksMTQgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbikKIAkJY2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6CiAJCWNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOgogCQlkZWZhdWx0OgotCQkJV0FSTl9PTkNFKDEsICYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogJTA0eFxuJiMzNDssIF9fZnVuY19fLAotCQkJCSAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pOwotCQkJcmV0dXJuOwomIzQzOwkJCXJlcG9ydF90YXBxX3JjKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0gd2hpbGUgKC0tcmV0cnkpOwogCi0JV0FSTl9PTkNFKDEsICYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XG4mIzM0OywKLQkJICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pOwomIzQzOwlyZXBvcnRfaXJxY2xlYXJfdGltZW91dChxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwogfQogCiAvKioKQEAgLTI4OSwyMCAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiB9CiAKIC8qKgotICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0Ci0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWUKJiM0MzsgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZQomIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZQomIzQzOyAqCiYjNDM7ICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3MKJiM0MzsgKiAoQVBfUkVTUE9OU0VfTk9STUFMIG9yIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEKSwgcG9sbHMgdmlhCiYjNDM7ICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHVudGlsIHRoZSBJUiBiaXQgaXMgY29uZmlybWVkIGNsZWFyIGJlZm9yZQomIzQzOyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXMKJiM0MzsgKiBuZWNlc3NhcnkgYmVjYXVzZSBBUUlDIGRpc2FibGUgaXMgYXN5bmNocm9ub3VzOiBmcmVlaW5nIHRoZSBOSUIgYmVmb3JlIElSPTAKJiM0MzsgKiBpcyBjb25maXJtZWQgcmlza3MgYSB3aWxkIERNQSB3cml0ZSB0byBhIGZyZWVkIGhvc3QgcGFnZS4KICAqCi0gKiBVc2VzIGFwX2FxaWMgdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0aW9uIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHJlc2V0Ci0gKiBpbiBwcm9ncmVzcyBvciBJUlEgZGlzYWJsZSBjb21tYW5kIGFscmVhZHkgcHJvY2VlZGVkOiBjYWxscwotICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHRvIGNoZWNrIGZvciB0aGUgSVJRIGJpdCB0byBiZSBjbGVhcgotICogYW5kIGNhbGxzIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIHRvIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkCi0gKiB3aXRoIHRoZSBBUCBpbnRlcnJ1cHQgaGFuZGxpbmcuCiYjNDM7ICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXMKJiM0MzsgKiBpbiBwcm9ncmVzcy4KICAqCi0gKiBJbiB0aGUgY2FzZSB0aGUgQVAgaXMgYnVzeSwgb3IgYSByZXNldCBpcyBpbiBwcm9ncmVzcywKLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy4KJiM0MzsgKiBJZiB0aGUgSVIgYml0IGNhbm5vdCBiZSBjb25maXJtZWQgY2xlYXIgKHRpbWVvdXQpLCB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0CiYjNDM7ICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlCiYjNDM7ICogYWxsb2NhdG9yLCBhIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwgYWRkcmVzcyB3b3VsZAomIzQzOyAqIGNvcnJ1cHQgbWVtb3J5IGJlbG9uZ2luZyB0byBhIG5ldyBvd25lciDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkIGNyYXNoCiYjNDM7ICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuCiAgKgotICogUmV0dXJucyBpZiBhcF9hcWljIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgomIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSwKJiM0MzsgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvCiYjNDM7ICogdGhlIE5JQi4KICAqCiAgKiBSZXR1cm46ICZhbXA7c3RydWN0IGFwX3F1ZXVlX3N0YXR1cwogICovCkBAIC0zMTAsMzQgJiM0MzszODIsODcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIHsKIAl1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7Ci0JaW50IHJldHJpZXMgPSA1OwomIzQzOwlpbnQgcmV0cmllcyA9IDUsIHJldDsKIAogCWRvIHsKIAkJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIDApOwogCQlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJCWNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6CiAJCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgotCQkJdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLSZndDthcHFuKTsKLQkJCWdvdG8gZW5kX2ZyZWU7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzCiYjNDM7CQkJICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGwKJiM0MzsJCQkgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0CiYjNDM7CQkJICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZAomIzQzOwkJCSAqIGJlZm9yZSBwcm9jZWVkaW5nLgomIzQzOwkJCSAqLwomIzQzOwkJCXJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocSk7CiYjNDM7CQkJaWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCQlnb3RvIGVuZF9mcmVlOwomIzQzOwkJCS8qCiYjNDM7CQkJICogVGltZWQgb3V0IHdhaXRpbmcgdG8gY29uZmlybSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KJiM0MzsJCQkgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5CiYjNDM7CQkJICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yCiYjNDM7CQkJICogcmV1c2UgdGhlIE5JQiB3aGlsZSBoYXJkd2FyZSBjYW4gc3RpbGwgd3JpdGUgdG8gaXQuCiYjNDM7CQkJICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pYwomIzQzOwkJCSAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpcwomIzQzOwkJCSAqIHNpZ25hbHMgdG8gdGhlIGd1ZXN0IHRoYXQgdGhlIHJlc2V0IG9wZXJhdGlvbiBkaWQgbm90CiYjNDM7CQkJICogY29tcGxldGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCkgewomIzQzOwkJCQltZW1zZXQoJmFtcDtzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKJiM0MzsJCQkJc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBlbmRfZmFpbDsKIAkJY2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzoKIAkJY2FzZSBBUF9SRVNQT05TRV9CVVNZOgomIzQzOwkJY2FzZSBBUF9SRVNQT05TRV9TVEFURV9DSEFOR0VfSU5fUFJPR1JFU1M6CiAJCQltc2xlZXAoMjApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6CiAJCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgogCQljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKJiM0MzsJCQkvKiBBUCBub3Qgb3BlcmF0aW9uYWw7IG5vIGZ1cnRoZXIgaW50ZXJydXB0cyBwb3NzaWJsZSAqLwomIzQzOwkJCXJlcG9ydF9hcWljX2Rpc2FibGVfZXJyb3IocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwomIzQzOwkJCWdvdG8gZW5kX2ZyZWU7CiAJCWNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTOgomIzQzOwkJY2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0dJU0E6CiYjNDM7CQljYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOgomIzQzOwkJY2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6CiAJCWRlZmF1bHQ6Ci0JCQkvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi8KLQkJCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAotCQkJCSAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwotCQkJZ290byBlbmRfZnJlZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZAomIzQzOwkJCSAqIGFuZCB0aGUgaGFyZHdhcmUgc3RpbGwgaG9sZHMgdGhlIE5JQiBhZGRyZXNzLiBEbyBub3QKJiM0MzsJCQkgKiBmcmVlIHJlc291cmNlcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJCQlnb3RvIGVuZF9mYWlsOwogCQl9CiAJfSB3aGlsZSAocmV0cmllcy0tKTsKIAotCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAotCQkgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CiYjNDM7ZW5kX2ZhaWw6CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlCiYjNDM7CSAqIGludGVycnVwdHMsIG9yIGJlY2F1c2UgSVI9MCBjb3VsZCBub3QgYmUgY29uZmlybWVkLiBJbiBlaXRoZXIgY2FzZQomIzQzOwkgKiB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0IElTQyBjYW5ub3QgYmUgZnJlZWQ6IGhhcmR3YXJlIG1heSBzdGlsbCB3cml0ZQomIzQzOwkgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkCiYjNDM7CSAqIHRvIGEgbmV3IG93bmVyLiBBIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwKJiM0MzsJICogYWRkcmVzcyB3b3VsZCBjb3JydXB0IHRoZSBuZXcgb3duZXImIzM5O3MgbWVtb3J5IOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQKJiM0MzsJICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlCiYjNDM7CSAqIHRoZXJlZm9yZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiBzdGF0dXM7CiYjNDM7CiBlbmRfZnJlZToKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsCiYjNDM7CSAqIG9yIGJlY2F1c2UgdGhlIHF1ZXVlIGlzIG5vdCBvcGVyYXRpb25hbCBvciBub3QgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlCiYjNDM7CSAqIGludGVycnVwdHMgY2FuIG5vdCBiZSBwcm9jZXNzZWQsIHNvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIC0gdGhlIHBpbm5lZCBOSUIKJiM0MzsJICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGwKJiM0MzsJICogbm90IGJlIGxlYWtlZC4KJiM0MzsJICovCiAJdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00MDEsMjIgJiM0Mzs1MjYsMjkgQEAgc3RhdGljIGludCBlbnN1cmVfbmliX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpCiB9CiAKIC8qKgotICogdmZpb19hcF9pcnFfZW5hYmxlIC0gRW5hYmxlIEludGVycnVwdGlvbiBmb3IgYSBBUFFOCiYjNDM7ICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0CiAgKgotICogQHE6CSB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVycwomIzQzOyAqIEBxOgkgdGhlIHZmaW9fYXBfcXVldWUgZm9yIHdoaWNoIGludGVycnVwdHMgYXJlIHRvIGJlIGVuYWJsZWQKICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZQotICogQHZjcHU6IHRoZSB2Y3B1IG9iamVjdCBjb250YWluaW5nIHRoZSByZWdpc3RlcnMgc3BlY2lmeWluZyB0aGUgcGFyYW1ldGVycwotICoJICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uCiYjNDM7ICogQHZjcHU6IHRoZSB2Y3B1IHdob3NlIHJlZ2lzdGVycyBjb250YWluIHRoZSBQUUFQKEFRSUMpIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGEKJiM0MzsgKiBob3N0IElTQywgYW5kIHJlaXNzdWVzIFBRQVAoQVFJQykgd2l0aCB0aGUgdHJhbnNsYXRlZCBob3N0LWFic29sdXRlIE5JQgomIzQzOyAqIGFkZHJlc3MgYW5kIGhvc3QgSVNDIG9uIGJlaGFsZiBvZiB0aGUgZ3Vlc3QuCiAgKgotICogUGluIHRoZSBOSUIgc2F2ZWQgaW4gKnEKLSAqIFJlZ2lzdGVyIHRoZSBndWVzdCBJU0MgdG8gR0lCIGludGVyZmFjZSBhbmQgcmV0cmlldmUgdGhlCi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQwomIzQzOyAqIFRoZSBjb25kaXRpb24gY29kZSBhbmQgQVAtcXVldWUgc3RhdHVzIHdvcmQgcmV0dXJuZWQgYnkgUFFBUChBUUlDKSBhcmUKJiM0MzsgKiByZWZsZWN0ZWQgYmFjayB0byB0aGUgZ3Vlc3QgYXMtaXMuIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWwKJiM0MzsgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LgogICoKLSAqIHN0YXR1cy5yZXNwb25zZV9jb2RlIG1heSBiZSBzZXQgdG8gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGluIGNhc2UgdGhlCi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC4KJiM0MzsgKiBSZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGJhc2VkIHNvbGVseSBvbiB3aGV0aGVyIGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOgomIzQzOyAqIC0gQVBfUkVTUE9OU0VfTk9STUFMIChDQz0wKTogaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI7IHRoZSBvbGQgcGlubmVkCiYjNDM7ICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuCiYjNDM7ICogLSBBbGwgb3RoZXIgcmVzcG9uc2VzOiBoYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQjsgdGhlIG5ld2x5IHBpbm5lZAomIzQzOyAqICAgcGFnZSBhbmQgcmVnaXN0ZXJlZCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgcHJldmlvdXNseSBzYXZlZCByZXNvdXJjZXMgYXJlCiYjNDM7ICogICBsZWZ0IGludGFjdC4KICAqCi0gKiBPdGhlcndpc2UgcmV0dXJuIHRoZSBhcF9xdWV1ZV9zdGF0dXMgcmV0dXJuZWQgYnkgdGhlIGFwX2FxaWMoKSwKLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LgomIzQzOyAqIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpcyByZXR1cm5lZCBpZiB2ZmlvX3Bpbl9wYWdlcygpIG9yCiYjNDM7ICoga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcigpIGZhaWxzIGJlZm9yZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBpcyBpc3N1ZWQuCiAgKgogICogUmV0dXJuOiAmYW1wO3N0cnVjdCBhcF9xdWV1ZV9zdGF0dXMKICAqLwpAQCAtNDI4LDE3ICYjNDM7NTYwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwKIAlzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9OwogCXN0cnVjdCBrdm1fczM5MF9naXNhICpnaXNhOwogCXN0cnVjdCBwYWdlICpoX3BhZ2U7Ci0JaW50IG5pc2M7CiYjNDM7CWludCBuaXNjLCByZXQ7CiAJc3RydWN0IGt2bSAqa3ZtOwogCXBoeXNfYWRkcl90IGhfbmliOwogCWRtYV9hZGRyX3QgbmliOwotCWludCByZXQ7CiAKIAkvKiBWZXJpZnkgdGhhdCB0aGUgbm90aWZpY2F0aW9uIGluZGljYXRvciBieXRlIGFkZHJlc3MgaXMgdmFsaWQgKi8KIAlpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgJmFtcDtuaWIpKSB7CiAJCVZGSU9fQVBfREJGX1dBUk4oJiMzNDslczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcbiYjMzQ7LAogCQkJCSBfX2Z1bmNfXywgJmFtcDtuaWIsIHEtJmd0O2FwcW4pOwotCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiBpbnZhbGlkIE5JQiBhZGRyZXNzICVwYWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgJmFtcDtuaWIpOwogCQlzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUzsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CkBAIC00NTMsNyAmIzQzOzU4NywxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsCiAJCVZGSU9fQVBfREJGX1dBUk4oJiMzNDslczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCwmIzM0OwogCQkJCSAmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XG4mIzM0OywKIAkJCQkgX19mdW5jX18sIHJldCwgJmFtcDtuaWIsIHEtJmd0O2FwcW4pOwotCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiB2ZmlvX3Bpbl9wYWdlcyBmYWlsZWQgcmM9JWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmV0KTsKIAkJc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7CiAJCXJldHVybiBzdGF0dXM7CiAJfQpAQCAtNDc2LDcgJiM0Mzs2MTMsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLAogCWlmIChuaXNjICZsdDsgMCkgewogCQlWRklPX0FQX0RCRl9XQVJOKCYjMzQ7JXM6IGdpc2MgcmVnaXN0cmF0aW9uIGZhaWxlZDogbmlzYz0lZCwgaXNjPSVkLCBhcHFuPSUjMDR4XG4mIzM0OywKIAkJCQkgX19mdW5jX18sIG5pc2MsIGlzYywgcS0mZ3Q7YXBxbik7Ci0KJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJICAgICAmIzM0O1BRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgcmVnaXN0cmF0aW9uIGZhaWxlZCByYz0lZCBpc2M9JWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgbmlzYywgaXNjKTsKIAkJdmZpb191bnBpbl9wYWdlcygmYW1wO3EtJmd0O21hdHJpeF9tZGV2LSZndDt2ZGV2LCBuaWIsIDEpOwogCQlzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUzsKIAkJcmV0dXJuIHN0YXR1czsKQEAgLTQ4OSwyNCAmIzQzOzYyOSwzOCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsCiAJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIGhfbmliKTsKIAlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6Ci0JCS8qIFNlZSBpZiB3ZSBkaWQgY2xlYXIgb2xkZXIgSVJRIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kCiYjNDM7CQkgKiBndWVzdCBJU0MgYXJlIG5vIGxvbmdlciB1c2VkIGJ5IGhhcmR3YXJlIGFuZCBjYW4gYmUgZnJlZWQuCiYjNDM7CQkgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uCiYjNDM7CQkgKgomIzQzOwkJICogSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbCBJUj0xKSBpcyB0aGUKJiM0MzsJCSAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlCiYjNDM7CQkgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZQomIzQzOwkJICogZ3Vlc3QgdG8gcmVzcG9uZCB0byB0aGUgUFFBUC1BUUlDIGluc3RydWN0aW9uLgomIzQzOwkJICovCiAJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJcS0mZ3Q7c2F2ZWRfaW92YSA9IG5pYjsKIAkJcS0mZ3Q7c2F2ZWRfaXNjID0gaXNjOwogCQlicmVhazsKLQljYXNlIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEOgotCQkvKiBXZSBjb3VsZCBub3QgbW9kaWZ5IElSUSBzZXR0aW5nczogY2xlYXIgbmV3IGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZQomIzQzOwkJICogcHJldmlvdXNseSBzYXZlZCBOSUIgYW5kIGd1ZXN0IElTQyByZW1haW4gYWN0aXZlIGFuZCBtdXN0CiYjNDM7CQkgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkCiYjNDM7CQkgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC4KJiM0MzsJCSAqLwogCQlyZXQgPSBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIoa3ZtLCBpc2MpOwotCQlpZiAocmV0KQomIzQzOwkJaWYgKHJldCkgewogCQkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxuJiMzNDssCiAJCQkJCSBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtJmd0O2FwcW4pOwomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiBHSVNDIHVucmVnaXN0ZXIgZmFpbGVkIHJjPSVkIGlzYz0lZFxuJiMzNDssCiYjNDM7CQkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkJICAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksIHJldCwgaXNjKTsKJiM0MzsJCX0KIAkJdmZpb191bnBpbl9wYWdlcygmYW1wO3EtJmd0O21hdHJpeF9tZGV2LSZndDt2ZGV2LCBuaWIsIDEpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl93YXJuKCYjMzQ7JXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcbiYjMzQ7LCBfX2Z1bmNfXywgcS0mZ3Q7YXBxbiwKLQkJCXN0YXR1cy5yZXNwb25zZV9jb2RlKTsKLQkJdmZpb19hcF9pcnFfZGlzYWJsZShxKTsKLQkJYnJlYWs7CiAJfQogCiAJaWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkgewpAQCAtNTE3LDYgJiM0Mzs2NzEsMTEgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLAogCQkJCSBhcWljX2dpc2Euem9uZSwgYXFpY19naXNhLmlyLCBhcWljX2dpc2EuZ2lzYywKIAkJCQkgYXFpY19naXNhLmdmLCBhcWljX2dpc2EuZ2lzYSwgYXFpY19naXNhLmlzYywKIAkJCQkgcS0mZ3Q7YXBxbik7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XG4mIzM0OywKJiM0MzsJCQkJICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJICAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC02MDEsNyAmIzQzOzc2MCw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtlY2EgJmFtcDsgRUNBX0FJVikpIHsKIAkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBBSVYgZmFjaWxpdHkgbm90IGluc3RhbGxlZDogYXBxbj0weCUwNHgsIGVjYT0weCUwNHhcbiYjMzQ7LAogCQkJCSBfX2Z1bmNfXywgYXBxbiwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2VjYSk7Ci0KJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IEFJViBmYWNpbGl0eSBub3QgaW5zdGFsbGVkXG4mIzM0OywKJiM0MzsJCQkJICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC02MTAsNyAmIzQzOzc3MCw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2spIHsKIAkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBQUUFQKEFRSUMpIGhvb2sgbm90IHJlZ2lzdGVyZWQgd2l0aCB0aGUgdmZpb19hcCBkcml2ZXI6IGFwcW49MHglMDR4XG4mIzM0OywKIAkJCQkgX19mdW5jX18sIGFwcW4pOwotCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyXG4mIzM0OywKJiM0MzsJCQkJICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC02MjMsNiAmIzQzOzc4NCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlWRklPX0FQX0RCRl9XQVJOKCYjMzQ7JXM6IG1kZXYgJTA4bHgtJTA0bHgtJTA0bHgtJTA0bHgtJTA0bHglMDhseCBub3QgaW4gdXNlOiBhcHFuPTB4JTA0eFxuJiMzNDssCiAJCQkJIF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSwKIAkJCQkgdXVpZFszXSwgdXVpZFs0XSwgdXVpZFs1XSwgYXBxbik7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IG1kZXYgbm90IGluIHVzZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTYzMSwxMSAmIzQzOzc5NSwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxuJiMzNDssCiAJCQkJIF9fZnVuY19fLCBBUF9RSURfQ0FSRChhcHFuKSwKIAkJCQkgQVBfUUlEX1FVRVVFKGFwcW4pKTsKJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KG1hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJICAgICAmIzM0O1BRQVAoQVFJQykgZm9yICUwMnguJTA0eDogcXVldWUgbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlzdGF0dXMgPSB2Y3B1LSZndDtydW4tJmd0O3MucmVncy5ncHJzWzFdOwotCiAJLyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KIAlpZiAoKHN0YXR1cyAmZ3Q7Jmd0OyAoNjMgLSAxNikpICZhbXA7IDB4MDEpCiAJCXFzdGF0dXMgPSB2ZmlvX2FwX2lycV9lbmFibGUocSwgc3RhdHVzICZhbXA7IDB4MDcsIHZjcHUpOwpAQCAtNjkyLDE0ICYjNDM7ODU4LDE0IEBAIHN0YXRpYyBib29sIF9xdWV1ZV9wYXNzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIAlpZiAoIXEpCiAJCXJldHVybiBmYWxzZTsKIAotCXN3aXRjaCAocS0mZ3Q7cmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHsKLQljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKLQljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKLQljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKLQkJcmV0dXJuIHRydWU7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KJiM0MzsJLyoKJiM0MzsJICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnkKJiM0MzsJICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXMKJiM0MzsJICogaW5kaWNhdGVkIGJ5IHJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCAoMCkuCiYjNDM7CSAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZQomIzQzOwkgKiB0byB0aGUgZ3Vlc3QuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcS0mZ3Q7cmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMOwogfQogCiAvKgpAQCAtMTQxMCw3ICYjNDM7MTU3Niw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAogewogCURFQ0xBUkVfQklUTUFQKGFwcWlzLCBBUF9ET01BSU5TKTsKIAotCWJpdG1hcF96ZXJvKGFwcWlzLCBBUF9ERVZJQ0VTKTsKJiM0MzsJYml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpOwogCXNldF9iaXRfaW52KGFwcWksIGFwcWlzKTsKIAl2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW5zKG1hdHJpeF9tZGV2LCBhcHFpcyk7CiB9CkBAIC0xOTE1LDM3ICYjNDM7MjA4MSwxMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX2ZpbmRfcXVldWUoaW50IGFwcW4pCiAJcmV0dXJuIHE7CiB9CiAKLXN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQomIzQzO3N0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwKJiM0MzsJCQkgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzLSZndDtyZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CiYjNDM7CQkvKgomIzQzOwkJICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzCiYjNDM7CQkgKiBiZWVuIGluaXRpYXRlZC4gVGhlIGZvbGxvd2luZyBiaXQgc2V0dGluZ3MgaW4gdGhlIHN0YXR1cwomIzQzOwkJICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZQomIzQzOwkJICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGF0dXMtJmd0O3F1ZXVlX2VtcHR5ICZhbXA7JmFtcDsgIXN0YXR1cy0mZ3Q7cmVwbGllc193YWl0aW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RhdHVzLSZndDtpcnFfZW5hYmxlZCAmYW1wOyZhbXA7ICFzdGF0dXMtJmd0O2FzeW5jKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqLwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKIAljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKLQkJcmV0dXJuIDA7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIG5vbi1vcGVyYXRpb25hbDogaW50ZXJydXB0cyBhcmUgbm90IHBvc3NpYmxlIHNvCiYjNDM7CQkgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvbgomIzQzOwkJICogY2Fubm90IGJlIGNvbmZpcm1lZCBiZWNhdXNlIGFsbCBzdGF0dXMgYml0cyBhcmUgemVyb2VkIHdoZW4KJiM0MzsJCSAqIHRoZXNlIHJlc3BvbnNlIGNvZGVzIGFyZSByZXR1cm5lZCDigJQgdGhlcmUgaXMgbm8gd2F5IHRvCiYjNDM7CQkgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuCiYjNDM7CQkgKiB6ZXJvaXplZC4gUmV0dXJuIC1FTk9ERVYgdG8gc2lnbmFsIHRoYXQgQVFJQyByZXNvdXJjZXMgc2hvdWxkCiYjNDM7CQkgKiBiZSBmcmVlZCBidXQgdGhhdCB6ZXJvaXphdGlvbiBoYXMgbm90IGJlZW4gY29uZmlybWVkLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgotCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHJlc2V0IGlzIGluIHByb2dyZXNzLiBJdCBtYXkgYmUgdGhlIHJlc2V0IHdlIGlzc3VlZCBvciBvbmUKJiM0MzsJCSAqIGlzc3VlZCBwcmlvciB0byBvdXJzOyBlaXRoZXIgd2F5LCBvbmNlIGl0IGNvbXBsZXRlcyB0aGUgcXVldWUKJiM0MzsJCSAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy4KJiM0MzsJCSAqLwogCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwljYXNlIEFQX1JFU1BPTlNFX0JVU1k6CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91cgomIzQzOwkJICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOgogCWNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOgogCQkvKgomIzQzOwkJICogQVBfUkVTUE9OU0VfQlVTWToKJiM0MzsJCSAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXIKJiM0MzsJCSAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRQomIzQzOwkJICogQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOgogCQkgKiBUaGVzZSBhc3luY2hyb25vdXMgcmVzcG9uc2UgY29kZXMgaW5kaWNhdGUgYSBQUUFQKEFBUFEpCiAJCSAqIGluc3RydWN0aW9uIHRvIGFzc29jaWF0ZSBhIHNlY3JldCB3aXRoIHRoZSBndWVzdCBmYWlsZWQuIEFsbAogCQkgKiBzdWJzZXF1ZW50IEFQIGluc3RydWN0aW9ucyB3aWxsIGVuZCB3aXRoIHRoZSBhc3luY2hyb25vdXMKLQkJICogcmVzcG9uc2UgY29kZSB1bnRpbCB0aGUgQVAgcXVldWUgaXMgcmVzZXQ7IHNvLCBsZXQmIzM5O3MgcmV0dXJuCi0JCSAqIGEgdmFsdWUgaW5kaWNhdGluZyBhIHJlc2V0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi4KJiM0MzsJCSAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0LiBSZS1pc3N1ZSB0aGUgWkFQUS4KIAkJICovCiAJCXJldHVybiAtRUFHQUlOOwomIzQzOwogCWRlZmF1bHQ6Ci0JCVdBUk4odHJ1ZSwKLQkJICAgICAmIzM0O2ZhaWxlZCB0byB2ZXJpZnkgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4OiBUQVBRIHJjPSV1XG4mIzM0OywKLQkJICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pLAotCQkgICAgIHN0YXR1cy0mZ3Q7cmVzcG9uc2VfY29kZSk7CiYjNDM7CQlyZXBvcnRfdGFwcV9yYyhxLCBzdGF0dXMtJmd0O3Jlc3BvbnNlX2NvZGUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O3NhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEIHx8IHEtJmd0O3NhdmVkX2lvdmEpIHsKJiM0MzsJCWlmIChxLSZndDttYXRyaXhfbWRldikgewomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJCSAgICAgJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSAmYW1wOyBHSVNDKSB0byBwcmV2ZW50IGhvc3QgY3Jhc2hcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlICZhbXA7IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxuJiMzNDssCiYjNDM7CQkJCQkgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCQkgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChxLSZndDttYXRyaXhfbWRldikgewomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJCSAgICAgJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XG4mIzM0OywKJiM0MzsJCQkJCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XG4mIzM0OywKJiM0MzsJCQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbikpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogI2RlZmluZSBXQUlUX01TRyAmIzM0O1dhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpJiMzNDsKIAomIzQzOy8qKgomIzQzOyAqIGFwcV9yZXNldF9maW5hbGl6ZSAtIHN0b3JlIGZpbmFsIFRBUFEgc3RhdHVzIGFuZCBmcmVlIEFRSUMgcmVzb3VyY2VzLgomIzQzOyAqIEBxOiAgICAgIHRoZSB2ZmlvX2FwX3F1ZXVlCiYjNDM7ICogQHN0YXR1czogdGhlIGZpbmFsIEFQIHF1ZXVlIHN0YXR1cyByZXR1cm5lZCBieSBQUUFQKFRBUFEpCiYjNDM7ICogQHJldDogICAgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGFwcV9zdGF0dXNfY2hlY2soKQomIzQzOyAqCiYjNDM7ICogQ29waWVzIHRoZSBmdWxsIFRBUFEgc3RhdHVzIHdvcmQgdG8gcS0mZ3Q7cmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1cwomIzQzOyAqIGJpdHMgcmVmbGVjdCB0aGUgY29uZmlybWVkIGVuZCBzdGF0ZSBvZiB0aGUgcXVldWUuIElmIHJldCA9PSAwLAomIzQzOyAqIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYW5kIHRoZSByZXNwb25zZSBjb2RlIGlzIG92ZXJyaWRkZW4gd2l0aAomIzQzOyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yCiYjNDM7ICogcmV0ID09IC1FTk9ERVYgKERFQ09ORklHVVJFRCBvciBDSEVDS1NUT1BQRUQpLCB0aGUgbm9uLXplcm8gcmVzcG9uc2UKJiM0MzsgKiBjb2RlIGlzIGxlZnQgaW50YWN0IHNvIF9xdWV1ZV9wYXNzYWJsZSgpIGNvcnJlY3RseSByZXR1cm5zIGZhbHNlLgomIzQzOyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGFwcV9yZXNldF9maW5hbGl6ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJbWVtY3B5KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcS0mZ3Q7cmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9OT1JNQUw7CiYjNDM7CWlmIChxLSZndDtzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCkKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogewogCWludCByZXQgPSAtRUJVU1ksIGVsYXBzZWQgPSAwOwpAQCAtMTk1OCw5ICYjNDM7MjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogCQltc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpOwogCQllbGFwc2VkICYjNDM7PSBBUF9SRVNFVF9JTlRFUlZBTDsKIAkJc3RhdHVzID0gYXBfdGFwcShxLSZndDthcHFuLCBOVUxMKTsKLQkJcmV0ID0gYXBxX3N0YXR1c19jaGVjayhxLSZndDthcHFuLCAmYW1wO3N0YXR1cyk7Ci0JCWlmIChyZXQgPT0gLUVJTykKJiM0MzsJCXJldCA9IGFwcV9zdGF0dXNfY2hlY2socSwgJmFtcDtzdGF0dXMpOwomIzQzOwkJaWYgKHJldCA9PSAtRUlPKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUQVBRIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2UgY29kZS4gVGhpcwomIzQzOwkJCSAqIGluZGljYXRlcyBhIGhhcmR3YXJlIG9yIGZpcm13YXJlIGJ1ZzsgdGhlIHF1ZXVlCiYjNDM7CQkJICogY2Fubm90IGdlbmVyYXRlIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZQomIzQzOwkJCSAqIE5JQiwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgcmF0aGVyIHRoYW4gbGVhayB0aGVtLgomIzQzOwkJCSAqLwomIzQzOwkJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWlmIChlbGFwc2VkICZndDs9IEFQX1JFU0VUX01BWF9XQUlUKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHMKJiM0MzsJCQkgKiBpbmRpY2F0ZSB0aGUgYXN5bmMgcG9ydGlvbiBvZiB0aGUgWkFQUSBjb21wbGV0ZWQKJiM0MzsJCQkgKiBzdWNjZXNzZnVsbHkuIEZyZWUgQVFJQyByZXNvdXJjZXMgYW5kIHJldHVybi4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIFF1ZXVlIG5vbi1vcGVyYXRpb25hbCAocmV0ID09IC1FTk9ERVYpOiB0aGUgcXVldWUgaXMKJiM0MzsJCQkgKiBkZWNvbmZpZ3VyZWQgb3IgY2hlY2tzdG9wcGVkOyBpbnRlcnJ1cHRzIGFyZSBub3QKJiM0MzsJCQkgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLgomIzQzOwkJCSAqIFplcm9pemF0aW9uIGNhbm5vdCBiZSBjb25maXJtZWQgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoZQomIzQzOwkJCSAqIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzLCBzbyB0aGUgTklCIHBhZ2UgaXMKJiM0MzsJCQkgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHsKJiM0MzsJCQkJYXBxX3Jlc2V0X2ZpbmFsaXplKHEsICZhbXA7c3RhdHVzLCByZXQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwkJCS8qCiYjNDM7CQkJICogVGltZWQgb3V0IHdpdGhvdXQgYmVpbmcgYWJsZSB0byB2ZXJpZnkgemFwcSBjb21wbGV0ZWQuCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBUaGUgQVFJQyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcXVldWUgLSB0aGUgcGlubmVkCiYjNDM7CQkJICogcGFnZSBjb250YWluaW5nIHRoZSBOSUIgYW5kIHRoZSByZWdpc3RlcmVkIGd1ZXN0IElTQyAtCiYjNDM7CQkJICogY2Fubm90IGJlIGZyZWVkIGhlcmUuIFRoZSBOSUIgaXMgdGhlIGFjdGl2ZSBETUEgdGFyZ2V0CiYjNDM7CQkJICogZm9yIEFQIGludGVycnVwdCBkZWxpdmVyeSB1bnRpbCB0aGUgcmVzZXQgY29tcGxldGVzOwomIzQzOwkJCSAqIGZyZWVpbmcgdGhlIHBpbm5lZCBwYWdlIHdoaWxlIHRoZSBoYXJkd2FyZSBtYXkgc3RpbGwKJiM0MzsJCQkgKiB3cml0ZSB0byBpdCB3b3VsZCByZXN1bHQgaW4gYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkCiYjNDM7CQkJICogY29ycnVwdCBob3N0IG1lbW9yeS4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIElmIHRoZSByZXNldCBldmVudHVhbGx5IGNvbXBsZXRlcywgaW50ZXJydXB0cyB3aWxsIGJlCiYjNDM7CQkJICogdGVybWluYXRlZCBhbmQgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgSVNDIHJlZ2lzdHJhdGlvbgomIzQzOwkJCSAqIHdpbGwgYmUgbGVha2VkLiBUaGlzIGlzIHByZWZlcmFibGUgdG8gZWl0aGVyIGEgd2lsZCBETUEKJiM0MzsJCQkgKiB3cml0ZSBvciB3YWl0aW5nIGluZGVmaW5pdGVseTogZmx1c2hfd29yaygpIGNhbGxlcnMgaG9sZAomIzQzOwkJCSAqIHRoZSBtYXRyaXhfZGV2LSZndDttZGV2c19sb2NrIG11dGV4IHdoaWNoIHNlcmlhbGl6ZXMgYWNjZXNzCiYjNDM7CQkJICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZAomIzQzOwkJCSAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFplcm9pemF0aW9uIGNvdWxkIG5vdCBiZSBjb25maXJtZWQ7IHNldAomIzQzOwkJCSAqIHJlc2V0X3N0YXR1cyB0byBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUy4KJiM0MzsJCQkgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBzaWduYWwgdGhhdCB0aGUgcmVzZXQKJiM0MzsJCQkgKiBkaWQgbm90IGNvbXBsZXRlLCBhbmQgZW5zdXJlcyB0aGF0IGlmIHRoZSBxdWV1ZQomIzQzOwkJCSAqIGlzIHJlc2V0IGFnYWluLCB0aGUgcmUtaXNzdWUgbG9naWMgaW4KJiM0MzsJCQkgKiBhcHFfcmVzZXRfY2hlY2soKSB3aWxsIHJlLWlzc3VlIHRoZSBaQVBRLgomIzQzOwkJCSAqLwomIzQzOwkJCXEtJmd0O3Jlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJaWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHsKJiM0MzsJCQlhcHFfcmVzZXRfZmluYWxpemUocSwgJmFtcDtzdGF0dXMsIHJldCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQlpZiAocmV0ID09IC1FQlVTWSkgewogCQkJcHJfbm90aWNlX3JhdGVsaW1pdGVkKFdBSVRfTVNHLCBlbGFwc2VkLAogCQkJCQkgICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKQEAgLTE5NzUsMTEgJiM0MzsyMjkxLDcgQEAgc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqcmVzZXRfd29yaykKIAkJCSAgICByZXQgPT0gLUVBR0FJTikgewogCQkJCXN0YXR1cyA9IGFwX3phcHEocS0mZ3Q7YXBxbiwgMCk7CiAJCQkJbWVtY3B5KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAmYW1wO3N0YXR1cywgc2l6ZW9mKHN0YXR1cykpOwotCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJaWYgKHEtJmd0O3NhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKQotCQkJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKLQkJCWJyZWFrOwogCQl9CiAJfQogfQpAQCAtMTk5NSwyMiAmIzQzOzIzMDcsMjcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQogCXN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHsKIAljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKIAljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgotCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKIAljYXNlIEFQX1JFU1BPTlNFX1NUQVRFX0NIQU5HRV9JTl9QUk9HUkVTUzoKIAkJLyoKIAkJICogTGV0JiMzOTtzIHZlcmlmeSB3aGV0aGVyIHRoZSBaQVBRIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb24gYSB3b3JrIHF1ZXVlLgogCQkgKi8KIAkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmFtcDtxLSZndDtyZXNldF93b3JrKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6CiAJY2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6CiAJY2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6CiAJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJV0FSTih0cnVlLAotCQkgICAgICYjMzQ7UFFBUC9aQVBRIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0ldVxuJiMzNDssCi0JCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwKLQkJICAgICBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIG9ubHkgdGhlIHJlc3BvbnNlIGNvZGVzIGFib3ZlIGFzCiYjNDM7CQkgKiB2YWxpZCBmb3IgWkFQUS4gQW55IG90aGVyIHJlc3BvbnNlIGNvZGUgaW5kaWNhdGVzIGEgaGFyZHdhcmUKJiM0MzsJCSAqIG9yIGZpcm13YXJlIGJ1Zy4gU2luY2UgYSBtYWxmdW5jdGlvbmluZyBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGUKJiM0MzsJCSAqIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZSBOSUIsIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzCiYjNDM7CQkgKiByYXRoZXIgdGhhbiBsZWFrIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCXJlcG9ydF96YXBxX3JjKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiB9CiAKQEAgLTIwNjEsMTIgJiM0MzsyMzc4LDI4IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldikKIAlyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtJmd0O2t2bSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQomIzQzO3sKJiM0MzsJaWYgKG1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlcikgewomIzQzOwkJZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlcik7CiYjNDM7CQltYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChtYXRyaXhfbWRldi0mZ3Q7Y2ZnX2NoZ190cmlnZ2VyKSB7CiYjNDM7CQlldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlcik7CiYjNDM7CQltYXRyaXhfbWRldi0mZ3Q7Y2ZnX2NoZ190cmlnZ2VyID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPQogCQljb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTsKIAogCXZmaW9fYXBfbWRldl91bnNldF9rdm0obWF0cml4X21kZXYpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CXZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXF1ZXN0KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGNvdW50KQpAQCAtMjQ1Nyw4ICYjNDM7Mjc5MCw5IEBAIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiAKIAlxLSZndDthcHFuID0gYXBxbjsKIAlxLSZndDtzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEOwotCW1lbXNldCgmYW1wO3EtJmd0O3Jlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtJmd0O3Jlc2V0X3N0YXR1cykpOwogCUlOSVRfV09SSygmYW1wO3EtJmd0O3Jlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7CiYjNDM7CXZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3EtJmd0O3Jlc2V0X3dvcmspOwogCiAJaWYgKG1hdHJpeF9tZGV2KSB7CiAJCXZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTsKQEAgLTI1MzQsNiAmIzQzOzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KQogCSAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LSZndDtpbmZvLmFxbSkpIHsKIAkJdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpOwogCQlmbHVzaF93b3JrKCZhbXA7cS0mZ3Q7cmVzZXRfd29yayk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIG5vIGxvbmdlciBpbiB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uLgomIzQzOwkJICogVGhlIGhhcmR3YXJlIGNhbm5vdCBETUEtd3JpdGUgdG8gdGhlIE5JQiwgc28gaXQgaXMgc2FmZQomIzQzOwkJICogdG8gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgZGlyZWN0bHkgd2l0aG91dCBpc3N1aW5nIGEKJiM0MzsJCSAqIFpBUFEuIElmIHRoZSBxdWV1ZSBpcyBub3QgYXNzaWduZWQgdG8gYW4gbWRldiwKJiM0MzsJCSAqIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIGlzIGEgbm8tb3AuCiYjNDM7CQkgKi8KJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiAKIGRvbmU6CkBAIC0yNTQxLDggJiM0MzsyODg0LDggQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KQogCQl2ZmlvX2FwX3VubGlua19xdWV1ZV9mcl9tZGV2KHEpOwogCiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7YXBkZXYtJmd0O2RldmljZSwgTlVMTCk7Ci0Ja2ZyZWUocSk7CiAJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpOwomIzQzOwlrZnJlZShxKTsKIH0KIAogLyoqCkBAIC0yNjk3LDExICYjNDM7MzA0MCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbywKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FxbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YXFtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FkbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YWRtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAogCWlmIChkb19yZW1vdmUpCiAJCXZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKGFwcmVtLCBhcXJlbSwgY2RyZW0pOwpAQCAtMjgxMiw3ICYjNDM7MzE1NSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCi0JCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CQkJICAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpOwogCiAJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggYW5kIGl0cyBBcmNoaXRlY3R1cmFsIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYGFtZDY0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggdGhhdC4gSSBzZWUgdGhhdCB0aGUgZmlsZSB0b3VjaGVkIGlzIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIGEgYml0IG9mIGEgZmxhZyDigJMgdGhlIGBzMzkwYCBkaXJlY3RvcnkgaW1tZWRpYXRlbHkgc2NyZWFtcyBJQk0gU3lzdGVtLzM5MCwgb3IgczM5MHgsIHdoaWNoIGlzIGRlZmluaXRlbHkgKm5vdCogYGFtZDY0YC4KClNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgaXMgZXZlbiAqcmVsZXZhbnQqIHRvIGBhbWQ2NGAuIElzIGl0IGNvbmRpdGlvbmFsPyBJcyB0aGVyZSBzb21lIGNyb3NzLWFyY2hpdGVjdHVyZSBtYWdpYyBnb2luZyBvbiB0aGF0IEkmIzM5O20gbWlzc2luZz8gVGhlcmUmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBubyBsZWdpdGltYXRlIGNhc2Ugd2hlcmUgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGlsZWQgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZS4KCkkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgdG8gcGlucG9pbnQgZXhhY3RseSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgZ2V0cyBidWlsdCBhbmQgaWYgaXQgY2FuIGV2ZXIgYmUgY29tcGlsZWQgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gczM5MC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgc291cmNlIG9mIHRoZSBhbnN3ZXIuIFNvbWV0aGluZyBzZWVtcyB3cm9uZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9Mzc9dmZpb19hcC1vYmpzIDo9IHZmaW9fYXBfZHJ2Lm8gdmZpb19hcF9vcHMub1xuZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZTozODpvYmotJChDT05GSUdfVkZJT19BUCkgJiM0Mzs9IHZmaW9fYXAub1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo3OiNpZm5kZWYgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo4OiNkZWZpbmUgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTE4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yMC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjIxOiNkZWZpbmUgVkZJT19BUF9EQkZfRVJSKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfRVJSLCAjI19fVkFfQVJHU19fKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MjM6I2RlZmluZSBWRklPX0FQX0RCRl9XQVJOKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI0LVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfV0FSTiwgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNi1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyNzojZGVmaW5lIFZGSU9fQVBfREJGX0RCRyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0RFQlVHLCAjI19fVkFfQVJHU19fKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0zMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjMyOiNlbmRpZiAvKiBWRklPX0FQX0RFQlVHX0ggKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTk6I2RlZmluZSBWRklPX0FQX1JPT1RfTkFNRSBcJiMzNDt2ZmlvX2FwXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA6I2RlZmluZSBWRklPX0FQX0RFVl9OQU1FIFwmIzM0O21hdHJpeFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIxLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6OTE6XHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTE2Olx0ZGV2X3NldF9uYW1lKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslc1wmIzM0OywgVkZJT19BUF9ERVZfTkFNRSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTE3LVx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4MzpcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZ2ZmlvX2FwX2RydiwgVEhJU19NT0RVTEUsIFZGSU9fQVBfRFJWX05BTUUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4NC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXCYjMzQ7cGFzc3Rocm91Z2hcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcJiMzNDtWRklPIEFQIFBhc3N0aHJvdWdoIERldmljZVwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zNDA9c3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDMtXHRcdHJldHVybjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNDQ6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDUtXHQgICAgIVdBUk5fT04oIShxLVx1MDAzZW1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZWt2bSkpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzQ2LVx0XHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2Vrdm0sIHEtXHUwMDNlc2F2ZWRfaXNjKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNDc6XHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDgtXHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTU1NT1zdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU2OS1cdGlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCBcdTAwMjZuaWIpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NTcwOlx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NzEtXHRcdFx0XHQgX19mdW5jX18sIFx1MDAyNm5pYiwgcS1cdTAwM2VhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTg2LVx0ZGVmYXVsdDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1ODc6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTg4LVx0XHRcdFx0IFwmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTMtXHRpZiAobmlzYyBcdTAwM2MgMCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjYxNDpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjE1LVx0XHRcdFx0IF9fZnVuY19fLCBuaXNjLCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY1NC1cdFx0aWYgKHJldCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjY1NTpcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTYtXHRcdFx0XHRcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY2Ni1cdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2Njc6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IFBRQVAoQVFJQykgZmFpbGVkIHdpdGggc3RhdHVzPSUjMDJ4OiBcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NjgtXHRcdFx0XHQgXCYjMzQ7em9uZT0lI3gsIGlyPSUjeCwgZ2lzYz0lI3gsIGY9JSN4LFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NDc9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc2MC1cdGlmICghKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNhIFx1MDAyNiBFQ0FfQUlWKSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc2MTpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxuXCYjMzQ7LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc2Mi1cdFx0XHRcdCBfX2Z1bmNfXywgYXBxbiwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2EpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03NzAtXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc3MTpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03NzItXHRcdFx0XHQgX19mdW5jX18sIGFwcW4pO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODMtXHRcdHZmaW9fYXBfbGVfZ3VpZF90b19iZV91dWlkKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZW1kZXYtXHUwMDNldXVpZCwgdXVpZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzg0Olx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBtZGV2ICUwOGx4LSUwNGx4LSUwNGx4LSUwNGx4LSUwNGx4JTA4bHggbm90IGluIHVzZTogYXBxbj0weCUwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg1LVx0XHRcdFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk0LVx0aWYgKCFxKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzk1Olx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTYtXHRcdFx0XHQgX19mdW5jX18sIEFQX1FJRF9DQVJEKGFwcW4pLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTUyPXN0YXRpYyB2b2lkIHJlcG9ydF9hcWljX3Jlc291cmNlX2xlYWsoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE1My17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE1NDpcdGlmIChxLVx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEIHx8IHEtXHUwMDNlc2F2ZWRfaW92YSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxNTUtXHRcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIxOTU9c3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAwLVx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfTk9STUFMO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyMDE6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAyLVx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MzQ9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfZ2V0X2RldmljZV9pbmZvKHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDQ4LVx0aW5mby5udW1fcmVnaW9ucyA9IDA7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ0OTpcdGluZm8ubnVtX2lycXMgPSBWRklPX0FQX05VTV9JUlFTO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NTAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTQ9c3RhdGljIHNzaXplX3QgdmZpb19hcF9nZXRfaXJxX2luZm8odW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ2NDpcdGlmIChpbmZvLmFyZ3N6IFx1MDAzYyBtaW5zeiB8fCBpbmZvLmluZGV4IFx1MDAzZT0gVkZJT19BUF9OVU1fSVJRUylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2Ny1cdHN3aXRjaCAoaW5mby5pbmRleCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0Njg6XHRjYXNlIFZGSU9fQVBfUkVRX0lSUV9JTkRFWDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY5LVx0XHRpbmZvLmNvdW50ID0gMTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ3MS1cdFx0YnJlYWs7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ3MjpcdGNhc2UgVkZJT19BUF9DRkdfQ0hHX0lSUV9JTkRFWDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVx0XHRpbmZvLmNvdW50ID0gMTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQ4Mz1zdGF0aWMgaW50IHZmaW9fYXBfaXJxX3NldF9pbml0KHN0cnVjdCB2ZmlvX2lycV9zZXQgKmlycV9zZXQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDkzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0OTQ6XHRyZXQgPSB2ZmlvX3NldF9pcnFzX3ZhbGlkYXRlX2FuZF9wcmVwYXJlKGlycV9zZXQsIDEsIFZGSU9fQVBfTlVNX0lSUVMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ5NS1cdFx0XHRcdFx0XHQgXHUwMDI2ZGF0YV9zaXplKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU3Mj1zdGF0aWMgaW50IHZmaW9fYXBfc2V0X2lycXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU4NC1cdFx0c3dpdGNoIChpcnFfc2V0LmluZGV4KSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU4NTpcdFx0Y2FzZSBWRklPX0FQX1JFUV9JUlFfSU5ERVg6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU4Ni1cdFx0XHRyZXR1cm4gdmZpb19hcF9zZXRfcmVxdWVzdF9pcnEobWF0cml4X21kZXYsIGFyZyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU4NzpcdFx0Y2FzZSBWRklPX0FQX0NGR19DSEdfSVJRX0lOREVYOlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1ODgtXHRcdFx0cmV0dXJuIHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKG1hdHJpeF9tZGV2LCBhcmcpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNzQyPWludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc0OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzUwOlx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGUuc3lzZnNfbmFtZSA9IFZGSU9fQVBfTURFVl9UWVBFX0hXVklSVDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzUxOlx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGUucHJldHR5X25hbWUgPSBWRklPX0FQX01ERVZfTkFNRV9IV1ZJUlQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc1Mi1cdG1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlcyA9IFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNzcxPWludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTEtXHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI3OTI6XHRxLVx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc5My1cdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTI6I2lmbmRlZiBfVkZJT19BUF9QUklWQVRFX0hfXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjEzOiNkZWZpbmUgX1ZGSU9fQVBfUFJJVkFURV9IX1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTI1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNjojZGVmaW5lIFZGSU9fQVBfTU9EVUxFX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNzojZGVmaW5lIFZGSU9fQVBfRFJWX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDYtXHRpbnRcdGFwcW47XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0NzojZGVmaW5lIFZGSU9fQVBfSVNDX0lOVkFMSUQgMHhmZlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDgtXHR1bnNpZ25lZCBjaGFyIHNhdmVkX2lzYztcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2NT12b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTY4OiNlbmRpZiAvKiBfVkZJT19BUF9QUklWQVRFX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19WRklPX0FQIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1ZGSU9fQVBgIG1pZ2h0IGhhdmUgc29tZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBzMzkwIGNyeXB0byBmcmFtZXdvcmsuIFNvLCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIGJ5IGxvb2tpbmcgZGlyZWN0bHkgaW50byB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHNlZSB3aGF0LCBpZiBhbnksIGNyeXB0by1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzIGFyZSB0aWVkIGludG8gYENPTkZJR19WRklPX0FQYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbDsgaXTigJlsbCBoZWxwIG1lIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZsaWN0cywgYnVpbGQgaXNzdWVzLCBvciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byBnZXQgYSBzb2xpZCBvdmVydmlldyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGNoZWNrIG9mIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBhY3QgYXMgYSBnb29kIGNoZWNrcG9pbnQgYmVmb3JlIEkgZ28gZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDoKCioqVkZJT19BUCBDb25maWd1cmF0aW9uIEh1bnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYGNvbmZpZyBWRklPX0FQYCBpcyBkZWZpbmVkLCBvciB1c2VkLCB3aXRoaW4gdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUuIEkmIzM5O20gZ29pbmcgdG8ga2ljayBvZmYgYSBzZWFyY2ggZm9yIGl0LiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIGEgYnJvYWQgc3dlZXAgYWNyb3NzIHRoZSB3aG9sZSBwcm9qZWN0LCBzbyBJIGNhbiBzZWUgZXZlcnkgY29udGV4dCBpbiB3aGljaCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1pZ2h0IGV4aXN0LiBHb3R0YSBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmaXJzdC4gSXQmIzM5O3MgdXN1YWxseSBmYXN0ZXIgdG8gc3RhcnQgYnJvYWQsIHRoZW4gcmVmaW5lLiBMZXQmIzM5O3MgZ2V0IHRoZSBzZWFyY2ggdW5kZXJ3YXkuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBtb2RlcmF0ZWx5IHF1aWNrIHByb2Nlc3MsIGRlcGVuZGluZyBvbiB0aGUgc3BlZWQgb2YgbXkgc2VhcmNoIHRvb2wgYW5kIGhvdyBleHBhbnNpdmUgdGhlIGtlcm5lbCByZXBvIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgzNT1jb25maWcgVkZJT19DQ1dcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04NDUtXG5hcmNoL3MzOTAvS2NvbmZpZzo4NDY6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTg0Ny1cdGRlZl90cmlzdGF0ZSBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBzMzkwIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXZlIGludG8gdGhlIHMzOTAga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIGl0cyBidWlsZCBwcm9jZXNzLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSA4NDYg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGZpbmQgYSByZWxldmFudCBzZWN0aW9uLCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW9uLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIHRoZSBjb25maWcgbG9naWMgYW5kIGFueSBhc3NvY2lhdGVkIGRlZmluaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdGhlbHBcbiA4NDE6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEkvTyBzdWJjaGFubmVscyB2aWEgVkZJTy1DQ1cuXG4gODQyOlx0XG4gODQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDg0NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXG4gODQ1Olx0XG4gODQ2Olx0Y29uZmlnIFZGSU9fQVBcbiA4NDc6XHRcdGRlZl90cmlzdGF0ZSBuXG4gODQ4Olx0XHRwcm9tcHQgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBUCBkZXZpY2VzXCYjMzQ7XG4gODQ5Olx0XHRkZXBlbmRzIG9uIEtWTVxuIDg1MDpcdFx0ZGVwZW5kcyBvbiBWRklPXG4gODUxOlx0XHRkZXBlbmRzIG9uIEFQXG4gODUyOlx0XHRzZWxlY3QgVkZJT19NREVWXG4gODUzOlx0XHRoZWxwXG4gODU0Olx0XHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXG4gODU1Olx0XHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxuIDg1NjpcdFxuIDg1NzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gODU4Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZmaW9fYXAuXG4gODU5Olx0XG4gODYwOlx0ZW5kbWVudVxuIDg2MTpcdFxuIDg2MjpcdGNvbmZpZyBDQ1dcbiA4NjM6XHRcdGRlZl9ib29sIHlcbiA4NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIENvZGUgUGF0aCBDb25mbGljdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgcGF0aHMuIFRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gvczM5MC9LY29uZmlnYCwgaXMgd2hlcmUgSSBzZWUgdGhlIGBWRklPX0FQYCBvcHRpb24gZGVmaW5lZC4gSSBrbm93IHRoYXQgbXVjaC4gTm93LCB0aGUgb3ZlcmFyY2hpbmcgZ29hbCBvZiB0aGlzIGNoZWNrIGlzIHRvIHNlZSBpZiBhbnkgY29kZSBwYXRocyBhcmUgYWNjaWRlbnRhbGx5IGV4ZWN1dGVkIG9uIGFyY2hpdGVjdHVyZSB0aGF0IHRoZXkgYXJlIG5vdCB3cml0dGVuIGZvci4gVGhpcywgSSBrbm93LCBjYW4gYmUgcHJvYmxlbWF0aWMuIFRoaXMgaXMgYmVpbmcgZmxhZ2dlZCBiZWNhdXNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGBhbWQ2NGAsIGFuZCB3ZSYjMzk7cmUgc2VlaW5nIHNvbWV0aGluZyBzMzkwLXJlbGF0ZWQuCgpUaGUgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7IHNlY3Rpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgY29kZSBleGNsdXNpdmVseSB0aWVkIHRvIGFuIGFyY2hpdGVjdHVyZSAqb3RoZXIgdGhhbiogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYSBwcm9ibGVtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBkcml2ZXJzL3MzOTAvYCBkaXJlY3RvcnkgKGFuZCBpdHMgY29udGVudHMpIGFyZSBpbmFkdmVydGVudGx5IGJlaW5nIGJ1aWx0IG9uIGFyY2hpdGVjdHVyZXMgYmVzaWRlcyBzMzkwLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGljYXRpb25zIG9mIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzMzkwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL01ha2VmaWxlPTE5OT1vYmotJChDT05GSUdfRElCUylcdFx0JiM0Mzs9IGRpYnMvXG5kcml2ZXJzL01ha2VmaWxlOjIwMDpvYmotJChDT05GSUdfUzM5MClcdFx0JiM0Mzs9IHMzOTAvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQ1CgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBzdWl0YWJsZSBmb3IgZnV6emluZywgYW5kIGhlcmUmIzM5O3Mgd2h5LiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuCgpJIHNlZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlLCBsb2NhdGVkIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBpcyBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1MzOTBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIGBDT05GSUdfUzM5MGAgaXMsIG9mIGNvdXJzZSwgb25seSBkZWZpbmVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gQ3J1Y2lhbGx5LCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhpcyBhbmFseXNpcyBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBhbnkgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYXJlLCBieSBkZWZpbml0aW9uLCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4gVGhlIGNvZGUgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgb24gdGhpcyBwbGF0Zm9ybS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBjb25maXJtZWQgdGhhdCB0aGUgZGlmZiBvbmx5IGFmZmVjdHMgdGhhdCBzaW5nbGUgZmlsZTogYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuCgpCYXNlZCBvbiB0aGUgcnVsZXMsIHNwZWNpZmljYWxseSB0aGUgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0OyBuZWdhdGl2ZSBjcml0ZXJpYSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlIGNvZGUgbW9kaWZpZWQgaXMgZXhjbHVzaXZlIHRvIGFuIGFyY2hpdGVjdHVyZSBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYCwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0IGBbXWAsIGFuZCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYWxzbyBiZSBgW11gLiBNeSByZWFzb25pbmcgaXMgZ3JvdW5kZWQgaW4gdGhlIGFyY2hpdGVjdHVyYWwgZXhjbHVzaXZpdHkgb2YgdGhlIG1vZGlmaWVkIGNvZGUg4oCTIGl0JiMzOTtzIHNpbXBseSBub3QgcmVsZXZhbnQgdG8gZnV6emluZyBvbiBhbWQ2NC4gTm93IEkmIzM5O2xsIHByZXBhcmUgdGhlIHRvb2wgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMsIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19TMzkwIC8gQ09ORklHX1ZGSU9fQVApIGFuZCBjYW5ub3QgYmUgYnVpbHQgb3IgZXhlY3V0ZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMsIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19TMzkwIC8gQ09ORklHX1ZGSU9fQVApIGFuZCBjYW5ub3QgYmUgYnVpbHQgb3IgZXhlY3V0ZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODowOC4yMjE5NzA0NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE3MTA4NDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMsIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19TMzkwIC8gQ09ORklHX1ZGSU9fQVApIGFuZCBjYW5ub3QgYmUgYnVpbHQgb3IgZXhlY3V0ZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjA4LjIyMTk3NTk0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTE1OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDc3YjczYjJjMTQ0ZWY0MDgyZWEzNjBkMTdmMmJjMGI0MDI4NjlhOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjQ4OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmQwMzc2MzJkZjgwZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuQEAgLTMxLDYgKzMxLDcgQEBcXG4gI2RlZmluZSBBUF9RVUVVRV9JTl9VU0UgXFxcImluIHVzZVxcXCJcXG4gXFxuICNkZWZpbmUgQVBfUkVTRVRfSU5URVJWQUxcXHRcXHQyMFxcdC8qIFJlc2V0IHNsZWVwIGludGVydmFsICgyMG1zKVxcdFxcdCovXFxuKyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVRcXHRcXHQyMDAwXFx0LyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKVxcdCovXFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XFxuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3FsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKnFsaXN0KTtcXG5AQCAtMjI2LDI3ICsyMjcsOTAgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKFxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIGNsZWFycyB0aGUgSVIgYml0IG9yIGdpdmVzIHVwIGFmdGVyIDUgdHJpZXNcXG4tICogQGFwcW46IFRoZSBBUCBRdWV1ZSBudW1iZXJcXG4tICpcXG4tICogQ2hlY2tzIHRoZSBJUlEgYml0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgQVBRTiB1c2luZyBhcF90YXBxLlxcbi0gKiBSZXR1cm5zIGlmIHRoZSBhcF90YXBxIGZ1bmN0aW9uIHN1Y2NlZWRlZCBhbmQgdGhlIGJpdCBpcyBjbGVhci5cXG4tICogUmV0dXJucyBpZiBhcF90YXBxIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvclxcbi0gKiBjaGVja3N0b3BwZWQgQVAuXFxuLSAqIE90aGVyd2lzZSByZXRyaWVzIHVwIHRvIDUgdGltZXMgYWZ0ZXIgd2FpdGluZyAyMG1zLlxcbisgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyIC0gd2FpdCBmb3IgdGhlIElSIGJpdCB0byBjbGVhciBhZnRlciBhIGRpc2FibGVcXG4rICpcXG4rICogQGFwcW46IHRoZSBBUFFOIG9mIHRoZSBxdWV1ZVxcbisgKlxcbisgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVJcXG4rICogYml0IGlzIGNsZWFyLCB0aGUgcXVldWUgYmVjb21lcyBub24tb3BlcmF0aW9uYWwsIG9yIDUgcmV0cmllcyBhcmUgZXhoYXVzdGVkLlxcbisgKlxcbisgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGFcXG4rICogY29uZGl0aW9uLWNvZGUgMCBjb21wbGV0aW9uIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgSVIgYml0IGhhcyBiZWVuIGNsZWFyZWQuXFxuKyAqIFRoZSBob3N0IG11c3QgY29uZmlybSBJUj0wIGJlZm9yZSB1bnBpbm5pbmcgdGhlIE5JQiBwYWdlIHRvIGF2b2lkIGEgd2lsZFxcbisgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqIC0gMFxcdFxcdGlmIHRoZSBJUiBiaXQgaXMgY2xlYXIgKGkuZS4sIGludGVycnVwdHMgYXJlIGRpc2FibGVkKS5cXG4rICpcXG4rICogLSAtRU5PREVWXFx0aWYgdGhlIFBRQVAtVEFQUSByZXNwb25zZSBjb2RlIGluZGljYXRlcyB0aGUgcXVldWUgaXMgbm90IGF2YWlsYWJsZSxcXG4rICpcXHRcXHRpcyBkZWNvbmZpZ3VyZWQsIG9yIGlzIGNoZWNrc3RvcHBlZCAoaS5lLiwgbm90IG9wZXJhdGlvbmFsKS5cXG4rICpcXG4rICogLSAtRVRJTUVET1VUXFx0dGhlIGZ1bmN0aW9uIHRpbWVkIG91dCBiZWZvcmUgdGhlIElSIGJpdCB3YXMgY2xlYXJlZC5cXG4gICovXFxuLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuK3N0YXRpYyB2b2lkIHJlcG9ydF90YXBxX3JjKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLCB1OCByYylcXG4re1xcbitcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pLCByYyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiUFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZXBvcnRfaXJxY2xlYXJfdGltZW91dChzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXFxuK3tcXG4rXFx0aWYgKHEtXFx1MDAzZW1hdHJpeF9tZGV2KVxcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlBRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXFxuK3tcXG4rXFx0aWYgKHEtXFx1MDAzZW1hdHJpeF9tZGV2KVxcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlBRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVwb3J0X3phcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxcbit7XFxuK1xcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldilcXG4rXFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZW1kZXYpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIHJjKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pLCByYyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cztcXG4gXFx0aW50IHJldHJ5ID0gNTtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0c3RhdHVzID0gYXBfdGFwcShhcHFuLCBOVUxMKTtcXG4rXFx0XFx0c3RhdHVzID0gYXBfdGFwcShxLVxcdTAwM2VhcHFuLCBOVUxMKTtcXG4gXFx0XFx0c3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkge1xcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0XFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuIFxcdFxcdFxcdG1zbGVlcCgyMCk7XFxuQEAgLTI1NSwxNCArMzE5LDE0IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCIlczogdGFwcSByYyAlMDJ4OiAlMDR4XFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4tXFx0XFx0XFx0XFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0XFx0fVxcbiBcXHR9IHdoaWxlICgtLXJldHJ5KTtcXG4gXFxuLVxcdFdBUk5fT05DRSgxLCBcXFwiJXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XFxcXG5cXFwiLFxcbi1cXHRcXHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XFxuK1xcdHJlcG9ydF9pcnFjbGVhcl90aW1lb3V0KHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjg5LDIwICszNTMsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XFxuLSAqIEBxOiBUaGUgdmZpb19hcF9xdWV1ZVxcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxcbisgKiBAcTogdGhlIHZmaW9fYXBfcXVldWVcXG4rICpcXG4rICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3NcXG4rICogKEFQX1JFU1BPTlNFX05PUk1BTCBvciBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRCksIHBvbGxzIHZpYVxcbisgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlXFxuKyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXNcXG4rICogbmVjZXNzYXJ5IGJlY2F1c2UgQVFJQyBkaXNhYmxlIGlzIGFzeW5jaHJvbm91czogZnJlZWluZyB0aGUgTklCIGJlZm9yZSBJUj0wXFxuKyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLlxcbiAgKlxcbi0gKiBVc2VzIGFwX2FxaWMgdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0aW9uIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHJlc2V0XFxuLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzXFxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoKSB0byBjaGVjayBmb3IgdGhlIElSUSBiaXQgdG8gYmUgY2xlYXJcXG4tICogYW5kIGNhbGxzIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIHRvIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkXFxuLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy5cXG4rICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXNcXG4rICogaW4gcHJvZ3Jlc3MuXFxuICAqXFxuLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLFxcbi0gKiByZXRyaWVzIGFmdGVyIDIwbXMsIHVwIHRvIDUgdGltZXMuXFxuKyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3RcXG4rICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlXFxuKyAqIGFsbG9jYXRvciwgYSBzdWJzZXF1ZW50IGhhcmR3YXJlIERNQSB3cml0ZSB0byB0aGF0IHBoeXNpY2FsIGFkZHJlc3Mgd291bGRcXG4rICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2hcXG4rICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuXFxuICAqXFxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3JcXG4tICogY2hlY2tzdG9wcGVkIEFQLlxcbisgKiBJZiB0aGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsIChkZWNvbmZpZ3VyZWQsIGNoZWNrc3RvcHBlZCwgbm90IGF2YWlsYWJsZSksXFxuKyAqIHJlc291cmNlcyBhcmUgZnJlZWQgaW1tZWRpYXRlbHkgc2luY2UgdGhlIGhhcmR3YXJlIGNhbiBubyBsb25nZXIgd3JpdGUgdG9cXG4rICogdGhlIE5JQi5cXG4gICpcXG4gICogUmV0dXJuOiBcXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xcbiAgKi9cXG5AQCAtMzEwLDM0ICszODIsODcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4ge1xcbiBcXHR1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07XFxuIFxcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzO1xcbi1cXHRpbnQgcmV0cmllcyA9IDU7XFxuK1xcdGludCByZXRyaWVzID0gNSwgcmV0O1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XFxuIFxcdFxcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XFxuLVxcdFxcdFxcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cXHUwMDNlYXBxbik7XFxuLVxcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFRSUMgZGlzYWJsZSB3YXMgYWNjZXB0ZWQgKE5PUk1BTCksIG9yIHRoZSBxdWV1ZSB3YXNcXG4rXFx0XFx0XFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcXG4rXFx0XFx0XFx0ICogY29tcGxldGluZyAoT1RIRVJXSVNFX0NIQU5HRUQpLiAgSW4gYm90aCBjYXNlcywgd2UgbXVzdFxcbitcXHRcXHRcXHQgKiB3YWl0IHVudGlsIGludGVycnVwdCBwcm9jZXNzaW5nIGhhcyBiZWVuIGRpc2FibGVkXFxuK1xcdFxcdFxcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmV0ID0gdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxKTtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2FpdGluZyB0byBjb25maXJtIGludGVycnVwdHMgYXJlIGRpc2FibGVkLlxcbitcXHRcXHRcXHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XFxuK1xcdFxcdFxcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxcbitcXHRcXHRcXHQgKiByZXVzZSB0aGUgTklCIHdoaWxlIGhhcmR3YXJlIGNhbiBzdGlsbCB3cml0ZSB0byBpdC5cXG4rXFx0XFx0XFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xcbitcXHRcXHRcXHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcXG4rXFx0XFx0XFx0ICogc2lnbmFscyB0byB0aGUgZ3Vlc3QgdGhhdCB0aGUgcmVzZXQgb3BlcmF0aW9uIGRpZCBub3RcXG4rXFx0XFx0XFx0ICogY29tcGxldGUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuK1xcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2c3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7XFxuK1xcdFxcdFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Z290byBlbmRfZmFpbDtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbitcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX1NUQVRFX0NIQU5HRV9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0XFx0bXNsZWVwKDIwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4rXFx0XFx0XFx0LyogQVAgbm90IG9wZXJhdGlvbmFsOyBubyBmdXJ0aGVyIGludGVycnVwdHMgcG9zc2libGUgKi9cXG4rXFx0XFx0XFx0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XFxuK1xcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTOlxcbitcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0lOVkFMSURfR0lTQTpcXG4rXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcXG4rXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdC8qIEFsbCBjYXNlcyBpbiBkZWZhdWx0IG1lYW5zIEFQIG5vdCBvcGVyYXRpb25hbCAqL1xcbi1cXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuLVxcdFxcdFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbi1cXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgQVFJQyBkaXNhYmxlIHdhcyByZWplY3RlZDsgSVJRIGlzIHN0aWxsIGVuYWJsZWRcXG4rXFx0XFx0XFx0ICogYW5kIHRoZSBoYXJkd2FyZSBzdGlsbCBob2xkcyB0aGUgTklCIGFkZHJlc3MuIERvIG5vdFxcbitcXHRcXHRcXHQgKiBmcmVlIHJlc291cmNlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHJlcG9ydF9hcWljX2Rpc2FibGVfZXJyb3IocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHRcXHRnb3RvIGVuZF9mYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKHJldHJpZXMtLSk7XFxuIFxcbi1cXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuLVxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRyZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcXG4rXFxuK2VuZF9mYWlsOlxcbitcXHQvKlxcbitcXHQgKiBXZSBhcmUgaGVyZSBlaXRoZXIgYmVjYXVzZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBmYWlsZWQgdG8gZGlzYWJsZVxcbitcXHQgKiBpbnRlcnJ1cHRzLCBvciBiZWNhdXNlIElSPTAgY291bGQgbm90IGJlIGNvbmZpcm1lZC4gSW4gZWl0aGVyIGNhc2VcXG4rXFx0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcXG4rXFx0ICogdG8gdGhlIE5JQiwgYW5kIHVucGlubmluZyB0aGUgcGFnZSB3b3VsZCBhbGxvdyBpdCB0byBiZSByZWFsbG9jYXRlZFxcbitcXHQgKiB0byBhIG5ldyBvd25lci4gQSBzdWJzZXF1ZW50IGhhcmR3YXJlIERNQSB3cml0ZSB0byB0aGF0IHBoeXNpY2FsXFxuK1xcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJ3MgbWVtb3J5IOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXRcXG4rXFx0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXFxuK1xcdCAqIHRoZXJlZm9yZSBpbnRlbnRpb25hbGx5IGxlYWtlZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBzdGF0dXM7XFxuK1xcbiBlbmRfZnJlZTpcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXFxuK1xcdCAqIG9yIGJlY2F1c2UgdGhlIHF1ZXVlIGlzIG5vdCBvcGVyYXRpb25hbCBvciBub3QgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlXFxuK1xcdCAqIGludGVycnVwdHMgY2FuIG5vdCBiZSBwcm9jZXNzZWQsIHNvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIC0gdGhlIHBpbm5lZCBOSUJcXG4rXFx0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcXG4rXFx0ICogbm90IGJlIGxlYWtlZC5cXG4rXFx0ICovXFxuIFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbkBAIC00MDEsMjIgKzUyNiwyOSBAQCBzdGF0aWMgaW50IGVuc3VyZV9uaWJfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHZmaW9fYXBfaXJxX2VuYWJsZSAtIEVuYWJsZSBJbnRlcnJ1cHRpb24gZm9yIGEgQVBRTlxcbisgKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cyBmb3IgYW4gQVAgcXVldWUgb24gYmVoYWxmIG9mIGEgZ3Vlc3RcXG4gICpcXG4tICogQHE6XFx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGhvbGRpbmcgQVFJQyBwYXJhbWV0ZXJzXFxuKyAqIEBxOlxcdCB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZFxcbiAgKiBAaXNjOiB0aGUgZ3Vlc3QgSVNDIHRvIHJlZ2lzdGVyIHdpdGggdGhlIEdJQiBpbnRlcmZhY2VcXG4tICogQHZjcHU6IHRoZSB2Y3B1IG9iamVjdCBjb250YWluaW5nIHRoZSByZWdpc3RlcnMgc3BlY2lmeWluZyB0aGUgcGFyYW1ldGVyc1xcbi0gKlxcdCAgcGFzc2VkIHRvIHRoZSBQUUFQKEFRSUMpIGluc3RydWN0aW9uLlxcbisgKiBAdmNwdTogdGhlIHZjcHUgd2hvc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIFBRQVAoQVFJQykgcGFyYW1ldGVyc1xcbisgKlxcbisgKiBQaW5zIHRoZSBndWVzdCBOSUIgcGFnZSwgcmVnaXN0ZXJzIHRoZSBndWVzdCBJU0Mgd2l0aCB0aGUgR0lCIHRvIG9idGFpbiBhXFxuKyAqIGhvc3QgSVNDLCBhbmQgcmVpc3N1ZXMgUFFBUChBUUlDKSB3aXRoIHRoZSB0cmFuc2xhdGVkIGhvc3QtYWJzb2x1dGUgTklCXFxuKyAqIGFkZHJlc3MgYW5kIGhvc3QgSVNDIG9uIGJlaGFsZiBvZiB0aGUgZ3Vlc3QuXFxuICAqXFxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXFxuLSAqIFJlZ2lzdGVyIHRoZSBndWVzdCBJU0MgdG8gR0lCIGludGVyZmFjZSBhbmQgcmV0cmlldmUgdGhlXFxuLSAqIGhvc3QgSVNDIHRvIGlzc3VlIHRoZSBob3N0IHNpZGUgUFFBUC9BUUlDXFxuKyAqIFRoZSBjb25kaXRpb24gY29kZSBhbmQgQVAtcXVldWUgc3RhdHVzIHdvcmQgcmV0dXJuZWQgYnkgUFFBUChBUUlDKSBhcmVcXG4rICogcmVmbGVjdGVkIGJhY2sgdG8gdGhlIGd1ZXN0IGFzLWlzLiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsXFxuKyAqIElSPTEpIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuXFxuICAqXFxuLSAqIHN0YXR1cy5yZXNwb25zZV9jb2RlIG1heSBiZSBzZXQgdG8gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGluIGNhc2UgdGhlXFxuLSAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLlxcbisgKiBSZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGJhc2VkIHNvbGVseSBvbiB3aGV0aGVyIGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOlxcbisgKiAtIEFQX1JFU1BPTlNFX05PUk1BTCAoQ0M9MCk6IGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOyB0aGUgb2xkIHBpbm5lZFxcbisgKiAgIE5JQiBwYWdlIGFuZCByZWdpc3RlcmVkIGd1ZXN0IElTQyBhcmUgZnJlZWQgYW5kIHRoZSBuZXcgb25lcyBzYXZlZC5cXG4rICogLSBBbGwgb3RoZXIgcmVzcG9uc2VzOiBoYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQjsgdGhlIG5ld2x5IHBpbm5lZFxcbisgKiAgIHBhZ2UgYW5kIHJlZ2lzdGVyZWQgSVNDIGFyZSBmcmVlZCBhbmQgdGhlIHByZXZpb3VzbHkgc2F2ZWQgcmVzb3VyY2VzIGFyZVxcbisgKiAgIGxlZnQgaW50YWN0LlxcbiAgKlxcbi0gKiBPdGhlcndpc2UgcmV0dXJuIHRoZSBhcF9xdWV1ZV9zdGF0dXMgcmV0dXJuZWQgYnkgdGhlIGFwX2FxaWMoKSxcXG4tICogYWxsIHJldHJ5IGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBieSB0aGUgZ3Vlc3QuXFxuKyAqIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpcyByZXR1cm5lZCBpZiB2ZmlvX3Bpbl9wYWdlcygpIG9yXFxuKyAqIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIoKSBmYWlscyBiZWZvcmUgdGhlIEFRSUMgaW5zdHJ1Y3Rpb24gaXMgaXNzdWVkLlxcbiAgKlxcbiAgKiBSZXR1cm46IFxcdTAwMjZzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzXFxuICAqL1xcbkBAIC00MjgsMTcgKzU2MCwxOSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXFxuIFxcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzID0ge307XFxuIFxcdHN0cnVjdCBrdm1fczM5MF9naXNhICpnaXNhO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xcbi1cXHRpbnQgbmlzYztcXG4rXFx0aW50IG5pc2MsIHJldDtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtO1xcbiBcXHRwaHlzX2FkZHJfdCBoX25pYjtcXG4gXFx0ZG1hX2FkZHJfdCBuaWI7XFxuLVxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBWZXJpZnkgdGhhdCB0aGUgbm90aWZpY2F0aW9uIGluZGljYXRvciBieXRlIGFkZHJlc3MgaXMgdmFsaWQgKi9cXG4gXFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFxcdTAwMjZuaWIpKSB7XFxuIFxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fLCBcXHUwMDI2bmliLCBxLVxcdTAwM2VhcHFuKTtcXG4tXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogaW52YWxpZCBOSUIgYWRkcmVzcyAlcGFkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgXFx1MDAyNm5pYik7XFxuIFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTO1xcbiBcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiBcXHR9XFxuQEAgLTQ1Myw3ICs1ODcsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCxcXFwiXFxuIFxcdFxcdFxcdFxcdCBcXFwibmliPSVwYWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgcmV0LCBcXHUwMDI2bmliLCBxLVxcdTAwM2VhcHFuKTtcXG4tXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogdmZpb19waW5fcGFnZXMgZmFpbGVkIHJjPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmV0KTtcXG4gXFx0XFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7XFxuIFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdH1cXG5AQCAtNDc2LDcgKzYxMywxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXFxuIFxcdGlmIChuaXNjIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgbmlzYywgaXNjLCBxLVxcdTAwM2VhcHFuKTtcXG4tXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogR0lTQyByZWdpc3RyYXRpb24gZmFpbGVkIHJjPSVkIGlzYz0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIG5pc2MsIGlzYyk7XFxuIFxcdFxcdHZmaW9fdW5waW5fcGFnZXMoXFx1MDAyNnEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2LCBuaWIsIDEpO1xcbiBcXHRcXHRzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUztcXG4gXFx0XFx0cmV0dXJuIHN0YXR1cztcXG5AQCAtNDg5LDI0ICs2MjksMzggQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgaF9uaWIpO1xcbiBcXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRcXHQvKiBTZWUgaWYgd2UgZGlkIGNsZWFyIG9sZGVyIElSUSBjb25maWd1cmF0aW9uICovXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcXG4rXFx0XFx0ICogZ3Vlc3QgSVNDIGFyZSBubyBsb25nZXIgdXNlZCBieSBoYXJkd2FyZSBhbmQgY2FuIGJlIGZyZWVkLlxcbitcXHRcXHQgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWwgSVI9MSkgaXMgdGhlXFxuK1xcdFxcdCAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlXFxuK1xcdFxcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXFxuK1xcdFxcdCAqIGd1ZXN0IHRvIHJlc3BvbmQgdG8gdGhlIFBRQVAtQVFJQyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4tXFx0XFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCIChDQz0zIG9yIGVycm9yKS4gVGhlXFxuK1xcdFxcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxcbitcXHRcXHQgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkXFxuK1xcdFxcdCAqIElTQyB0aGF0IHdlcmUgcHJlcGFyZWQgZm9yIHRoaXMgKHJlamVjdGVkKSByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczoga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyOiByYz0lZCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXFx1MDAzZWFwcW4pO1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgdW5yZWdpc3RlciBmYWlsZWQgcmM9JWQgaXNjPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmV0LCBpc2MpO1xcbitcXHRcXHR9XFxuIFxcdFxcdHZmaW9fdW5waW5fcGFnZXMoXFx1MDAyNnEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2LCBuaWIsIDEpO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcXFxcblxcXCIsIF9fZnVuY19fLCBxLVxcdTAwM2VhcHFuLFxcbi1cXHRcXHRcXHRzdGF0dXMucmVzcG9uc2VfY29kZSk7XFxuLVxcdFxcdHZmaW9fYXBfaXJxX2Rpc2FibGUocSk7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuQEAgLTUxNyw2ICs2NzEsMTEgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRcXHRcXHRcXHQgYXFpY19naXNhLnpvbmUsIGFxaWNfZ2lzYS5pciwgYXFpY19naXNhLmdpc2MsXFxuIFxcdFxcdFxcdFxcdCBhcWljX2dpc2EuZ2YsIGFxaWNfZ2lzYS5naXNhLCBhcWljX2dpc2EuaXNjLFxcbiBcXHRcXHRcXHRcXHQgcS1cXHUwMDNlYXBxbik7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbkBAIC02MDEsNyArNzYwLDggQEAgc3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICghKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EgXFx1MDAyNiBFQ0FfQUlWKSkge1xcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EpO1xcbi1cXG4rXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiUFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBBSVYgZmFjaWxpdHkgbm90IGluc3RhbGxlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuQEAgLTYxMCw3ICs3NzAsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fLCBhcHFuKTtcXG4tXFxuK1xcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuQEAgLTYyMyw2ICs3ODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IG1kZXYgJTA4bHgtJTA0bHgtJTA0bHgtJTA0bHgtJTA0bHglMDhseCBub3QgaW4gdXNlOiBhcHFuPTB4JTA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcXG4gXFx0XFx0XFx0XFx0IHV1aWRbM10sIHV1aWRbNF0sIHV1aWRbNV0sIGFwcW4pO1xcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogbWRldiBub3QgaW4gdXNlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuQEAgLTYzMSwxMSArNzk1LDEzIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgQVBfUUlEX0NBUkQoYXBxbiksXFxuIFxcdFxcdFxcdFxcdCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogcXVldWUgbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHRzdGF0dXMgPSB2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXMucmVncy5ncHJzWzFdO1xcbi1cXG4gXFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cXG4gXFx0aWYgKChzdGF0dXMgXFx1MDAzZVxcdTAwM2UgKDYzIC0gMTYpKSBcXHUwMDI2IDB4MDEpXFxuIFxcdFxcdHFzdGF0dXMgPSB2ZmlvX2FwX2lycV9lbmFibGUocSwgc3RhdHVzIFxcdTAwMjYgMHgwNywgdmNwdSk7XFxuQEAgLTY5MiwxNCArODU4LDE0IEBAIHN0YXRpYyBib29sIF9xdWV1ZV9wYXNzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4gXFx0aWYgKCFxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRzd2l0Y2ggKHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuLVxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4rXFx0LypcXG4rXFx0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcXG4rXFx0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcXG4rXFx0ICogaW5kaWNhdGVkIGJ5IHJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCAoMCkuXFxuK1xcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxcbitcXHQgKiB0byB0aGUgZ3Vlc3QuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xNDEwLDcgKzE1NzYsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4ge1xcbiBcXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XFxuIFxcbi1cXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XFxuK1xcdGJpdG1hcF96ZXJvKGFwcWlzLCBBUF9ET01BSU5TKTtcXG4gXFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xcbiBcXHR2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW5zKG1hdHJpeF9tZGV2LCBhcHFpcyk7XFxuIH1cXG5AQCAtMTkxNSwzNyArMjA4MSwxMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX2ZpbmRfcXVldWUoaW50IGFwcW4pXFxuIFxcdHJldHVybiBxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcXG4rc3RhdGljIGludCBhcHFfc3RhdHVzX2NoZWNrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKVxcbiB7XFxuIFxcdHN3aXRjaCAoc3RhdHVzLVxcdTAwM2VyZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcXG4rXFx0XFx0ICogYmVlbiBpbml0aWF0ZWQuIFRoZSBmb2xsb3dpbmcgYml0IHNldHRpbmdzIGluIHRoZSBzdGF0dXNcXG4rXFx0XFx0ICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZVxcbitcXHRcXHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzdGF0dXMtXFx1MDAzZXF1ZXVlX2VtcHR5IFxcdTAwMjZcXHUwMDI2ICFzdGF0dXMtXFx1MDAzZXJlcGxpZXNfd2FpdGluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0YXR1cy1cXHUwMDNlaXJxX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgIXN0YXR1cy1cXHUwMDNlYXN5bmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIHF1ZXVlIGlzIG5vbi1vcGVyYXRpb25hbDogaW50ZXJydXB0cyBhcmUgbm90IHBvc3NpYmxlIHNvXFxuK1xcdFxcdCAqIEFRSUMgcmVzb3VyY2VzIGNhbiBiZSBzYWZlbHkgZnJlZWQuIEhvd2V2ZXIsIHplcm9pemF0aW9uXFxuK1xcdFxcdCAqIGNhbm5vdCBiZSBjb25maXJtZWQgYmVjYXVzZSBhbGwgc3RhdHVzIGJpdHMgYXJlIHplcm9lZCB3aGVuXFxuK1xcdFxcdCAqIHRoZXNlIHJlc3BvbnNlIGNvZGVzIGFyZSByZXR1cm5lZCDigJQgdGhlcmUgaXMgbm8gd2F5IHRvXFxuK1xcdFxcdCAqIGRpc3Rpbmd1aXNoIGEgemVyb2l6ZWQgcXVldWUgZnJvbSBvbmUgdGhhdCBoYXMgbm90IGJlZW5cXG4rXFx0XFx0ICogemVyb2l6ZWQuIFJldHVybiAtRU5PREVWIHRvIHNpZ25hbCB0aGF0IEFRSUMgcmVzb3VyY2VzIHNob3VsZFxcbitcXHRcXHQgKiBiZSBmcmVlZCBidXQgdGhhdCB6ZXJvaXphdGlvbiBoYXMgbm90IGJlZW4gY29uZmlybWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MuIEl0IG1heSBiZSB0aGUgcmVzZXQgd2UgaXNzdWVkIG9yIG9uZVxcbitcXHRcXHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXFxuK1xcdFxcdCAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcXG4rXFx0XFx0ICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcXG4gXFx0XFx0LypcXG4rXFx0XFx0ICogQVBfUkVTUE9OU0VfQlVTWTpcXG4rXFx0XFx0ICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91clxcbitcXHRcXHQgKiBaQVBRIHdhcyByZWplY3RlZCBvdXRyaWdodC4gUmUtaXNzdWUgdGhlIFpBUFEuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFXFxuK1xcdFxcdCAqIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcXG4gXFx0XFx0ICogVGhlc2UgYXN5bmNocm9ub3VzIHJlc3BvbnNlIGNvZGVzIGluZGljYXRlIGEgUFFBUChBQVBRKVxcbiBcXHRcXHQgKiBpbnN0cnVjdGlvbiB0byBhc3NvY2lhdGUgYSBzZWNyZXQgd2l0aCB0aGUgZ3Vlc3QgZmFpbGVkLiBBbGxcXG4gXFx0XFx0ICogc3Vic2VxdWVudCBBUCBpbnN0cnVjdGlvbnMgd2lsbCBlbmQgd2l0aCB0aGUgYXN5bmNocm9ub3VzXFxuLVxcdFxcdCAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0OyBzbywgbGV0J3MgcmV0dXJuXFxuLVxcdFxcdCAqIGEgdmFsdWUgaW5kaWNhdGluZyBhIHJlc2V0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi5cXG4rXFx0XFx0ICogcmVzcG9uc2UgY29kZSB1bnRpbCB0aGUgQVAgcXVldWUgaXMgcmVzZXQuIFJlLWlzc3VlIHRoZSBaQVBRLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOKHRydWUsXFxuLVxcdFxcdCAgICAgXFxcImZhaWxlZCB0byB2ZXJpZnkgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4OiBUQVBRIHJjPSV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbiksXFxuLVxcdFxcdCAgICAgc3RhdHVzLVxcdTAwM2VyZXNwb25zZV9jb2RlKTtcXG4rXFx0XFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLVxcdTAwM2VyZXNwb25zZV9jb2RlKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4re1xcbitcXHRpZiAocS1cXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cXHUwMDNlc2F2ZWRfaW92YSkge1xcbitcXHRcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZW1kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbikpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZW1kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiAjZGVmaW5lIFdBSVRfTVNHIFxcXCJXYWl0ZWQgJWRtcyBmb3IgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4ICgldSwgJXUsICV1KVxcXCJcXG4gXFxuKy8qKlxcbisgKiBhcHFfcmVzZXRfZmluYWxpemUgLSBzdG9yZSBmaW5hbCBUQVBRIHN0YXR1cyBhbmQgZnJlZSBBUUlDIHJlc291cmNlcy5cXG4rICogQHE6ICAgICAgdGhlIHZmaW9fYXBfcXVldWVcXG4rICogQHN0YXR1czogdGhlIGZpbmFsIEFQIHF1ZXVlIHN0YXR1cyByZXR1cm5lZCBieSBQUUFQKFRBUFEpXFxuKyAqIEByZXQ6ICAgIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhcHFfc3RhdHVzX2NoZWNrKClcXG4rICpcXG4rICogQ29waWVzIHRoZSBmdWxsIFRBUFEgc3RhdHVzIHdvcmQgdG8gcS1cXHUwMDNlcmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1c1xcbisgKiBiaXRzIHJlZmxlY3QgdGhlIGNvbmZpcm1lZCBlbmQgc3RhdGUgb2YgdGhlIHF1ZXVlLiBJZiByZXQgPT0gMCxcXG4rICogemVyb2l6YXRpb24gd2FzIGNvbmZpcm1lZCBhbmQgdGhlIHJlc3BvbnNlIGNvZGUgaXMgb3ZlcnJpZGRlbiB3aXRoXFxuKyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yXFxuKyAqIHJldCA9PSAtRU5PREVWIChERUNPTkZJR1VSRUQgb3IgQ0hFQ0tTVE9QUEVEKSwgdGhlIG5vbi16ZXJvIHJlc3BvbnNlXFxuKyAqIGNvZGUgaXMgbGVmdCBpbnRhY3Qgc28gX3F1ZXVlX3Bhc3NhYmxlKCkgY29ycmVjdGx5IHJldHVybnMgZmFsc2UuXFxuKyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KVxcbit7XFxuK1xcdG1lbWNweShcXHUwMDI2cS1cXHUwMDNlcmVzZXRfc3RhdHVzLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRxLVxcdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX05PUk1BTDtcXG4rXFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxcbitcXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuIHtcXG4gXFx0aW50IHJldCA9IC1FQlVTWSwgZWxhcHNlZCA9IDA7XFxuQEAgLTE5NTgsOSArMjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxcbiBcXHRcXHRtc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpO1xcbiBcXHRcXHRlbGFwc2VkICs9IEFQX1JFU0VUX0lOVEVSVkFMO1xcbiBcXHRcXHRzdGF0dXMgPSBhcF90YXBxKHEtXFx1MDAzZWFwcW4sIE5VTEwpO1xcbi1cXHRcXHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXFx1MDAzZWFwcW4sIFxcdTAwMjZzdGF0dXMpO1xcbi1cXHRcXHRpZiAocmV0ID09IC1FSU8pXFxuK1xcdFxcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socSwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVJTykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUQVBRIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2UgY29kZS4gVGhpc1xcbitcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSBoYXJkd2FyZSBvciBmaXJtd2FyZSBidWc7IHRoZSBxdWV1ZVxcbitcXHRcXHRcXHQgKiBjYW5ub3QgZ2VuZXJhdGUgQVAgaW50ZXJydXB0cyBvciBETUEtd3JpdGUgdG8gdGhlXFxuK1xcdFxcdFxcdCAqIE5JQiwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgcmF0aGVyIHRoYW4gbGVhayB0aGVtLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVsYXBzZWQgXFx1MDAzZT0gQVBfUkVTRVRfTUFYX1dBSVQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogWmVyb2l6YXRpb24gY29uZmlybWVkIChyZXQgPT0gMCk6IHRoZSBUQVBRIHN0YXR1cyBiaXRzXFxuK1xcdFxcdFxcdCAqIGluZGljYXRlIHRoZSBhc3luYyBwb3J0aW9uIG9mIHRoZSBaQVBRIGNvbXBsZXRlZFxcbitcXHRcXHRcXHQgKiBzdWNjZXNzZnVsbHkuIEZyZWUgQVFJQyByZXNvdXJjZXMgYW5kIHJldHVybi5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogUXVldWUgbm9uLW9wZXJhdGlvbmFsIChyZXQgPT0gLUVOT0RFVik6IHRoZSBxdWV1ZSBpc1xcbitcXHRcXHRcXHQgKiBkZWNvbmZpZ3VyZWQgb3IgY2hlY2tzdG9wcGVkOyBpbnRlcnJ1cHRzIGFyZSBub3RcXG4rXFx0XFx0XFx0ICogcG9zc2libGUgc28gQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC5cXG4rXFx0XFx0XFx0ICogWmVyb2l6YXRpb24gY2Fubm90IGJlIGNvbmZpcm1lZCBpbiB0aGlzIHN0YXRlLCBidXQgdGhlXFxuK1xcdFxcdFxcdCAqIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzLCBzbyB0aGUgTklCIHBhZ2UgaXNcXG4rXFx0XFx0XFx0ICogbm8gbG9uZ2VyIGEgRE1BIHRhcmdldCBhbmQgaXQgaXMgc2FmZSB0byBmcmVlIGl0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHtcXG4rXFx0XFx0XFx0XFx0YXBxX3Jlc2V0X2ZpbmFsaXplKHEsIFxcdTAwMjZzdGF0dXMsIHJldCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogVGhlIEFRSUMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlIC0gdGhlIHBpbm5lZFxcbitcXHRcXHRcXHQgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC1cXG4rXFx0XFx0XFx0ICogY2Fubm90IGJlIGZyZWVkIGhlcmUuIFRoZSBOSUIgaXMgdGhlIGFjdGl2ZSBETUEgdGFyZ2V0XFxuK1xcdFxcdFxcdCAqIGZvciBBUCBpbnRlcnJ1cHQgZGVsaXZlcnkgdW50aWwgdGhlIHJlc2V0IGNvbXBsZXRlcztcXG4rXFx0XFx0XFx0ICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbFxcbitcXHRcXHRcXHQgKiB3cml0ZSB0byBpdCB3b3VsZCByZXN1bHQgaW4gYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkXFxuK1xcdFxcdFxcdCAqIGNvcnJ1cHQgaG9zdCBtZW1vcnkuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIElmIHRoZSByZXNldCBldmVudHVhbGx5IGNvbXBsZXRlcywgaW50ZXJydXB0cyB3aWxsIGJlXFxuK1xcdFxcdFxcdCAqIHRlcm1pbmF0ZWQgYW5kIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIElTQyByZWdpc3RyYXRpb25cXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQVxcbitcXHRcXHRcXHQgKiB3cml0ZSBvciB3YWl0aW5nIGluZGVmaW5pdGVseTogZmx1c2hfd29yaygpIGNhbGxlcnMgaG9sZFxcbitcXHRcXHRcXHQgKiB0aGUgbWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayBtdXRleCB3aGljaCBzZXJpYWxpemVzIGFjY2Vzc1xcbitcXHRcXHRcXHQgKiB0byBhbGwgbWRldiBvYmplY3RzIHN5c3RlbS13aWRlLCBzbyBibG9ja2luZyBoZXJlIHdvdWxkXFxuK1xcdFxcdFxcdCAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHEpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBaZXJvaXphdGlvbiBjb3VsZCBub3QgYmUgY29uZmlybWVkOyBzZXRcXG4rXFx0XFx0XFx0ICogcmVzZXRfc3RhdHVzIHRvIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTLlxcbitcXHRcXHRcXHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBzaWduYWwgdGhhdCB0aGUgcmVzZXRcXG4rXFx0XFx0XFx0ICogZGlkIG5vdCBjb21wbGV0ZSwgYW5kIGVuc3VyZXMgdGhhdCBpZiB0aGUgcXVldWVcXG4rXFx0XFx0XFx0ICogaXMgcmVzZXQgYWdhaW4sIHRoZSByZS1pc3N1ZSBsb2dpYyBpblxcbitcXHRcXHRcXHQgKiBhcHFfcmVzZXRfY2hlY2soKSB3aWxsIHJlLWlzc3VlIHRoZSBaQVBRLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKSB7XFxuK1xcdFxcdFxcdGFwcV9yZXNldF9maW5hbGl6ZShxLCBcXHUwMDI2c3RhdHVzLCByZXQpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpIHtcXG4gXFx0XFx0XFx0cHJfbm90aWNlX3JhdGVsaW1pdGVkKFdBSVRfTVNHLCBlbGFwc2VkLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG5AQCAtMTk3NSwxMSArMjI5MSw3IEBAIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuIFxcdFxcdFxcdCAgICByZXQgPT0gLUVBR0FJTikge1xcbiBcXHRcXHRcXHRcXHRzdGF0dXMgPSBhcF96YXBxKHEtXFx1MDAzZWFwcW4sIDApO1xcbiBcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3N0YXR1cywgXFx1MDAyNnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAocS1cXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpXFxuLVxcdFxcdFxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiB9XFxuQEAgLTE5OTUsMjIgKzIzMDcsMjcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiBcXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfU1RBVEVfQ0hBTkdFX0lOX1BST0dSRVNTOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBMZXQncyB2ZXJpZnkgd2hldGhlciB0aGUgWkFQUSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9uIGEgd29yayBxdWV1ZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4gXFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTih0cnVlLFxcbi1cXHRcXHQgICAgIFxcXCJQUUFQL1pBUFEgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLCBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksXFxuLVxcdFxcdCAgICAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgYXJjaGl0ZWN0dXJlIGRlZmluZXMgb25seSB0aGUgcmVzcG9uc2UgY29kZXMgYWJvdmUgYXNcXG4rXFx0XFx0ICogdmFsaWQgZm9yIFpBUFEuIEFueSBvdGhlciByZXNwb25zZSBjb2RlIGluZGljYXRlcyBhIGhhcmR3YXJlXFxuK1xcdFxcdCAqIG9yIGZpcm13YXJlIGJ1Zy4gU2luY2UgYSBtYWxmdW5jdGlvbmluZyBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGVcXG4rXFx0XFx0ICogQVAgaW50ZXJydXB0cyBvciBETUEtd3JpdGUgdG8gdGhlIE5JQiwgZnJlZSB0aGUgQVFJQyByZXNvdXJjZXNcXG4rXFx0XFx0ICogcmF0aGVyIHRoYW4gbGVhayB0aGVtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVwb3J0X3phcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjA2MSwxMiArMjM3OCwyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuIFxcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cXHUwMDNla3ZtKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG4re1xcbitcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyKSB7XFxuK1xcdFxcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cXHUwMDNlcmVxX3RyaWdnZXIpO1xcbitcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xcbitcXHR9XFxuK1xcdGlmIChtYXRyaXhfbWRldi1cXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKSB7XFxuK1xcdFxcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKTtcXG4rXFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xcbiBcXG4gXFx0dmZpb19hcF9tZGV2X3Vuc2V0X2t2bShtYXRyaXhfbWRldik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0dmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMobWF0cml4X21kZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVxdWVzdChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIGludCBjb3VudClcXG5AQCAtMjQ1Nyw4ICsyNzkwLDkgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4gXFxuIFxcdHEtXFx1MDAzZWFwcW4gPSBhcHFuO1xcbiBcXHRxLVxcdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xcbi1cXHRtZW1zZXQoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXFx1MDAzZXJlc2V0X3N0YXR1cykpO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XFxuK1xcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcXG4rXFx0Zmx1c2hfd29yayhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yayk7XFxuIFxcbiBcXHRpZiAobWF0cml4X21kZXYpIHtcXG4gXFx0XFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xcbkBAIC0yNTM0LDYgKzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXHQgICAgdGVzdF9iaXRfaW52KGFwcWksICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cXHUwMDNlaW5mby5hcW0pKSB7XFxuIFxcdFxcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcXG4gXFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yayk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBxdWV1ZSBpcyBubyBsb25nZXIgaW4gdGhlIGhvc3QncyBBUCBjb25maWd1cmF0aW9uLlxcbitcXHRcXHQgKiBUaGUgaGFyZHdhcmUgY2Fubm90IERNQS13cml0ZSB0byB0aGUgTklCLCBzbyBpdCBpcyBzYWZlXFxuK1xcdFxcdCAqIHRvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIGRpcmVjdGx5IHdpdGhvdXQgaXNzdWluZyBhXFxuK1xcdFxcdCAqIFpBUFEuIElmIHRoZSBxdWV1ZSBpcyBub3QgYXNzaWduZWQgdG8gYW4gbWRldixcXG4rXFx0XFx0ICogdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKCkgaXMgYSBuby1vcC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG5AQCAtMjU0MSw4ICsyODg0LDggQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXHRcXHR2ZmlvX2FwX3VubGlua19xdWV1ZV9mcl9tZGV2KHEpO1xcbiBcXG4gXFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZhcGRldi1cXHUwMDNlZGV2aWNlLCBOVUxMKTtcXG4tXFx0a2ZyZWUocSk7XFxuIFxcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KG1hdHJpeF9tZGV2KTtcXG4rXFx0a2ZyZWUocSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yNjk3LDExICszMDQwLDExIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxcbiBcXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSxcXG4gXFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVxcdTAwM2VhcW0sXFxuIFxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVxcdTAwM2VhcW0sXFxuLVxcdFxcdFxcdFxcdCAgIEFQX0RFVklDRVMpO1xcbitcXHRcXHRcXHRcXHQgICBBUF9ET01BSU5TKTtcXG4gXFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sXFxuIFxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nICopcHJldl9jb25maWdfaW5mby1cXHUwMDNlYWRtLFxcbiBcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby1cXHUwMDNlYWRtLFxcbi1cXHRcXHRcXHRcXHQgICBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0XFx0XFx0ICAgQVBfRE9NQUlOUyk7XFxuIFxcbiBcXHRpZiAoZG9fcmVtb3ZlKVxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcXG5AQCAtMjgxMiw3ICszMTU1LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcXG4gXFx0XFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cXHUwMDNlYXFtX2FkZCxcXG4gXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hcW0sIGFxbV9hZGQsIEFQX0RPTUFJTlMpO1xcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhZG1fYWRkLFxcbi1cXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7XFxuK1xcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ET01BSU5TKTtcXG4gXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MDguNzc2ODEzOTY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTYxNjE5MDA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1MzOTAgLyBDT05GSUdfVkZJT19BUCkgYW5kIGNhbm5vdCBiZSBidWlsdCBvciBleGVjdXRlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NzdiNzNiMmMxNDRlZjQwODJlYTM2MGQxN2YyYmMwYjQwMjg2OWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwODo0ODowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZDAzNzYzMmRmODBlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFIFwiaW4gdXNlXCJcbiBcbiAjZGVmaW5lIEFQX1JFU0VUX0lOVEVSVkFMXHRcdDIwXHQvKiBSZXNldCBzbGVlcCBpbnRlcnZhbCAoMjBtcylcdFx0Ki9cbisjZGVmaW5lIEFQX1JFU0VUX01BWF9XQUlUXHRcdDIwMDBcdC8qIE1heGltdW0gd2FpdCBmb3IgcmVzZXQgKDIwMDBtcylcdCovXG4gXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWVzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpO1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3FsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKnFsaXN0KTtcbkBAIC0yMjYsMjcgKzIyNyw5MCBAQCBzdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfbWRldl9nZXRfcXVldWUoXG4gfVxuIFxuIC8qKlxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzXG4tICogQGFwcW46IFRoZSBBUCBRdWV1ZSBudW1iZXJcbi0gKlxuLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS5cbi0gKiBSZXR1cm5zIGlmIHRoZSBhcF90YXBxIGZ1bmN0aW9uIHN1Y2NlZWRlZCBhbmQgdGhlIGJpdCBpcyBjbGVhci5cbi0gKiBSZXR1cm5zIGlmIGFwX3RhcHEgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuLSAqIE90aGVyd2lzZSByZXRyaWVzIHVwIHRvIDUgdGltZXMgYWZ0ZXIgd2FpdGluZyAyMG1zLlxuKyAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSB3YWl0IGZvciB0aGUgSVIgYml0IHRvIGNsZWFyIGFmdGVyIGEgZGlzYWJsZVxuKyAqXG4rICogQGFwcW46IHRoZSBBUFFOIG9mIHRoZSBxdWV1ZVxuKyAqXG4rICogUmVwZWF0ZWRseSBwb2xscyB0aGUgQVAgcXVldWUgc3RhdHVzIHZpYSBQUUFQKFRBUFEpIGV2ZXJ5IDIwbXMgdW50aWwgdGhlIElSXG4rICogYml0IGlzIGNsZWFyLCB0aGUgcXVldWUgYmVjb21lcyBub24tb3BlcmF0aW9uYWwsIG9yIDUgcmV0cmllcyBhcmUgZXhoYXVzdGVkLlxuKyAqXG4rICogQmVjYXVzZSBQUUFQKEFRSUMpIGRpc2FibGUgaW5pdGlhdGVzIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLCBhXG4rICogY29uZGl0aW9uLWNvZGUgMCBjb21wbGV0aW9uIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgSVIgYml0IGhhcyBiZWVuIGNsZWFyZWQuXG4rICogVGhlIGhvc3QgbXVzdCBjb25maXJtIElSPTAgYmVmb3JlIHVucGlubmluZyB0aGUgTklCIHBhZ2UgdG8gYXZvaWQgYSB3aWxkXG4rICogRE1BIHdyaXRlIHRvIGEgZnJlZWQgcGFnZS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAtIDBcdFx0aWYgdGhlIElSIGJpdCBpcyBjbGVhciAoaS5lLiwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQpLlxuKyAqXG4rICogLSAtRU5PREVWXHRpZiB0aGUgUFFBUC1UQVBRIHJlc3BvbnNlIGNvZGUgaW5kaWNhdGVzIHRoZSBxdWV1ZSBpcyBub3QgYXZhaWxhYmxlLFxuKyAqXHRcdGlzIGRlY29uZmlndXJlZCwgb3IgaXMgY2hlY2tzdG9wcGVkIChpLmUuLCBub3Qgb3BlcmF0aW9uYWwpLlxuKyAqXG4rICogLSAtRVRJTUVET1VUXHR0aGUgZnVuY3Rpb24gdGltZWQgb3V0IGJlZm9yZSB0aGUgSVIgYml0IHdhcyBjbGVhcmVkLlxuICAqL1xuLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4rc3RhdGljIHZvaWQgcmVwb3J0X3RhcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuK3tcbitcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoVEFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4rXHRlbHNlXG4rXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJQUUFQKFRBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcblwiLFxuK1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVwb3J0X2lycWNsZWFyX3RpbWVvdXQoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuK3tcbitcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4rXHRlbHNlXG4rXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJQUUFQKFRBUFEpIHRpbWVkIG91dCB3YWl0aW5nIGZvciBJUlEgY2xlYXIgb24gJTAyeC4lMDR4OiByYz0lIzAyeFxcblwiLFxuK1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXG4re1xuK1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChBUUlDKSBkaXNhYmxlIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggcmM9JSMwMnhcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbitcdGVsc2VcbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZXBvcnRfemFwcV9yYyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXG4re1xuK1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChaQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbitcdGVsc2VcbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoWkFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuIFxuIFx0ZG8ge1xuLVx0XHRzdGF0dXMgPSBhcF90YXBxKGFwcW4sIE5VTEwpO1xuK1x0XHRzdGF0dXMgPSBhcF90YXBxKHEtXHUwMDNlYXBxbiwgTlVMTCk7XG4gXHRcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4gXHRcdFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXG4tXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuIFx0XHRcdG1zbGVlcCgyMCk7XG5AQCAtMjU1LDE0ICszMTksMTQgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6ICUwNHhcXG5cIiwgX19mdW5jX18sXG4tXHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuK1x0XHRcdHJldHVybiAtRU5PREVWO1xuIFx0XHR9XG4gXHR9IHdoaWxlICgtLXJldHJ5KTtcbiBcbi1cdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6ICUwNHggY291bGQgbm90IGNsZWFyIElSIGJpdFxcblwiLFxuLVx0XHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XG4rXHRyZXBvcnRfaXJxY2xlYXJfdGltZW91dChxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICszNTMsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZXMgYW5kIGNsZWFycyBhbiBhcF9xdWV1ZSBpbnRlcnJ1cHRcbi0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWVcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxuKyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuKyAqXG4rICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3NcbisgKiAoQVBfUkVTUE9OU0VfTk9STUFMIG9yIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEKSwgcG9sbHMgdmlhXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHVudGlsIHRoZSBJUiBiaXQgaXMgY29uZmlybWVkIGNsZWFyIGJlZm9yZVxuKyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXNcbisgKiBuZWNlc3NhcnkgYmVjYXVzZSBBUUlDIGRpc2FibGUgaXMgYXN5bmNocm9ub3VzOiBmcmVlaW5nIHRoZSBOSUIgYmVmb3JlIElSPTBcbisgKiBpcyBjb25maXJtZWQgcmlza3MgYSB3aWxkIERNQSB3cml0ZSB0byBhIGZyZWVkIGhvc3QgcGFnZS5cbiAgKlxuLSAqIFVzZXMgYXBfYXFpYyB0byBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRpb24gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcywgcmVzZXRcbi0gKiBpbiBwcm9ncmVzcyBvciBJUlEgZGlzYWJsZSBjb21tYW5kIGFscmVhZHkgcHJvY2VlZGVkOiBjYWxsc1xuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoKSB0byBjaGVjayBmb3IgdGhlIElSUSBiaXQgdG8gYmUgY2xlYXJcbi0gKiBhbmQgY2FsbHMgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKCkgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWRcbi0gKiB3aXRoIHRoZSBBUCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG4rICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXNcbisgKiBpbiBwcm9ncmVzcy5cbiAgKlxuLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLFxuLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy5cbisgKiBJZiB0aGUgSVIgYml0IGNhbm5vdCBiZSBjb25maXJtZWQgY2xlYXIgKHRpbWVvdXQpLCB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0XG4rICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlXG4rICogYWxsb2NhdG9yLCBhIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwgYWRkcmVzcyB3b3VsZFxuKyAqIGNvcnJ1cHQgbWVtb3J5IGJlbG9uZ2luZyB0byBhIG5ldyBvd25lciDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkIGNyYXNoXG4rICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuXG4gICpcbi0gKiBSZXR1cm5zIGlmIGFwX2FxaWMgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuKyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbisgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvXG4rICogdGhlIE5JQi5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTMxMCwzNCArMzgyLDg3IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4rXHRpbnQgcmV0cmllcyA9IDUsIHJldDtcbiBcbiBcdGRvIHtcbiBcdFx0c3RhdHVzID0gYXBfYXFpYyhxLVx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XG4gXHRcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRcdFx0dmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLVx1MDAzZWFwcW4pO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4rXHRcdFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcbitcdFx0XHQgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0XG4rXHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuK1x0XHRcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocSk7XG4rXHRcdFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxuK1x0XHRcdFx0Z290byBlbmRfZnJlZTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRpbWVkIG91dCB3YWl0aW5nIHRvIGNvbmZpcm0gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuXG4rXHRcdFx0ICogSWYgYXBfYXFpYyByZXR1cm5lZCBOT1JNQUwsIHRoZSBndWVzdCB3b3VsZCBpbmNvcnJlY3RseVxuK1x0XHRcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxuK1x0XHRcdCAqIHJldXNlIHRoZSBOSUIgd2hpbGUgaGFyZHdhcmUgY2FuIHN0aWxsIHdyaXRlIHRvIGl0LlxuK1x0XHRcdCAqIFplcm8gdGhlIHN0YXR1cyB3b3JkIGFuZCBzZXQgT1RIRVJXSVNFX0NIQU5HRUQgdG8gbWltaWNcbitcdFx0XHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcbitcdFx0XHQgKiBzaWduYWxzIHRvIHRoZSBndWVzdCB0aGF0IHRoZSByZXNldCBvcGVyYXRpb24gZGlkIG5vdFxuK1x0XHRcdCAqIGNvbXBsZXRlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbitcdFx0XHRcdG1lbXNldChcdTAwMjZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTtcbitcdFx0XHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XG4rXHRcdFx0fVxuK1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbitcdFx0Y2FzZSBBUF9SRVNQT05TRV9TVEFURV9DSEFOR0VfSU5fUFJPR1JFU1M6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuK1x0XHRcdC8qIEFQIG5vdCBvcGVyYXRpb25hbDsgbm8gZnVydGhlciBpbnRlcnJ1cHRzIHBvc3NpYmxlICovXG4rXHRcdFx0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4rXHRcdGNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9HSVNBOlxuK1x0XHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOlxuK1x0XHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi9cbi1cdFx0XHRXQVJOX09OQ0UoMSwgXCIlczogYXBfYXFpYyBzdGF0dXMgJWRcXG5cIiwgX19mdW5jX18sXG4tXHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbi1cdFx0XHRnb3RvIGVuZF9mcmVlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGhlIEFRSUMgZGlzYWJsZSB3YXMgcmVqZWN0ZWQ7IElSUSBpcyBzdGlsbCBlbmFibGVkXG4rXHRcdFx0ICogYW5kIHRoZSBoYXJkd2FyZSBzdGlsbCBob2xkcyB0aGUgTklCIGFkZHJlc3MuIERvIG5vdFxuK1x0XHRcdCAqIGZyZWUgcmVzb3VyY2VzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJlcG9ydF9hcWljX2Rpc2FibGVfZXJyb3IocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuK1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKHJldHJpZXMtLSk7XG4gXG4tXHRXQVJOX09OQ0UoMSwgXCIlczogYXBfYXFpYyBzdGF0dXMgJWRcXG5cIiwgX19mdW5jX18sXG4tXHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuK1x0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXG4rZW5kX2ZhaWw6XG4rXHQvKlxuK1x0ICogV2UgYXJlIGhlcmUgZWl0aGVyIGJlY2F1c2UgdGhlIEFRSUMgaW5zdHJ1Y3Rpb24gZmFpbGVkIHRvIGRpc2FibGVcbitcdCAqIGludGVycnVwdHMsIG9yIGJlY2F1c2UgSVI9MCBjb3VsZCBub3QgYmUgY29uZmlybWVkLiBJbiBlaXRoZXIgY2FzZVxuK1x0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcbitcdCAqIHRvIHRoZSBOSUIsIGFuZCB1bnBpbm5pbmcgdGhlIHBhZ2Ugd291bGQgYWxsb3cgaXQgdG8gYmUgcmVhbGxvY2F0ZWRcbitcdCAqIHRvIGEgbmV3IG93bmVyLiBBIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWxcbitcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJ3MgbWVtb3J5IOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXRcbitcdCAqIGNvdWxkIGNyYXNoIG9yIGNvbXByb21pc2UgdGhlIGhvc3Qga2VybmVsLiBUaGUgcmVzb3VyY2VzIGFyZVxuK1x0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxuK1x0ICovXG4rXHRyZXR1cm4gc3RhdHVzO1xuK1xuIGVuZF9mcmVlOlxuK1x0LypcbitcdCAqIFRoaXMgbGFiZWwgaXMgcmVhY2hlZCBiZWNhdXNlIHRoZSBxdWV1ZSB3YXMgc3VjY2Vzc2Z1bGx5IGRpc2FibGVkLFxuK1x0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcbitcdCAqIGludGVycnVwdHMgY2FuIG5vdCBiZSBwcm9jZXNzZWQsIHNvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIC0gdGhlIHBpbm5lZCBOSUJcbitcdCAqIHBhZ2UgYW5kIHRoZSByZWdpc3RlcmVkIGd1ZXN0IElTQyAtIHVzZWQgdG8gZW5hYmxlIGludGVycnVwdHMgc28gdGhleSB3aWxsXG4rXHQgKiBub3QgYmUgbGVha2VkLlxuK1x0ICovXG4gXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRyZXR1cm4gc3RhdHVzO1xuIH1cbkBAIC00MDEsMjIgKzUyNiwyOSBAQCBzdGF0aWMgaW50IGVuc3VyZV9uaWJfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF9pcnFfZW5hYmxlIC0gRW5hYmxlIEludGVycnVwdGlvbiBmb3IgYSBBUFFOXG4rICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0XG4gICpcbi0gKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVyc1xuKyAqIEBxOlx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGZvciB3aGljaCBpbnRlcnJ1cHRzIGFyZSB0byBiZSBlbmFibGVkXG4gICogQGlzYzogdGhlIGd1ZXN0IElTQyB0byByZWdpc3RlciB3aXRoIHRoZSBHSUIgaW50ZXJmYWNlXG4tICogQHZjcHU6IHRoZSB2Y3B1IG9iamVjdCBjb250YWluaW5nIHRoZSByZWdpc3RlcnMgc3BlY2lmeWluZyB0aGUgcGFyYW1ldGVyc1xuLSAqXHQgIHBhc3NlZCB0byB0aGUgUFFBUChBUUlDKSBpbnN0cnVjdGlvbi5cbisgKiBAdmNwdTogdGhlIHZjcHUgd2hvc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIFBRQVAoQVFJQykgcGFyYW1ldGVyc1xuKyAqXG4rICogUGlucyB0aGUgZ3Vlc3QgTklCIHBhZ2UsIHJlZ2lzdGVycyB0aGUgZ3Vlc3QgSVNDIHdpdGggdGhlIEdJQiB0byBvYnRhaW4gYVxuKyAqIGhvc3QgSVNDLCBhbmQgcmVpc3N1ZXMgUFFBUChBUUlDKSB3aXRoIHRoZSB0cmFuc2xhdGVkIGhvc3QtYWJzb2x1dGUgTklCXG4rICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cbiAgKlxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcbi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQ1xuKyAqIFRoZSBjb25kaXRpb24gY29kZSBhbmQgQVAtcXVldWUgc3RhdHVzIHdvcmQgcmV0dXJuZWQgYnkgUFFBUChBUUlDKSBhcmVcbisgKiByZWZsZWN0ZWQgYmFjayB0byB0aGUgZ3Vlc3QgYXMtaXMuIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWxcbisgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LlxuICAqXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcbi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbisgKiBSZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGJhc2VkIHNvbGVseSBvbiB3aGV0aGVyIGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOlxuKyAqIC0gQVBfUkVTUE9OU0VfTk9STUFMIChDQz0wKTogaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI7IHRoZSBvbGQgcGlubmVkXG4rICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuXG4rICogLSBBbGwgb3RoZXIgcmVzcG9uc2VzOiBoYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQjsgdGhlIG5ld2x5IHBpbm5lZFxuKyAqICAgcGFnZSBhbmQgcmVnaXN0ZXJlZCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgcHJldmlvdXNseSBzYXZlZCByZXNvdXJjZXMgYXJlXG4rICogICBsZWZ0IGludGFjdC5cbiAgKlxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxuLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LlxuKyAqIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpcyByZXR1cm5lZCBpZiB2ZmlvX3Bpbl9wYWdlcygpIG9yXG4rICoga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcigpIGZhaWxzIGJlZm9yZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBpcyBpc3N1ZWQuXG4gICpcbiAgKiBSZXR1cm46IFx1MDAyNnN0cnVjdCBhcF9xdWV1ZV9zdGF0dXNcbiAgKi9cbkBAIC00MjgsMTcgKzU2MCwxOSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9O1xuIFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XG4gXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xuLVx0aW50IG5pc2M7XG4rXHRpbnQgbmlzYywgcmV0O1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0cGh5c19hZGRyX3QgaF9uaWI7XG4gXHRkbWFfYWRkcl90IG5pYjtcbi1cdGludCByZXQ7XG4gXG4gXHQvKiBWZXJpZnkgdGhhdCB0aGUgbm90aWZpY2F0aW9uIGluZGljYXRvciBieXRlIGFkZHJlc3MgaXMgdmFsaWQgKi9cbiBcdGlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCBcdTAwMjZuaWIpKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXywgXHUwMDI2bmliLCBxLVx1MDAzZWFwcW4pO1xuLVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IGludmFsaWQgTklCIGFkZHJlc3MgJXBhZFxcblwiLFxuK1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuK1x0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgXHUwMDI2bmliKTtcbiBcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7XG4gXHRcdHJldHVybiBzdGF0dXM7XG4gXHR9XG5AQCAtNDUzLDcgKzU4NywxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCxcIlxuIFx0XHRcdFx0IFwibmliPSVwYWQsIGFwcW49JSMwNHhcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXywgcmV0LCBcdTAwMjZuaWIsIHEtXHUwMDNlYXBxbik7XG4tXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogdmZpb19waW5fcGFnZXMgZmFpbGVkIHJjPSVkXFxuXCIsXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByZXQpO1xuIFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUztcbiBcdFx0cmV0dXJuIHN0YXR1cztcbiBcdH1cbkBAIC00NzYsNyArNjEzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiBcdGlmIChuaXNjIFx1MDAzYyAwKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXywgbmlzYywgaXNjLCBxLVx1MDAzZWFwcW4pO1xuLVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgcmVnaXN0cmF0aW9uIGZhaWxlZCByYz0lZCBpc2M9JWRcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIG5pc2MsIGlzYyk7XG4gXHRcdHZmaW9fdW5waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEpO1xuIFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUztcbiBcdFx0cmV0dXJuIHN0YXR1cztcbkBAIC00ODksMjQgKzYyOSwzOCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kXG4rXHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbitcdFx0ICogVGhlIG5ldyByZXNvdXJjZXMgYXJlIHNhdmVkIGZvciB0cmFja2luZyBhbmQgZnV0dXJlIHRlYXJkb3duLlxuK1x0XHQgKlxuK1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuK1x0XHQgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuIFRoZVxuK1x0XHQgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZVxuK1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuIFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcbiBcdFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBpc2M7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbi1cdFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXG4rXHRkZWZhdWx0OlxuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZVxuK1x0XHQgKiBwcmV2aW91c2x5IHNhdmVkIE5JQiBhbmQgZ3Vlc3QgSVNDIHJlbWFpbiBhY3RpdmUgYW5kIG11c3RcbitcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuK1x0XHQgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC5cbitcdFx0ICovXG4gXHRcdHJldCA9IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3Rlcihrdm0sIGlzYyk7XG4tXHRcdGlmIChyZXQpXG4rXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwiJXM6IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3RlcjogcmM9JWQgaXNjPSVkLCBhcHFuPSUjMDR4XFxuXCIsXG4gXHRcdFx0XHRcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXHUwMDNlYXBxbik7XG4rXHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbitcdFx0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgdW5yZWdpc3RlciBmYWlsZWQgcmM9JWQgaXNjPSVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmV0LCBpc2MpO1xuK1x0XHR9XG4gXHRcdHZmaW9fdW5waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEpO1xuIFx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCIlczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxcblwiLCBfX2Z1bmNfXywgcS1cdTAwM2VhcHFuLFxuLVx0XHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbi1cdFx0dmZpb19hcF9pcnFfZGlzYWJsZShxKTtcbi1cdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG5AQCAtNTE3LDYgKzY3MSwxMSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRcdFx0XHQgYXFpY19naXNhLnpvbmUsIGFxaWNfZ2lzYS5pciwgYXFpY19naXNhLmdpc2MsXG4gXHRcdFx0XHQgYXFpY19naXNhLmdmLCBhcWljX2dpc2EuZ2lzYSwgYXFpY19naXNhLmlzYyxcbiBcdFx0XHRcdCBxLVx1MDAzZWFwcW4pO1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggcmM9JSMwMnhcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBzdGF0dXM7XG5AQCAtNjAxLDcgKzc2MCw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCEodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2EgXHUwMDI2IEVDQV9BSVYpKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxuXCIsXG4gXHRcdFx0XHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNhKTtcbi1cbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWRcXG5cIixcbitcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuQEAgLTYxMCw3ICs3NzAsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcblwiLFxuIFx0XHRcdFx0IF9fZnVuY19fLCBhcHFuKTtcbi1cbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwiLFxuK1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNjIzLDYgKzc4NCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRWRklPX0FQX0RCRl9XQVJOKFwiJXM6IG1kZXYgJTA4bHgtJTA0bHgtJTA0bHgtJTA0bHgtJTA0bHglMDhseCBub3QgaW4gdXNlOiBhcHFuPTB4JTA0eFxcblwiLFxuIFx0XHRcdFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcbiBcdFx0XHRcdCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLCBhcHFuKTtcbitcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYobWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBtZGV2IG5vdCBpbiB1c2VcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbkBAIC02MzEsMTEgKzc5NSwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcIiVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwiLFxuIFx0XHRcdFx0IF9fZnVuY19fLCBBUF9RSURfQ0FSRChhcHFuKSxcbiBcdFx0XHRcdCBBUF9RSURfUVVFVUUoYXBxbikpO1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbitcdFx0XHRcdCAgICAgXCJQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IHF1ZXVlIG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlcnVuLVx1MDAzZXMucmVncy5ncHJzWzFdO1xuLVxuIFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cbiBcdGlmICgoc3RhdHVzIFx1MDAzZVx1MDAzZSAoNjMgLSAxNikpIFx1MDAyNiAweDAxKVxuIFx0XHRxc3RhdHVzID0gdmZpb19hcF9pcnFfZW5hYmxlKHEsIHN0YXR1cyBcdTAwMjYgMHgwNywgdmNwdSk7XG5AQCAtNjkyLDE0ICs4NTgsMTQgQEAgc3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIFx0aWYgKCFxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRzd2l0Y2ggKHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbi1cdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4rXHQvKlxuK1x0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcbitcdCAqIGFwcV9yZXNldF9jaGVjaygpIHZpYSBUQVBRIHN0YXR1cyBiaXQgdmVyaWZpY2F0aW9uLiBUaGlzIGlzXG4rXHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbitcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxuK1x0ICogdG8gdGhlIGd1ZXN0LlxuK1x0ICovXG4rXHRyZXR1cm4gcS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUw7XG4gfVxuIFxuIC8qXG5AQCAtMTQxMCw3ICsxNTc2LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4ge1xuIFx0REVDTEFSRV9CSVRNQVAoYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFxuLVx0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RFVklDRVMpO1xuK1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE1LDM3ICsyMDgxLDEyNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfZmluZF9xdWV1ZShpbnQgYXBxbilcbiBcdHJldHVybiBxO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbitzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4rXHRcdFx0ICAgIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbitcdFx0LypcbitcdFx0ICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzXG4rXHRcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXG4rXHRcdCAqIHJldHVybmVkIGZyb20gVEFQUSBtdXN0IGJlIHZlcmlmaWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVcbitcdFx0ICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3RhdHVzLVx1MDAzZXF1ZXVlX2VtcHR5IFx1MDAyNlx1MDAyNiAhc3RhdHVzLVx1MDAzZXJlcGxpZXNfd2FpdGluZyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdGF0dXMtXHUwMDNlaXJxX2VuYWJsZWQgXHUwMDI2XHUwMDI2ICFzdGF0dXMtXHUwMDNlYXN5bmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIEFzeW5jIHplcm9pemF0aW9uIHN0aWxsIGluIHByb2dyZXNzOyBrZWVwIHdhaXRpbmcgKi9cbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XG4tXHRcdHJldHVybiAwO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsOiBpbnRlcnJ1cHRzIGFyZSBub3QgcG9zc2libGUgc29cbitcdFx0ICogQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC4gSG93ZXZlciwgemVyb2l6YXRpb25cbitcdFx0ICogY2Fubm90IGJlIGNvbmZpcm1lZCBiZWNhdXNlIGFsbCBzdGF0dXMgYml0cyBhcmUgemVyb2VkIHdoZW5cbitcdFx0ICogdGhlc2UgcmVzcG9uc2UgY29kZXMgYXJlIHJldHVybmVkIOKAlCB0aGVyZSBpcyBubyB3YXkgdG9cbitcdFx0ICogZGlzdGluZ3Vpc2ggYSB6ZXJvaXplZCBxdWV1ZSBmcm9tIG9uZSB0aGF0IGhhcyBub3QgYmVlblxuK1x0XHQgKiB6ZXJvaXplZC4gUmV0dXJuIC1FTk9ERVYgdG8gc2lnbmFsIHRoYXQgQVFJQyByZXNvdXJjZXMgc2hvdWxkXG4rXHRcdCAqIGJlIGZyZWVkIGJ1dCB0aGF0IHplcm9pemF0aW9uIGhhcyBub3QgYmVlbiBjb25maXJtZWQuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4rXHRcdC8qXG4rXHRcdCAqIEEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MuIEl0IG1heSBiZSB0aGUgcmVzZXQgd2UgaXNzdWVkIG9yIG9uZVxuK1x0XHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXG4rXHRcdCAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy5cbitcdFx0ICovXG4gXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbitcdFx0ICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4gXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XG4gXHRcdC8qXG4rXHRcdCAqIEFQX1JFU1BPTlNFX0JVU1k6XG4rXHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbitcdFx0ICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLlxuK1x0XHQgKlxuK1x0XHQgKiBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRVxuK1x0XHQgKiBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XG4gXHRcdCAqIFRoZXNlIGFzeW5jaHJvbm91cyByZXNwb25zZSBjb2RlcyBpbmRpY2F0ZSBhIFBRQVAoQUFQUSlcbiBcdFx0ICogaW5zdHJ1Y3Rpb24gdG8gYXNzb2NpYXRlIGEgc2VjcmV0IHdpdGggdGhlIGd1ZXN0IGZhaWxlZC4gQWxsXG4gXHRcdCAqIHN1YnNlcXVlbnQgQVAgaW5zdHJ1Y3Rpb25zIHdpbGwgZW5kIHdpdGggdGhlIGFzeW5jaHJvbm91c1xuLVx0XHQgKiByZXNwb25zZSBjb2RlIHVudGlsIHRoZSBBUCBxdWV1ZSBpcyByZXNldDsgc28sIGxldCdzIHJldHVyblxuLVx0XHQgKiBhIHZhbHVlIGluZGljYXRpbmcgYSByZXNldCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uXG4rXHRcdCAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiBcdFx0ICovXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuK1xuIFx0ZGVmYXVsdDpcbi1cdFx0V0FSTih0cnVlLFxuLVx0XHQgICAgIFwiZmFpbGVkIHRvIHZlcmlmeSByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHg6IFRBUFEgcmM9JXVcXG5cIixcbi1cdFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKTtcbitcdFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLVx1MDAzZXJlc3BvbnNlX2NvZGUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbit7XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVx1MDAzZXNhdmVkX2lvdmEpIHtcbitcdFx0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpIHtcbitcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0XHQgICAgIFwiUmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eDogbGVha2luZyBBUUlDIHJlc291cmNlcyAoTklCIHBhZ2UgXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcblwiLFxuK1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuK1x0XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuK1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHRcdCAgICAgXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cIixcbitcdFx0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gI2RlZmluZSBXQUlUX01TRyBcIldhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpXCJcbiBcbisvKipcbisgKiBhcHFfcmVzZXRfZmluYWxpemUgLSBzdG9yZSBmaW5hbCBUQVBRIHN0YXR1cyBhbmQgZnJlZSBBUUlDIHJlc291cmNlcy5cbisgKiBAcTogICAgICB0aGUgdmZpb19hcF9xdWV1ZVxuKyAqIEBzdGF0dXM6IHRoZSBmaW5hbCBBUCBxdWV1ZSBzdGF0dXMgcmV0dXJuZWQgYnkgUFFBUChUQVBRKVxuKyAqIEByZXQ6ICAgIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhcHFfc3RhdHVzX2NoZWNrKClcbisgKlxuKyAqIENvcGllcyB0aGUgZnVsbCBUQVBRIHN0YXR1cyB3b3JkIHRvIHEtXHUwMDNlcmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1c1xuKyAqIGJpdHMgcmVmbGVjdCB0aGUgY29uZmlybWVkIGVuZCBzdGF0ZSBvZiB0aGUgcXVldWUuIElmIHJldCA9PSAwLFxuKyAqIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYW5kIHRoZSByZXNwb25zZSBjb2RlIGlzIG92ZXJyaWRkZW4gd2l0aFxuKyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yXG4rICogcmV0ID09IC1FTk9ERVYgKERFQ09ORklHVVJFRCBvciBDSEVDS1NUT1BQRUQpLCB0aGUgbm9uLXplcm8gcmVzcG9uc2VcbisgKiBjb2RlIGlzIGxlZnQgaW50YWN0IHNvIF9xdWV1ZV9wYXNzYWJsZSgpIGNvcnJlY3RseSByZXR1cm5zIGZhbHNlLlxuKyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFwcV9yZXNldF9maW5hbGl6ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbitcdFx0XHQgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KVxuK3tcbitcdG1lbWNweShcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgc3RhdHVzLCBzaXplb2YoKnN0YXR1cykpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9OT1JNQUw7XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIHtcbiBcdGludCByZXQgPSAtRUJVU1ksIGVsYXBzZWQgPSAwO1xuQEAgLTE5NTgsOSArMjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRtc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpO1xuIFx0XHRlbGFwc2VkICs9IEFQX1JFU0VUX0lOVEVSVkFMO1xuIFx0XHRzdGF0dXMgPSBhcF90YXBxKHEtXHUwMDNlYXBxbiwgTlVMTCk7XG4tXHRcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socS1cdTAwM2VhcHFuLCBcdTAwMjZzdGF0dXMpO1xuLVx0XHRpZiAocmV0ID09IC1FSU8pXG4rXHRcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socSwgXHUwMDI2c3RhdHVzKTtcbitcdFx0aWYgKHJldCA9PSAtRUlPKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUQVBRIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2UgY29kZS4gVGhpc1xuK1x0XHRcdCAqIGluZGljYXRlcyBhIGhhcmR3YXJlIG9yIGZpcm13YXJlIGJ1ZzsgdGhlIHF1ZXVlXG4rXHRcdFx0ICogY2Fubm90IGdlbmVyYXRlIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZVxuK1x0XHRcdCAqIE5JQiwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgcmF0aGVyIHRoYW4gbGVhayB0aGVtLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aWYgKGVsYXBzZWQgXHUwMDNlPSBBUF9SRVNFVF9NQVhfV0FJVCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmVyb2l6YXRpb24gY29uZmlybWVkIChyZXQgPT0gMCk6IHRoZSBUQVBRIHN0YXR1cyBiaXRzXG4rXHRcdFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXG4rXHRcdFx0ICogc3VjY2Vzc2Z1bGx5LiBGcmVlIEFRSUMgcmVzb3VyY2VzIGFuZCByZXR1cm4uXG4rXHRcdFx0ICpcbitcdFx0XHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXG4rXHRcdFx0ICogZGVjb25maWd1cmVkIG9yIGNoZWNrc3RvcHBlZDsgaW50ZXJydXB0cyBhcmUgbm90XG4rXHRcdFx0ICogcG9zc2libGUgc28gQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC5cbitcdFx0XHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcbitcdFx0XHQgKiBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGUgaW50ZXJydXB0cywgc28gdGhlIE5JQiBwYWdlIGlzXG4rXHRcdFx0ICogbm8gbG9uZ2VyIGEgRE1BIHRhcmdldCBhbmQgaXQgaXMgc2FmZSB0byBmcmVlIGl0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKSB7XG4rXHRcdFx0XHRhcHFfcmVzZXRfZmluYWxpemUocSwgXHUwMDI2c3RhdHVzLCByZXQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRpbWVkIG91dCB3aXRob3V0IGJlaW5nIGFibGUgdG8gdmVyaWZ5IHphcHEgY29tcGxldGVkLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogVGhlIEFRSUMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlIC0gdGhlIHBpbm5lZFxuK1x0XHRcdCAqIHBhZ2UgY29udGFpbmluZyB0aGUgTklCIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLVxuK1x0XHRcdCAqIGNhbm5vdCBiZSBmcmVlZCBoZXJlLiBUaGUgTklCIGlzIHRoZSBhY3RpdmUgRE1BIHRhcmdldFxuK1x0XHRcdCAqIGZvciBBUCBpbnRlcnJ1cHQgZGVsaXZlcnkgdW50aWwgdGhlIHJlc2V0IGNvbXBsZXRlcztcbitcdFx0XHQgKiBmcmVlaW5nIHRoZSBwaW5uZWQgcGFnZSB3aGlsZSB0aGUgaGFyZHdhcmUgbWF5IHN0aWxsXG4rXHRcdFx0ICogd3JpdGUgdG8gaXQgd291bGQgcmVzdWx0IGluIGEgd2lsZCBETUEgd3JpdGUgdGhhdCBjb3VsZFxuK1x0XHRcdCAqIGNvcnJ1cHQgaG9zdCBtZW1vcnkuXG4rXHRcdFx0ICpcbitcdFx0XHQgKiBJZiB0aGUgcmVzZXQgZXZlbnR1YWxseSBjb21wbGV0ZXMsIGludGVycnVwdHMgd2lsbCBiZVxuK1x0XHRcdCAqIHRlcm1pbmF0ZWQgYW5kIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIElTQyByZWdpc3RyYXRpb25cbitcdFx0XHQgKiB3aWxsIGJlIGxlYWtlZC4gVGhpcyBpcyBwcmVmZXJhYmxlIHRvIGVpdGhlciBhIHdpbGQgRE1BXG4rXHRcdFx0ICogd3JpdGUgb3Igd2FpdGluZyBpbmRlZmluaXRlbHk6IGZsdXNoX3dvcmsoKSBjYWxsZXJzIGhvbGRcbitcdFx0XHQgKiB0aGUgbWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrIG11dGV4IHdoaWNoIHNlcmlhbGl6ZXMgYWNjZXNzXG4rXHRcdFx0ICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZFxuK1x0XHRcdCAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFplcm9pemF0aW9uIGNvdWxkIG5vdCBiZSBjb25maXJtZWQ7IHNldFxuK1x0XHRcdCAqIHJlc2V0X3N0YXR1cyB0byBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUy5cbitcdFx0XHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBzaWduYWwgdGhhdCB0aGUgcmVzZXRcbitcdFx0XHQgKiBkaWQgbm90IGNvbXBsZXRlLCBhbmQgZW5zdXJlcyB0aGF0IGlmIHRoZSBxdWV1ZVxuK1x0XHRcdCAqIGlzIHJlc2V0IGFnYWluLCB0aGUgcmUtaXNzdWUgbG9naWMgaW5cbitcdFx0XHQgKiBhcHFfcmVzZXRfY2hlY2soKSB3aWxsIHJlLWlzc3VlIHRoZSBaQVBRLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHtcbitcdFx0XHRhcHFfcmVzZXRfZmluYWxpemUocSwgXHUwMDI2c3RhdHVzLCByZXQpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuIFx0XHRcdHByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCxcbiBcdFx0XHRcdFx0ICAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbkBAIC0xOTc1LDExICsyMjkxLDcgQEAgc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqcmVzZXRfd29yaylcbiBcdFx0XHQgICAgcmV0ID09IC1FQUdBSU4pIHtcbiBcdFx0XHRcdHN0YXR1cyA9IGFwX3phcHEocS1cdTAwM2VhcHFuLCAwKTtcbiBcdFx0XHRcdG1lbWNweShcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgXHUwMDI2c3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7XG4tXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpXG4tXHRcdFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiB9XG5AQCAtMTk5NSwyMiArMjMwNywyNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX1NUQVRFX0NIQU5HRV9JTl9QUk9HUkVTUzpcbiBcdFx0LypcbiBcdFx0ICogTGV0J3MgdmVyaWZ5IHdoZXRoZXIgdGhlIFpBUFEgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvbiBhIHdvcmsgcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFx0XHRicmVhaztcbitcdGNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuIFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0V0FSTih0cnVlLFxuLVx0XHQgICAgIFwiUFFBUC9aQVBRIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0ldVxcblwiLFxuLVx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbitcdFx0LypcbitcdFx0ICogVGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIG9ubHkgdGhlIHJlc3BvbnNlIGNvZGVzIGFib3ZlIGFzXG4rXHRcdCAqIHZhbGlkIGZvciBaQVBRLiBBbnkgb3RoZXIgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgYSBoYXJkd2FyZVxuK1x0XHQgKiBvciBmaXJtd2FyZSBidWcuIFNpbmNlIGEgbWFsZnVuY3Rpb25pbmcgcXVldWUgY2Fubm90IGdlbmVyYXRlXG4rXHRcdCAqIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZSBOSUIsIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzXG4rXHRcdCAqIHJhdGhlciB0aGFuIGxlYWsgdGhlbS5cbitcdFx0ICovXG4rXHRcdHJlcG9ydF96YXBxX3JjKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDYxLDEyICsyMzc4LDI4IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiBcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cdTAwM2Vrdm0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuK3tcbitcdGlmIChtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlcikge1xuK1x0XHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIpO1xuK1x0XHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4rXHR9XG4rXHRpZiAobWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKSB7XG4rXHRcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIpO1xuK1x0XHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cbiBcdFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XG4gXG4gXHR2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKG1hdHJpeF9tZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVxdWVzdChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIGludCBjb3VudClcbkBAIC0yNDU3LDggKzI3OTAsOSBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIFx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbi1cdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4gXHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xuK1x0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNTM0LDYgKzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtXHUwMDNlaW5mby5hcW0pKSB7XG4gXHRcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuK1x0fSBlbHNlIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHF1ZXVlIGlzIG5vIGxvbmdlciBpbiB0aGUgaG9zdCdzIEFQIGNvbmZpZ3VyYXRpb24uXG4rXHRcdCAqIFRoZSBoYXJkd2FyZSBjYW5ub3QgRE1BLXdyaXRlIHRvIHRoZSBOSUIsIHNvIGl0IGlzIHNhZmVcbitcdFx0ICogdG8gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgZGlyZWN0bHkgd2l0aG91dCBpc3N1aW5nIGFcbitcdFx0ICogWkFQUS4gSWYgdGhlIHF1ZXVlIGlzIG5vdCBhc3NpZ25lZCB0byBhbiBtZGV2LFxuK1x0XHQgKiB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSBpcyBhIG5vLW9wLlxuK1x0XHQgKi9cbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0fVxuIFxuIGRvbmU6XG5AQCAtMjU0MSw4ICsyODg0LDggQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0XHR2ZmlvX2FwX3VubGlua19xdWV1ZV9mcl9tZGV2KHEpO1xuIFxuIFx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSwgTlVMTCk7XG4tXHRrZnJlZShxKTtcbiBcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KG1hdHJpeF9tZGV2KTtcbitcdGtmcmVlKHEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNjk3LDExICszMDQwLDExIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxuIFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoYXFyZW0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tXHUwMDNlYXFtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKiljdXJfY29uZmlnX2luZm8tXHUwMDNlYXFtLFxuLVx0XHRcdFx0ICAgQVBfREVWSUNFUyk7XG4rXHRcdFx0XHQgICBBUF9ET01BSU5TKTtcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuK1x0XHRcdFx0ICAgQVBfRE9NQUlOUyk7XG4gXG4gXHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcbkBAIC0yODEyLDcgKzMxNTUsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbi1cdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbitcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ET01BSU5TKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODowOC43NzY4MjAzODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQyNDE2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGFuZCBpdHMgQXJjaGl0ZWN0dXJhbCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBgYW1kNjRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aCB0aGF0LiBJIHNlZSB0aGF0IHRoZSBmaWxlIHRvdWNoZWQgaXMgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBiaXQgb2YgYSBmbGFnIOKAkyB0aGUgYHMzOTBgIGRpcmVjdG9yeSBpbW1lZGlhdGVseSBzY3JlYW1zIElCTSBTeXN0ZW0vMzkwLCBvciBzMzkweCwgd2hpY2ggaXMgZGVmaW5pdGVseSAqbm90KiBgYW1kNjRgLlxuXG5TbywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgIGlzIGV2ZW4gKnJlbGV2YW50KiB0byBgYW1kNjRgLiBJcyBpdCBjb25kaXRpb25hbD8gSXMgdGhlcmUgc29tZSBjcm9zcy1hcmNoaXRlY3R1cmUgbWFnaWMgZ29pbmcgb24gdGhhdCBJJ20gbWlzc2luZz8gVGhlcmUncyBhbG1vc3QgY2VydGFpbmx5IG5vIGxlZ2l0aW1hdGUgY2FzZSB3aGVyZSB0aGlzIGZpbGUgd2lsbCBiZSBjb21waWxlZCBmb3IgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlLlxuXG5JJ2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgdG8gcGlucG9pbnQgZXhhY3RseSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgZ2V0cyBidWlsdCBhbmQgaWYgaXQgY2FuIGV2ZXIgYmUgY29tcGlsZWQgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gczM5MC4gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBzb3VyY2Ugb2YgdGhlIGFuc3dlci4gU29tZXRoaW5nIHNlZW1zIHdyb25nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MTEuOTE5MjQwNTA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDY2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0b1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlPTM3PXZmaW9fYXAtb2JqcyA6PSB2ZmlvX2FwX2Rydi5vIHZmaW9fYXBfb3BzLm9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19WRklPX0FQKSArPSB2ZmlvX2FwLm9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6NzojaWZuZGVmIFZGSU9fQVBfREVCVUdfSFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjg6I2RlZmluZSBWRklPX0FQX0RFQlVHX0hcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMTgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIwLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMTojZGVmaW5lIFZGSU9fQVBfREJGX0VSUiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0VSUiwgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMzojZGVmaW5lIFZGSU9fQVBfREJGX1dBUk4oLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9XQVJOLCAjI19fVkFfQVJHU19fKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI2LVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6Mjc6I2RlZmluZSBWRklPX0FQX0RCRl9EQkcoLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9ERUJVRywgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMzEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MzI6I2VuZGlmIC8qIFZGSU9fQVBfREVCVUdfSCAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxOTojZGVmaW5lIFZGSU9fQVBfUk9PVF9OQU1FIFxcXCJ2ZmlvX2FwXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoyMDojZGVmaW5lIFZGSU9fQVBfREVWX05BTUUgXFxcIm1hdHJpeFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlxcdHJvb3RfZGV2aWNlID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoVkZJT19BUF9ST09UX05BTUUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcXHRkZXZfc2V0X25hbWUoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIiVzXFxcIiwgVkZJT19BUF9ERVZfTkFNRSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExNy1cXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTgzOlxcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYsIFRISVNfTU9EVUxFLCBWRklPX0FQX0RSVl9OQU1FKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXFxcInBhc3N0aHJvdWdoXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcXFwiVkZJTyBBUCBQYXNzdGhyb3VnaCBEZXZpY2VcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTM0MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzQzLVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MzQ0OlxcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDUtXFx0ICAgICFXQVJOX09OKCEocS1cXHUwMDNlbWF0cml4X21kZXYgXFx1MDAyNlxcdTAwMjYgcS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSkpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM0Ni1cXHRcXHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSwgcS1cXHUwMDNlc2F2ZWRfaXNjKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MzQ3OlxcdFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM0OC1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NTU1PXN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NjktXFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFxcdTAwMjZuaWIpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU3MDpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU3MS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIFxcdTAwMjZuaWIsIHEtXFx1MDAzZWFwcW4pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU4Ni1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1ODc6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01ODgtXFx0XFx0XFx0XFx0IFxcXCJuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTMtXFx0aWYgKG5pc2MgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjYxNDpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTYxNS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIG5pc2MsIGlzYywgcS1cXHUwMDNlYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjU0LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjU1OlxcdFxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjU2LVxcdFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXFx1MDAzZWFwcW4pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY2Ni1cXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjY2NzpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUFFBUChBUUlDKSBmYWlsZWQgd2l0aCBzdGF0dXM9JSMwMng6IFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjY4LVxcdFxcdFxcdFxcdCBcXFwiem9uZT0lI3gsIGlyPSUjeCwgZ2lzYz0lI3gsIGY9JSN4LFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NDc9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzYwLVxcdGlmICghKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EgXFx1MDAyNiBFQ0FfQUlWKSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3NjE6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IEFJViBmYWNpbGl0eSBub3QgaW5zdGFsbGVkOiBhcHFuPTB4JTA0eCwgZWNhPTB4JTA0eFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzYyLVxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgYXBxbiwgdmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVjYSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzcwLVxcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzcxOlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBQUUFQKEFRSUMpIGhvb2sgbm90IHJlZ2lzdGVyZWQgd2l0aCB0aGUgdmZpb19hcCBkcml2ZXI6IGFwcW49MHglMDR4XFxcXG5cXFwiLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03NzItXFx0XFx0XFx0XFx0IF9fZnVuY19fLCBhcHFuKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODMtXFx0XFx0dmZpb19hcF9sZV9ndWlkX3RvX2JlX3V1aWQoXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2LVxcdTAwM2V1dWlkLCB1dWlkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzg0OlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBtZGV2ICUwOGx4LSUwNGx4LSUwNGx4LSUwNGx4LSUwNGx4JTA4bHggbm90IGluIHVzZTogYXBxbj0weCUwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc4NS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIHV1aWRbMF0sICB1dWlkWzFdLCB1dWlkWzJdLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5NC1cXHRpZiAoIXEpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzk1OlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk2LVxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgQVBfUUlEX0NBUkQoYXBxbiksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjE1Mj1zdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMTUzLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE1NDpcXHRpZiAocS1cXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cXHUwMDNlc2F2ZWRfaW92YSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMTU1LVxcdFxcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldikge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIxOTU9c3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyMDAtXFx0XFx0cS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9OT1JNQUw7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyMDE6XFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAyLVxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDM0PXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2dldF9kZXZpY2VfaW5mbyh1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDQ4LVxcdGluZm8ubnVtX3JlZ2lvbnMgPSAwO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDQ5OlxcdGluZm8ubnVtX2lycXMgPSBWRklPX0FQX05VTV9JUlFTO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDUwLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTQ9c3RhdGljIHNzaXplX3QgdmZpb19hcF9nZXRfaXJxX2luZm8odW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2My1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ2NDpcXHRpZiAoaW5mby5hcmdzeiBcXHUwMDNjIG1pbnN6IHx8IGluZm8uaW5kZXggXFx1MDAzZT0gVkZJT19BUF9OVU1fSVJRUylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY3LVxcdHN3aXRjaCAoaW5mby5pbmRleCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDY4OlxcdGNhc2UgVkZJT19BUF9SRVFfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY5LVxcdFxcdGluZm8uY291bnQgPSAxO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NzEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzI6XFx0Y2FzZSBWRklPX0FQX0NGR19DSEdfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVxcdFxcdGluZm8uY291bnQgPSAxO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0ODM9c3RhdGljIGludCB2ZmlvX2FwX2lycV9zZXRfaW5pdChzdHJ1Y3QgdmZpb19pcnFfc2V0ICppcnFfc2V0LCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDkzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDk0OlxcdHJldCA9IHZmaW9fc2V0X2lycXNfdmFsaWRhdGVfYW5kX3ByZXBhcmUoaXJxX3NldCwgMSwgVkZJT19BUF9OVU1fSVJRUyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ5NS1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmRhdGFfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU3Mj1zdGF0aWMgaW50IHZmaW9fYXBfc2V0X2lycXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg0LVxcdFxcdHN3aXRjaCAoaXJxX3NldC5pbmRleCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNTg1OlxcdFxcdGNhc2UgVkZJT19BUF9SRVFfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg2LVxcdFxcdFxcdHJldHVybiB2ZmlvX2FwX3NldF9yZXF1ZXN0X2lycShtYXRyaXhfbWRldiwgYXJnKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU4NzpcXHRcXHRjYXNlIFZGSU9fQVBfQ0ZHX0NIR19JUlFfSU5ERVg6XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1ODgtXFx0XFx0XFx0cmV0dXJuIHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKG1hdHJpeF9tZGV2LCBhcmcpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NDI9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NDktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI3NTA6XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlLnN5c2ZzX25hbWUgPSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI3NTE6XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlLnByZXR0eV9uYW1lID0gVkZJT19BUF9NREVWX05BTUVfSFdWSVJUO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzUyLVxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZXMgPSBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NzE9aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzkxLVxcdHEtXFx1MDAzZWFwcW4gPSBhcHFuO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzkyOlxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTMtXFx0SU5JVF9XT1JLKFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjEyOiNpZm5kZWYgX1ZGSU9fQVBfUFJJVkFURV9IX1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTM6I2RlZmluZSBfVkZJT19BUF9QUklWQVRFX0hfXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNjojZGVmaW5lIFZGSU9fQVBfTU9EVUxFX05BTUUgXFxcInZmaW9fYXBcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNzojZGVmaW5lIFZGSU9fQVBfRFJWX05BTUUgXFxcInZmaW9fYXBcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yOC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTQzPXN0cnVjdCB2ZmlvX2FwX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTQ2LVxcdGludFxcdGFwcW47XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNDc6I2RlZmluZSBWRklPX0FQX0lTQ19JTlZBTElEIDB4ZmZcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0OC1cXHR1bnNpZ25lZCBjaGFyIHNhdmVkX2lzYztcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTY1PXZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjg6I2VuZGlmIC8qIF9WRklPX0FQX1BSSVZBVEVfSF8gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MTEuOTY2MzExOTc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNjEzMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDT05GSUdfVkZJT19BUCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1ZGSU9fQVBgIG1pZ2h0IGhhdmUgc29tZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBzMzkwIGNyeXB0byBmcmFtZXdvcmsuIFNvLCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIGJ5IGxvb2tpbmcgZGlyZWN0bHkgaW50byB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gc2VlIHdoYXQsIGlmIGFueSwgY3J5cHRvLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYXJlIHRpZWQgaW50byBgQ09ORklHX1ZGSU9fQVBgLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsOyBpdOKAmWxsIGhlbHAgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmxpY3RzLCBidWlsZCBpc3N1ZXMsIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZ2V0IGEgc29saWQgb3ZlcnZpZXcgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVGhpcyBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgYWN0IGFzIGEgZ29vZCBjaGVja3BvaW50IGJlZm9yZSBJIGdvIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MTQuNDAyNDQ2NjA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzA1NzIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjE0LjQ1Mjc2NDM4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTUyMDczMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBoYXZpbmcgaXQ6XG5cbioqVkZJT19BUCBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgY29uZmlnIFZGSU9fQVBgIGlzIGRlZmluZWQsIG9yIHVzZWQsIHdpdGhpbiB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSdtIGdvaW5nIHRvIGtpY2sgb2ZmIGEgc2VhcmNoIGZvciBpdC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBnb2luZyB0byBiZSBhIGJyb2FkIHN3ZWVwIGFjcm9zcyB0aGUgd2hvbGUgcHJvamVjdCwgc28gSSBjYW4gc2VlIGV2ZXJ5IGNvbnRleHQgaW4gd2hpY2ggdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBleGlzdC4gR290dGEgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuIEl0J3MgdXN1YWxseSBmYXN0ZXIgdG8gc3RhcnQgYnJvYWQsIHRoZW4gcmVmaW5lLiBMZXQncyBnZXQgdGhlIHNlYXJjaCB1bmRlcndheS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgbW9kZXJhdGVseSBxdWljayBwcm9jZXNzLCBkZXBlbmRpbmcgb24gdGhlIHNwZWVkIG9mIG15IHNlYXJjaCB0b29sIGFuZCBob3cgZXhwYW5zaXZlIHRoZSBrZXJuZWwgcmVwbyBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoxNi4zMDc5NzU4MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMDcwMDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MzU9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NDUtXFxuYXJjaC9zMzkwL0tjb25maWc6ODQ2OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODQ3LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjE4LjQyODY4Mjg0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTc5MTYwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHMzOTAgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSBpbnRvIHRoZSBzMzkwIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiBpdHMgYnVpbGQgcHJvY2Vzcywgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDg0NiDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmaW5kIGEgcmVsZXZhbnQgc2VjdGlvbiwgZGVwZW5kaW5nIG9uIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIGNvbmZpZyBsb2dpYyBhbmQgYW55IGFzc29jaWF0ZWQgZGVmaW5pdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MjAuNDg2NjAxNjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdGhlbHBcXG4gODQxOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEkvTyBzdWJjaGFubmVscyB2aWEgVkZJTy1DQ1cuXFxuIDg0MjpcXHRcXG4gODQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDg0NDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cXG4gODQ1OlxcdFxcbiA4NDY6XFx0Y29uZmlnIFZGSU9fQVBcXG4gODQ3OlxcdFxcdGRlZl90cmlzdGF0ZSBuXFxuIDg0ODpcXHRcXHRwcm9tcHQgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1xcXCJcXG4gODQ5OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuIDg1MDpcXHRcXHRkZXBlbmRzIG9uIFZGSU9cXG4gODUxOlxcdFxcdGRlcGVuZHMgb24gQVBcXG4gODUyOlxcdFxcdHNlbGVjdCBWRklPX01ERVZcXG4gODUzOlxcdFxcdGhlbHBcXG4gODU0OlxcdFxcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcXG4gODU1OlxcdFxcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXFxuIDg1NjpcXHRcXG4gODU3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA4NTg6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxcbiA4NTk6XFx0XFxuIDg2MDpcXHRlbmRtZW51XFxuIDg2MTpcXHRcXG4gODYyOlxcdGNvbmZpZyBDQ1dcXG4gODYzOlxcdFxcdGRlZl9ib29sIHlcXG4gODY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoyMC40ODY2OTAyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjM3MDEyNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBDb2RlIFBhdGggQ29uZmxpY3RzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBwYXRocy4gVGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC9zMzkwL0tjb25maWdgLCBpcyB3aGVyZSBJIHNlZSB0aGUgYFZGSU9fQVBgIG9wdGlvbiBkZWZpbmVkLiBJIGtub3cgdGhhdCBtdWNoLiBOb3csIHRoZSBvdmVyYXJjaGluZyBnb2FsIG9mIHRoaXMgY2hlY2sgaXMgdG8gc2VlIGlmIGFueSBjb2RlIHBhdGhzIGFyZSBhY2NpZGVudGFsbHkgZXhlY3V0ZWQgb24gYXJjaGl0ZWN0dXJlIHRoYXQgdGhleSBhcmUgbm90IHdyaXR0ZW4gZm9yLiBUaGlzLCBJIGtub3csIGNhbiBiZSBwcm9ibGVtYXRpYy4gVGhpcyBpcyBiZWluZyBmbGFnZ2VkIGJlY2F1c2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYGFtZDY0YCwgYW5kIHdlJ3JlIHNlZWluZyBzb21ldGhpbmcgczM5MC1yZWxhdGVkLlxuXG5UaGUgXCJORUdBVElWRSBDUklURVJJQVwiIHNlY3Rpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgY29kZSBleGNsdXNpdmVseSB0aWVkIHRvIGFuIGFyY2hpdGVjdHVyZSAqb3RoZXIgdGhhbiogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYSBwcm9ibGVtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBkcml2ZXJzL3MzOTAvYCBkaXJlY3RvcnkgKGFuZCBpdHMgY29udGVudHMpIGFyZSBpbmFkdmVydGVudGx5IGJlaW5nIGJ1aWx0IG9uIGFyY2hpdGVjdHVyZXMgYmVzaWRlcyBzMzkwLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGljYXRpb25zIG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjI0LjEyMzcwNjIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0NjE5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiczM5MFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9MTk5PW9iai0kKENPTkZJR19ESUJTKVxcdFxcdCs9IGRpYnMvXFxuZHJpdmVycy9NYWtlZmlsZToyMDA6b2JqLSQoQ09ORklHX1MzOTApXFx0XFx0Kz0gczM5MC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MjQuMjE1MTczODEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNzc3ODc0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbid0IHN1aXRhYmxlIGZvciBmdXp6aW5nLCBhbmQgaGVyZSdzIHdoeS4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLlxuXG5JIHNlZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlLCBsb2NhdGVkIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBpcyBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1MzOTBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIGBDT05GSUdfUzM5MGAgaXMsIG9mIGNvdXJzZSwgb25seSBkZWZpbmVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gQ3J1Y2lhbGx5LCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhpcyBhbmFseXNpcyBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBhbnkgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYXJlLCBieSBkZWZpbml0aW9uLCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4gVGhlIGNvZGUgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgb24gdGhpcyBwbGF0Zm9ybS5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGNvbmZpcm1lZCB0aGF0IHRoZSBkaWZmIG9ubHkgYWZmZWN0cyB0aGF0IHNpbmdsZSBmaWxlOiBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC5cblxuQmFzZWQgb24gdGhlIHJ1bGVzLCBzcGVjaWZpY2FsbHkgdGhlIFwiVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzXCIgbmVnYXRpdmUgY3JpdGVyaWEsIGl0J3MgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlIGNvZGUgbW9kaWZpZWQgaXMgZXhjbHVzaXZlIHRvIGFuIGFyY2hpdGVjdHVyZSBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGFuIGVtcHR5IGxpc3QgYFtdYCwgYW5kIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBhbHNvIGJlIGBbXWAuIE15IHJlYXNvbmluZyBpcyBncm91bmRlZCBpbiB0aGUgYXJjaGl0ZWN0dXJhbCBleGNsdXNpdml0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSDigJMgaXQncyBzaW1wbHkgbm90IHJlbGV2YW50IHRvIGZ1enppbmcgb24gYW1kNjQuIE5vdyBJJ2xsIHByZXBhcmUgdGhlIHRvb2wgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY0NSwiT3V0cHV0VG9rZW5zIjo5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoyOC4zOTI5NjQ5MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfUzM5MCAvIENPTkZJR19WRklPX0FQKSBhbmQgY2Fubm90IGJlIGJ1aWx0IG9yIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfUzM5MCAvIENPTkZJR19WRklPX0FQKSBhbmQgY2Fubm90IGJlIGJ1aWx0IG9yIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoyOC4zOTMwMDc1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwk5x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 08:24:18 +0000 UTC FinishedAt: 2026-09-06 08:48:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1MzOTAgLyBDT05GSUdfVkZJT19BUCkgYW5kIGNhbm5vdCBiZSBidWlsdCBvciBleGVjdXRlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ3N2I3M2IyYzE0NGVmNDA4MmVhMzYwZDE3ZjJiYzBiNDAyODY5YTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjQ4OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZDAzNzYzMmRmODBlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMzEsNiAmIzQzOzMxLDcgQEBcbiAjZGVmaW5lIEFQX1FVRVVFX0lOX1VTRSBcJiMzNDtpbiB1c2VcJiMzNDtcbiBcbiAjZGVmaW5lIEFQX1JFU0VUX0lOVEVSVkFMXHRcdDIwXHQvKiBSZXNldCBzbGVlcCBpbnRlcnZhbCAoMjBtcylcdFx0Ki9cbiYjNDM7I2RlZmluZSBBUF9SRVNFVF9NQVhfV0FJVFx0XHQyMDAwXHQvKiBNYXhpbXVtIHdhaXQgZm9yIHJlc2V0ICgyMDAwbXMpXHQqL1xuIFxuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KTtcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7XG5AQCAtMjI2LDI3ICYjNDM7MjI3LDkwIEBAIHN0YXRpYyBzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqdmZpb19hcF9tZGV2X2dldF9xdWV1ZShcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIGNsZWFycyB0aGUgSVIgYml0IG9yIGdpdmVzIHVwIGFmdGVyIDUgdHJpZXNcbi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlclxuLSAqXG4tICogQ2hlY2tzIHRoZSBJUlEgYml0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgQVBRTiB1c2luZyBhcF90YXBxLlxuLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLlxuLSAqIFJldHVybnMgaWYgYXBfdGFwcSBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4tICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuXG4mIzQzOyAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSB3YWl0IGZvciB0aGUgSVIgYml0IHRvIGNsZWFyIGFmdGVyIGEgZGlzYWJsZVxuJiM0MzsgKlxuJiM0MzsgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlXG4mIzQzOyAqXG4mIzQzOyAqIFJlcGVhdGVkbHkgcG9sbHMgdGhlIEFQIHF1ZXVlIHN0YXR1cyB2aWEgUFFBUChUQVBRKSBldmVyeSAyMG1zIHVudGlsIHRoZSBJUlxuJiM0MzsgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEJlY2F1c2UgUFFBUChBUUlDKSBkaXNhYmxlIGluaXRpYXRlcyBhbiBhc3luY2hyb25vdXMgcHJvY2VzcywgYVxuJiM0MzsgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC5cbiYjNDM7ICogVGhlIGhvc3QgbXVzdCBjb25maXJtIElSPTAgYmVmb3JlIHVucGlubmluZyB0aGUgTklCIHBhZ2UgdG8gYXZvaWQgYSB3aWxkXG4mIzQzOyAqIERNQSB3cml0ZSB0byBhIGZyZWVkIHBhZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjpcbiYjNDM7ICogLSAwXHRcdGlmIHRoZSBJUiBiaXQgaXMgY2xlYXIgKGkuZS4sIGludGVycnVwdHMgYXJlIGRpc2FibGVkKS5cbiYjNDM7ICpcbiYjNDM7ICogLSAtRU5PREVWXHRpZiB0aGUgUFFBUC1UQVBRIHJlc3BvbnNlIGNvZGUgaW5kaWNhdGVzIHRoZSBxdWV1ZSBpcyBub3QgYXZhaWxhYmxlLFxuJiM0MzsgKlx0XHRpcyBkZWNvbmZpZ3VyZWQsIG9yIGlzIGNoZWNrc3RvcHBlZCAoaS5lLiwgbm90IG9wZXJhdGlvbmFsKS5cbiYjNDM7ICpcbiYjNDM7ICogLSAtRVRJTUVET1VUXHR0aGUgZnVuY3Rpb24gdGltZWQgb3V0IGJlZm9yZSB0aGUgSVIgYml0IHdhcyBjbGVhcmVkLlxuICAqL1xuLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4mIzQzO3N0YXRpYyB2b2lkIHJlcG9ydF90YXBxX3JjKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLCB1OCByYylcbiYjNDM7e1xuJiM0MztcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoVEFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtQUUFQKFRBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X2lycWNsZWFyX3RpbWVvdXQoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChUQVBRKSB0aW1lZCBvdXQgd2FpdGluZyBmb3IgSVJRIGNsZWFyIG9uICUwMnguJTA0eDogcmM9JSMwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1BRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLCB1OCByYylcbiYjNDM7e1xuJiM0MztcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtQUUFQKEFRSUMpIGRpc2FibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X3phcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChaQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1BRQVAoWkFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuIFxuIFx0ZG8ge1xuLVx0XHRzdGF0dXMgPSBhcF90YXBxKGFwcW4sIE5VTEwpO1xuJiM0MztcdFx0c3RhdHVzID0gYXBfdGFwcShxLVx1MDAzZWFwcW4sIE5VTEwpO1xuIFx0XHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxuIFx0XHRcdGlmICghc3RhdHVzLmlycV9lbmFibGVkKVxuLVx0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbkBAIC0yNTUsMTQgJiM0MzszMTksMTQgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdFdBUk5fT05DRSgxLCBcJiMzNDslczogdGFwcSByYyAlMDJ4OiAlMDR4XFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pO1xuLVx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdFx0fVxuIFx0fSB3aGlsZSAoLS1yZXRyeSk7XG4gXG4tXHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XFxuXCYjMzQ7LFxuLVx0XHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XG4mIzQzO1x0cmVwb3J0X2lycWNsZWFyX3RpbWVvdXQocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XG4tICogQHE6IFRoZSB2ZmlvX2FwX3F1ZXVlXG4mIzQzOyAqIHZmaW9fYXBfaXJxX2Rpc2FibGUgLSBkaXNhYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlXG4mIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuJiM0MzsgKlxuJiM0MzsgKiBJc3N1ZXMgUFFBUChBUUlDKSB0byBkaXNhYmxlIGludGVycnVwdHMgZm9yIHRoZSBBUCBxdWV1ZS4gT24gc3VjY2Vzc1xuJiM0MzsgKiAoQVBfUkVTUE9OU0VfTk9STUFMIG9yIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEKSwgcG9sbHMgdmlhXG4mIzQzOyAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoKSB1bnRpbCB0aGUgSVIgYml0IGlzIGNvbmZpcm1lZCBjbGVhciBiZWZvcmVcbiYjNDM7ICogZnJlZWluZyB0aGUgcGlubmVkIE5JQiBwYWdlIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBndWVzdCBJU0MuIFRoaXMgd2FpdCBpc1xuJiM0MzsgKiBuZWNlc3NhcnkgYmVjYXVzZSBBUUlDIGRpc2FibGUgaXMgYXN5bmNocm9ub3VzOiBmcmVlaW5nIHRoZSBOSUIgYmVmb3JlIElSPTBcbiYjNDM7ICogaXMgY29uZmlybWVkIHJpc2tzIGEgd2lsZCBETUEgd3JpdGUgdG8gYSBmcmVlZCBob3N0IHBhZ2UuXG4gICpcbi0gKiBVc2VzIGFwX2FxaWMgdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0aW9uIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHJlc2V0XG4tICogaW4gcHJvZ3Jlc3Mgb3IgSVJRIGRpc2FibGUgY29tbWFuZCBhbHJlYWR5IHByb2NlZWRlZDogY2FsbHNcbi0gKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdG8gY2hlY2sgZm9yIHRoZSBJUlEgYml0IHRvIGJlIGNsZWFyXG4tICogYW5kIGNhbGxzIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIHRvIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkXG4tICogd2l0aCB0aGUgQVAgaW50ZXJydXB0IGhhbmRsaW5nLlxuJiM0MzsgKiBSZXRyaWVzIHVwIHRvIDUgdGltZXMgKHdpdGggMjBtcyBzbGVlcCkgaWYgdGhlIHF1ZXVlIGlzIGJ1c3kgb3IgYSByZXNldCBpc1xuJiM0MzsgKiBpbiBwcm9ncmVzcy5cbiAgKlxuLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLFxuLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy5cbiYjNDM7ICogSWYgdGhlIElSIGJpdCBjYW5ub3QgYmUgY29uZmlybWVkIGNsZWFyICh0aW1lb3V0KSwgdGhlIE5JQiBwYWdlIGFuZCBndWVzdFxuJiM0MzsgKiBJU0MgYXJlIGludGVudGlvbmFsbHkgbGVha2VkLiBJZiB0aGUgcGFnZSB3ZXJlIHVucGlubmVkIGFuZCByZXR1cm5lZCB0byB0aGVcbiYjNDM7ICogYWxsb2NhdG9yLCBhIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwgYWRkcmVzcyB3b3VsZFxuJiM0MzsgKiBjb3JydXB0IG1lbW9yeSBiZWxvbmdpbmcgdG8gYSBuZXcgb3duZXIg4oCUIGEgd2lsZCBETUEgd3JpdGUgdGhhdCBjb3VsZCBjcmFzaFxuJiM0MzsgKiBvciBjb21wcm9taXNlIHRoZSBob3N0IGtlcm5lbC5cbiAgKlxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3Jcbi0gKiBjaGVja3N0b3BwZWQgQVAuXG4mIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbiYjNDM7ICogcmVzb3VyY2VzIGFyZSBmcmVlZCBpbW1lZGlhdGVseSBzaW5jZSB0aGUgaGFyZHdhcmUgY2FuIG5vIGxvbmdlciB3cml0ZSB0b1xuJiM0MzsgKiB0aGUgTklCLlxuICAqXG4gICogUmV0dXJuOiBcdTAwMjZzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzXG4gICovXG5AQCAtMzEwLDM0ICYjNDM7MzgyLDg3IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4mIzQzO1x0aW50IHJldHJpZXMgPSA1LCByZXQ7XG4gXG4gXHRkbyB7XG4gXHRcdHN0YXR1cyA9IGFwX2FxaWMocS1cdTAwM2VhcHFuLCBhcWljX2dpc2EsIDApO1xuIFx0XHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0XHRcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cdTAwM2VhcHFuKTtcbi1cdFx0XHRnb3RvIGVuZF9mcmVlO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4mIzQzO1x0XHRcdCAqIGFscmVhZHkgZGlzYWJsZWQgb3IgYSBwcmlvciBhc3luYyByZXF1ZXN0IGlzIHN0aWxsXG4mIzQzO1x0XHRcdCAqIGNvbXBsZXRpbmcgKE9USEVSV0lTRV9DSEFOR0VEKS4gIEluIGJvdGggY2FzZXMsIHdlIG11c3RcbiYjNDM7XHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuJiM0MztcdFx0XHQgKiBiZWZvcmUgcHJvY2VlZGluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMCB8fCByZXQgPT0gLUVOT0RFVilcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9mcmVlO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUaW1lZCBvdXQgd2FpdGluZyB0byBjb25maXJtIGludGVycnVwdHMgYXJlIGRpc2FibGVkLlxuJiM0MztcdFx0XHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XG4mIzQzO1x0XHRcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxuJiM0MztcdFx0XHQgKiByZXVzZSB0aGUgTklCIHdoaWxlIGhhcmR3YXJlIGNhbiBzdGlsbCB3cml0ZSB0byBpdC5cbiYjNDM7XHRcdFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xuJiM0MztcdFx0XHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcbiYjNDM7XHRcdFx0ICogc2lnbmFscyB0byB0aGUgZ3Vlc3QgdGhhdCB0aGUgcmVzZXQgb3BlcmF0aW9uIGRpZCBub3RcbiYjNDM7XHRcdFx0ICogY29tcGxldGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG4mIzQzO1x0XHRcdFx0bWVtc2V0KFx1MDAyNnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpO1xuJiM0MztcdFx0XHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0Z290byBlbmRfZmFpbDtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuJiM0MztcdFx0Y2FzZSBBUF9SRVNQT05TRV9TVEFURV9DSEFOR0VfSU5fUFJPR1JFU1M6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuJiM0MztcdFx0XHQvKiBBUCBub3Qgb3BlcmF0aW9uYWw7IG5vIGZ1cnRoZXIgaW50ZXJydXB0cyBwb3NzaWJsZSAqL1xuJiM0MztcdFx0XHRyZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4mIzQzO1x0XHRjYXNlIEFQX1JFU1BPTlNFX0lOVkFMSURfR0lTQTpcbiYjNDM7XHRcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfU0VDUkVUX05PVF9VTklRVUU6XG4mIzQzO1x0XHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi9cbi1cdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0XHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZFxuJiM0MztcdFx0XHQgKiBhbmQgdGhlIGhhcmR3YXJlIHN0aWxsIGhvbGRzIHRoZSBOSUIgYWRkcmVzcy4gRG8gbm90XG4mIzQzO1x0XHRcdCAqIGZyZWUgcmVzb3VyY2VzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKHJldHJpZXMtLSk7XG4gXG4tXHRXQVJOX09OQ0UoMSwgXCYjMzQ7JXM6IGFwX2FxaWMgc3RhdHVzICVkXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbi1cdFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1x0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4mIzQzO1xuJiM0MztlbmRfZmFpbDpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlXG4mIzQzO1x0ICogaW50ZXJydXB0cywgb3IgYmVjYXVzZSBJUj0wIGNvdWxkIG5vdCBiZSBjb25maXJtZWQuIEluIGVpdGhlciBjYXNlXG4mIzQzO1x0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcbiYjNDM7XHQgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkXG4mIzQzO1x0ICogdG8gYSBuZXcgb3duZXIuIEEgc3Vic2VxdWVudCBoYXJkd2FyZSBETUEgd3JpdGUgdG8gdGhhdCBwaHlzaWNhbFxuJiM0MztcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJiMzOTtzIG1lbW9yeSDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0XG4mIzQzO1x0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXG4mIzQzO1x0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiBzdGF0dXM7XG4mIzQzO1xuIGVuZF9mcmVlOlxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXG4mIzQzO1x0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcbiYjNDM7XHQgKiBpbnRlcnJ1cHRzIGNhbiBub3QgYmUgcHJvY2Vzc2VkLCBzbyBmcmVlIHRoZSBBUUlDIHJlc291cmNlcyAtIHRoZSBwaW5uZWQgTklCXG4mIzQzO1x0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcbiYjNDM7XHQgKiBub3QgYmUgbGVha2VkLlxuJiM0MztcdCAqL1xuIFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDAxLDIyICYjNDM7NTI2LDI5IEBAIHN0YXRpYyBpbnQgZW5zdXJlX25pYl9zaGFyZWQodW5zaWduZWQgbG9uZyBhZGRyKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBFbmFibGUgSW50ZXJydXB0aW9uIGZvciBhIEFQUU5cbiYjNDM7ICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0XG4gICpcbi0gKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVyc1xuJiM0MzsgKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZFxuICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZVxuLSAqIEB2Y3B1OiB0aGUgdmNwdSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVnaXN0ZXJzIHNwZWNpZnlpbmcgdGhlIHBhcmFtZXRlcnNcbi0gKlx0ICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uXG4mIzQzOyAqIEB2Y3B1OiB0aGUgdmNwdSB3aG9zZSByZWdpc3RlcnMgY29udGFpbiB0aGUgUFFBUChBUUlDKSBwYXJhbWV0ZXJzXG4mIzQzOyAqXG4mIzQzOyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGFcbiYjNDM7ICogaG9zdCBJU0MsIGFuZCByZWlzc3VlcyBQUUFQKEFRSUMpIHdpdGggdGhlIHRyYW5zbGF0ZWQgaG9zdC1hYnNvbHV0ZSBOSUJcbiYjNDM7ICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cbiAgKlxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcbi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQ1xuJiM0MzsgKiBUaGUgY29uZGl0aW9uIGNvZGUgYW5kIEFQLXF1ZXVlIHN0YXR1cyB3b3JkIHJldHVybmVkIGJ5IFBRQVAoQVFJQykgYXJlXG4mIzQzOyAqIHJlZmxlY3RlZCBiYWNrIHRvIHRoZSBndWVzdCBhcy1pcy4gSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbFxuJiM0MzsgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LlxuICAqXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcbi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbiYjNDM7ICogUmVzb3VyY2UgbWFuYWdlbWVudCBpcyBiYXNlZCBzb2xlbHkgb24gd2hldGhlciBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjpcbiYjNDM7ICogLSBBUF9SRVNQT05TRV9OT1JNQUwgKENDPTApOiBoYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQjsgdGhlIG9sZCBwaW5uZWRcbiYjNDM7ICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuXG4mIzQzOyAqIC0gQWxsIG90aGVyIHJlc3BvbnNlczogaGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUI7IHRoZSBuZXdseSBwaW5uZWRcbiYjNDM7ICogICBwYWdlIGFuZCByZWdpc3RlcmVkIElTQyBhcmUgZnJlZWQgYW5kIHRoZSBwcmV2aW91c2x5IHNhdmVkIHJlc291cmNlcyBhcmVcbiYjNDM7ICogICBsZWZ0IGludGFjdC5cbiAgKlxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxuLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LlxuJiM0MzsgKiBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaXMgcmV0dXJuZWQgaWYgdmZpb19waW5fcGFnZXMoKSBvclxuJiM0MzsgKiBrdm1fczM5MF9naXNjX3JlZ2lzdGVyKCkgZmFpbHMgYmVmb3JlIHRoZSBBUUlDIGluc3RydWN0aW9uIGlzIGlzc3VlZC5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTQyOCwxNyAmIzQzOzU2MCwxOSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9O1xuIFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XG4gXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xuLVx0aW50IG5pc2M7XG4mIzQzO1x0aW50IG5pc2MsIHJldDtcbiBcdHN0cnVjdCBrdm0gKmt2bTtcbiBcdHBoeXNfYWRkcl90IGhfbmliO1xuIFx0ZG1hX2FkZHJfdCBuaWI7XG4tXHRpbnQgcmV0O1xuIFxuIFx0LyogVmVyaWZ5IHRoYXQgdGhlIG5vdGlmaWNhdGlvbiBpbmRpY2F0b3IgYnl0ZSBhZGRyZXNzIGlzIHZhbGlkICovXG4gXHRpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgXHUwMDI2bmliKSkge1xuIFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbiBcdFx0XHRcdCBfX2Z1bmNfXywgXHUwMDI2bmliLCBxLVx1MDAzZWFwcW4pO1xuLVxuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IGludmFsaWQgTklCIGFkZHJlc3MgJXBhZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgXHUwMDI2bmliKTtcbiBcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7XG4gXHRcdHJldHVybiBzdGF0dXM7XG4gXHR9XG5AQCAtNDUzLDcgJiM0Mzs1ODcsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxuIFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiB2ZmlvX3Bpbl9wYWdlcyBmYWlsZWQ6IHJjPSVkLFwmIzM0O1xuIFx0XHRcdFx0IFwmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCByZXQsIFx1MDAyNm5pYiwgcS1cdTAwM2VhcHFuKTtcbi1cbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiB2ZmlvX3Bpbl9wYWdlcyBmYWlsZWQgcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJldCk7XG4gXHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTO1xuIFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0fVxuQEAgLTQ3Niw3ICYjNDM7NjEzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiBcdGlmIChuaXNjIFx1MDAzYyAwKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IGdpc2MgcmVnaXN0cmF0aW9uIGZhaWxlZDogbmlzYz0lZCwgaXNjPSVkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCBuaXNjLCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tXG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogR0lTQyByZWdpc3RyYXRpb24gZmFpbGVkIHJjPSVkIGlzYz0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgbmlzYywgaXNjKTtcbiBcdFx0dmZpb191bnBpbl9wYWdlcyhcdTAwMjZxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZXZkZXYsIG5pYiwgMSk7XG4gXHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTO1xuIFx0XHRyZXR1cm4gc3RhdHVzO1xuQEAgLTQ4OSwyNCAmIzQzOzYyOSwzOCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcbiYjNDM7XHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbiYjNDM7XHRcdCAqIFRoZSBuZXcgcmVzb3VyY2VzIGFyZSBzYXZlZCBmb3IgdHJhY2tpbmcgYW5kIGZ1dHVyZSB0ZWFyZG93bi5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuJiM0MztcdFx0ICogcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LiBUaGVcbiYjNDM7XHRcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXG4mIzQzO1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKi9cbiBcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0XHRxLVx1MDAzZXNhdmVkX2lvdmEgPSBuaWI7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xuIFx0XHRicmVhaztcbi1cdGNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6XG4tXHRcdC8qIFdlIGNvdWxkIG5vdCBtb2RpZnkgSVJRIHNldHRpbmdzOiBjbGVhciBuZXcgY29uZmlndXJhdGlvbiAqL1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSGFyZHdhcmUgZGlkIG5vdCBhY2NlcHQgdGhlIG5ldyBOSUIgKENDPTMgb3IgZXJyb3IpLiBUaGVcbiYjNDM7XHRcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxuJiM0MztcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuJiM0MztcdFx0ICogSVNDIHRoYXQgd2VyZSBwcmVwYXJlZCBmb3IgdGhpcyAocmVqZWN0ZWQpIHJlcXVlc3QuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcbi1cdFx0aWYgKHJldClcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0IF9fZnVuY19fLCByZXQsIGlzYywgcS1cdTAwM2VhcHFuKTtcbiYjNDM7XHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogR0lTQyB1bnJlZ2lzdGVyIGZhaWxlZCByYz0lZCBpc2M9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByZXQsIGlzYyk7XG4mIzQzO1x0XHR9XG4gXHRcdHZmaW9fdW5waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEpO1xuIFx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCYjMzQ7JXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcXG5cJiMzNDssIF9fZnVuY19fLCBxLVx1MDAzZWFwcW4sXG4tXHRcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuLVx0XHR2ZmlvX2FwX2lycV9kaXNhYmxlKHEpO1xuLVx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbkBAIC01MTcsNiAmIzQzOzY3MSwxMSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRcdFx0XHQgYXFpY19naXNhLnpvbmUsIGFxaWNfZ2lzYS5pciwgYXFpY19naXNhLmdpc2MsXG4gXHRcdFx0XHQgYXFpY19naXNhLmdmLCBhcWljX2dpc2EuZ2lzYSwgYXFpY19naXNhLmlzYyxcbiBcdFx0XHRcdCBxLVx1MDAzZWFwcW4pO1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggcmM9JSMwMnhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0ICAgICBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc3RhdHVzO1xuQEAgLTYwMSw3ICYjNDM7NzYwLDggQEAgc3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoISh2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYSBcdTAwMjYgRUNBX0FJVikpIHtcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCBhcHFuLCB2Y3B1LVx1MDAzZWFyY2guc2llX2Jsb2NrLVx1MDAzZWVjYSk7XG4tXG4mIzQzO1x0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1BRQVAoQVFJQykgZm9yICUwMnguJTA0eDogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG4gXG5AQCAtNjEwLDcgJiM0Mzs3NzAsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IFBRQVAoQVFJQykgaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlcjogYXBxbj0weCUwNHhcXG5cJiMzNDssXG4gXHRcdFx0XHQgX19mdW5jX18sIGFwcW4pO1xuLVxuJiM0MztcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcJiMzNDtQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IGhvb2sgbm90IHJlZ2lzdGVyZWQgd2l0aCB0aGUgdmZpb19hcCBkcml2ZXJcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNjIzLDYgJiM0Mzs3ODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogbWRldiAlMDhseC0lMDRseC0lMDRseC0lMDRseC0lMDRseCUwOGx4IG5vdCBpbiB1c2U6IGFwcW49MHglMDR4XFxuXCYjMzQ7LFxuIFx0XHRcdFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcbiBcdFx0XHRcdCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLCBhcHFuKTtcbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KG1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7UFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBtZGV2IG5vdCBpbiB1c2VcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuQEAgLTYzMSwxMSAmIzQzOzc5NSwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXG5cJiMzNDssXG4gXHRcdFx0XHQgX19mdW5jX18sIEFQX1FJRF9DQVJEKGFwcW4pLFxuIFx0XHRcdFx0IEFQX1FJRF9RVUVVRShhcHFuKSk7XG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1BRQVAoQVFJQykgZm9yICUwMnguJTA0eDogcXVldWUgbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHRzdGF0dXMgPSB2Y3B1LVx1MDAzZXJ1bi1cdTAwM2VzLnJlZ3MuZ3Byc1sxXTtcbi1cbiBcdC8qIElmIElSIGJpdCgxNikgaXMgc2V0IHdlIGVuYWJsZSB0aGUgaW50ZXJydXB0ICovXG4gXHRpZiAoKHN0YXR1cyBcdTAwM2VcdTAwM2UgKDYzIC0gMTYpKSBcdTAwMjYgMHgwMSlcbiBcdFx0cXN0YXR1cyA9IHZmaW9fYXBfaXJxX2VuYWJsZShxLCBzdGF0dXMgXHUwMDI2IDB4MDcsIHZjcHUpO1xuQEAgLTY5MiwxNCAmIzQzOzg1OCwxNCBAQCBzdGF0aWMgYm9vbCBfcXVldWVfcGFzc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHRpZiAoIXEpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHN3aXRjaCAocS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSkge1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcXVldWUgaXMgb25seSBwYXNzYWJsZSBpZiB6ZXJvaXphdGlvbiB3YXMgY29uZmlybWVkIGJ5XG4mIzQzO1x0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcbiYjNDM7XHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbiYjNDM7XHQgKiBUaGlzIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBsZWFraW5nIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcXVldWVcbiYjNDM7XHQgKiB0byB0aGUgZ3Vlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xuIH1cbiBcbiAvKlxuQEAgLTE0MTAsNyAmIzQzOzE1NzYsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbiB7XG4gXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XG4gXG4tXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XG4mIzQzO1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE1LDM3ICYjNDM7MjA4MSwxMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX2ZpbmRfcXVldWUoaW50IGFwcW4pXG4gXHRyZXR1cm4gcTtcbiB9XG4gXG4tc3RhdGljIGludCBhcHFfc3RhdHVzX2NoZWNrKGludCBhcHFuLCBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzICpzdGF0dXMpXG4mIzQzO3N0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcbiYjNDM7XHRcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXG4mIzQzO1x0XHQgKiByZXR1cm5lZCBmcm9tIFRBUFEgbXVzdCBiZSB2ZXJpZmllZCB0byBjb25maXJtIHRoYXQgdGhlXG4mIzQzO1x0XHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHN0YXR1cy1cdTAwM2VxdWV1ZV9lbXB0eSBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2VyZXBsaWVzX3dhaXRpbmcgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0YXR1cy1cdTAwM2VpcnFfZW5hYmxlZCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2Vhc3luYylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsOiBpbnRlcnJ1cHRzIGFyZSBub3QgcG9zc2libGUgc29cbiYjNDM7XHRcdCAqIEFRSUMgcmVzb3VyY2VzIGNhbiBiZSBzYWZlbHkgZnJlZWQuIEhvd2V2ZXIsIHplcm9pemF0aW9uXG4mIzQzO1x0XHQgKiBjYW5ub3QgYmUgY29uZmlybWVkIGJlY2F1c2UgYWxsIHN0YXR1cyBiaXRzIGFyZSB6ZXJvZWQgd2hlblxuJiM0MztcdFx0ICogdGhlc2UgcmVzcG9uc2UgY29kZXMgYXJlIHJldHVybmVkIOKAlCB0aGVyZSBpcyBubyB3YXkgdG9cbiYjNDM7XHRcdCAqIGRpc3Rpbmd1aXNoIGEgemVyb2l6ZWQgcXVldWUgZnJvbSBvbmUgdGhhdCBoYXMgbm90IGJlZW5cbiYjNDM7XHRcdCAqIHplcm9pemVkLiBSZXR1cm4gLUVOT0RFViB0byBzaWduYWwgdGhhdCBBUUlDIHJlc291cmNlcyBzaG91bGRcbiYjNDM7XHRcdCAqIGJlIGZyZWVkIGJ1dCB0aGF0IHplcm9pemF0aW9uIGhhcyBub3QgYmVlbiBjb25maXJtZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQSByZXNldCBpcyBpbiBwcm9ncmVzcy4gSXQgbWF5IGJlIHRoZSByZXNldCB3ZSBpc3N1ZWQgb3Igb25lXG4mIzQzO1x0XHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXG4mIzQzO1x0XHQgKiB3aWxsIGJlIHplcm9pemVkLCBzbyBrZWVwIHdhaXRpbmcuXG4mIzQzO1x0XHQgKi9cbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XG4mIzQzO1x0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbiYjNDM7XHRcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuIFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOlxuIFx0XHQvKlxuJiM0MztcdFx0ICogQVBfUkVTUE9OU0VfQlVTWTpcbiYjNDM7XHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbiYjNDM7XHRcdCAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRVxuJiM0MztcdFx0ICogQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOlxuIFx0XHQgKiBUaGVzZSBhc3luY2hyb25vdXMgcmVzcG9uc2UgY29kZXMgaW5kaWNhdGUgYSBQUUFQKEFBUFEpXG4gXHRcdCAqIGluc3RydWN0aW9uIHRvIGFzc29jaWF0ZSBhIHNlY3JldCB3aXRoIHRoZSBndWVzdCBmYWlsZWQuIEFsbFxuIFx0XHQgKiBzdWJzZXF1ZW50IEFQIGluc3RydWN0aW9ucyB3aWxsIGVuZCB3aXRoIHRoZSBhc3luY2hyb25vdXNcbi1cdFx0ICogcmVzcG9uc2UgY29kZSB1bnRpbCB0aGUgQVAgcXVldWUgaXMgcmVzZXQ7IHNvLCBsZXQmIzM5O3MgcmV0dXJuXG4tXHRcdCAqIGEgdmFsdWUgaW5kaWNhdGluZyBhIHJlc2V0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi5cbiYjNDM7XHRcdCAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiBcdFx0ICovXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiBcdGRlZmF1bHQ6XG4tXHRcdFdBUk4odHJ1ZSxcbi1cdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gdmVyaWZ5IHJlc2V0IG9mIHF1ZXVlICUwMnguJTA0eDogVEFQUSByYz0ldVxcblwmIzM0Oyxcbi1cdFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdHJlcG9ydF90YXBxX3JjKHEsIHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cdTAwM2VzYXZlZF9pb3ZhKSB7XG4mIzQzO1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuJiM0MztcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlIFx1MDAyNiBHSVNDKSB0byBwcmV2ZW50IGhvc3QgY3Jhc2hcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KSB7XG4mIzQzO1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7UmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBXQUlUX01TRyBcJiMzNDtXYWl0ZWQgJWRtcyBmb3IgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4ICgldSwgJXUsICV1KVwmIzM0O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogYXBxX3Jlc2V0X2ZpbmFsaXplIC0gc3RvcmUgZmluYWwgVEFQUSBzdGF0dXMgYW5kIGZyZWUgQVFJQyByZXNvdXJjZXMuXG4mIzQzOyAqIEBxOiAgICAgIHRoZSB2ZmlvX2FwX3F1ZXVlXG4mIzQzOyAqIEBzdGF0dXM6IHRoZSBmaW5hbCBBUCBxdWV1ZSBzdGF0dXMgcmV0dXJuZWQgYnkgUFFBUChUQVBRKVxuJiM0MzsgKiBAcmV0OiAgICB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYXBxX3N0YXR1c19jaGVjaygpXG4mIzQzOyAqXG4mIzQzOyAqIENvcGllcyB0aGUgZnVsbCBUQVBRIHN0YXR1cyB3b3JkIHRvIHEtXHUwMDNlcmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1c1xuJiM0MzsgKiBiaXRzIHJlZmxlY3QgdGhlIGNvbmZpcm1lZCBlbmQgc3RhdGUgb2YgdGhlIHF1ZXVlLiBJZiByZXQgPT0gMCxcbiYjNDM7ICogemVyb2l6YXRpb24gd2FzIGNvbmZpcm1lZCBhbmQgdGhlIHJlc3BvbnNlIGNvZGUgaXMgb3ZlcnJpZGRlbiB3aXRoXG4mIzQzOyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yXG4mIzQzOyAqIHJldCA9PSAtRU5PREVWIChERUNPTkZJR1VSRUQgb3IgQ0hFQ0tTVE9QUEVEKSwgdGhlIG5vbi16ZXJvIHJlc3BvbnNlXG4mIzQzOyAqIGNvZGUgaXMgbGVmdCBpbnRhY3Qgc28gX3F1ZXVlX3Bhc3NhYmxlKCkgY29ycmVjdGx5IHJldHVybnMgZmFsc2UuXG4mIzQzOyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0bWVtY3B5KFx1MDAyNnEtXHUwMDNlcmVzZXRfc3RhdHVzLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfTk9STUFMO1xuJiM0MztcdGlmIChxLVx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxuJiM0MztcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG4ge1xuIFx0aW50IHJldCA9IC1FQlVTWSwgZWxhcHNlZCA9IDA7XG5AQCAtMTk1OCw5ICYjNDM7MjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRtc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpO1xuIFx0XHRlbGFwc2VkICYjNDM7PSBBUF9SRVNFVF9JTlRFUlZBTDtcbiBcdFx0c3RhdHVzID0gYXBfdGFwcShxLVx1MDAzZWFwcW4sIE5VTEwpO1xuLVx0XHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXHUwMDNlYXBxbiwgXHUwMDI2c3RhdHVzKTtcbi1cdFx0aWYgKHJldCA9PSAtRUlPKVxuJiM0MztcdFx0cmV0ID0gYXBxX3N0YXR1c19jaGVjayhxLCBcdTAwMjZzdGF0dXMpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtRUlPKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRBUFEgcmV0dXJuZWQgYW4gaW52YWxpZCByZXNwb25zZSBjb2RlLiBUaGlzXG4mIzQzO1x0XHRcdCAqIGluZGljYXRlcyBhIGhhcmR3YXJlIG9yIGZpcm13YXJlIGJ1ZzsgdGhlIHF1ZXVlXG4mIzQzO1x0XHRcdCAqIGNhbm5vdCBnZW5lcmF0ZSBBUCBpbnRlcnJ1cHRzIG9yIERNQS13cml0ZSB0byB0aGVcbiYjNDM7XHRcdFx0ICogTklCLCBzbyBmcmVlIHRoZSBBUUlDIHJlc291cmNlcyByYXRoZXIgdGhhbiBsZWFrIHRoZW0uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGVsYXBzZWQgXHUwMDNlPSBBUF9SRVNFVF9NQVhfV0FJVCkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHNcbiYjNDM7XHRcdFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXG4mIzQzO1x0XHRcdCAqIHN1Y2Nlc3NmdWxseS4gRnJlZSBBUUlDIHJlc291cmNlcyBhbmQgcmV0dXJuLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXG4mIzQzO1x0XHRcdCAqIGRlY29uZmlndXJlZCBvciBjaGVja3N0b3BwZWQ7IGludGVycnVwdHMgYXJlIG5vdFxuJiM0MztcdFx0XHQgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLlxuJiM0MztcdFx0XHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcbiYjNDM7XHRcdFx0ICogcXVldWUgY2Fubm90IGdlbmVyYXRlIGludGVycnVwdHMsIHNvIHRoZSBOSUIgcGFnZSBpc1xuJiM0MztcdFx0XHQgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoIXJldCB8fCByZXQgPT0gLUVOT0RFVikge1xuJiM0MztcdFx0XHRcdGFwcV9yZXNldF9maW5hbGl6ZShxLCBcdTAwMjZzdGF0dXMsIHJldCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRpbWVkIG91dCB3aXRob3V0IGJlaW5nIGFibGUgdG8gdmVyaWZ5IHphcHEgY29tcGxldGVkLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBUaGUgQVFJQyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcXVldWUgLSB0aGUgcGlubmVkXG4mIzQzO1x0XHRcdCAqIHBhZ2UgY29udGFpbmluZyB0aGUgTklCIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLVxuJiM0MztcdFx0XHQgKiBjYW5ub3QgYmUgZnJlZWQgaGVyZS4gVGhlIE5JQiBpcyB0aGUgYWN0aXZlIERNQSB0YXJnZXRcbiYjNDM7XHRcdFx0ICogZm9yIEFQIGludGVycnVwdCBkZWxpdmVyeSB1bnRpbCB0aGUgcmVzZXQgY29tcGxldGVzO1xuJiM0MztcdFx0XHQgKiBmcmVlaW5nIHRoZSBwaW5uZWQgcGFnZSB3aGlsZSB0aGUgaGFyZHdhcmUgbWF5IHN0aWxsXG4mIzQzO1x0XHRcdCAqIHdyaXRlIHRvIGl0IHdvdWxkIHJlc3VsdCBpbiBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGRcbiYjNDM7XHRcdFx0ICogY29ycnVwdCBob3N0IG1lbW9yeS5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogSWYgdGhlIHJlc2V0IGV2ZW50dWFsbHkgY29tcGxldGVzLCBpbnRlcnJ1cHRzIHdpbGwgYmVcbiYjNDM7XHRcdFx0ICogdGVybWluYXRlZCBhbmQgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgSVNDIHJlZ2lzdHJhdGlvblxuJiM0MztcdFx0XHQgKiB3aWxsIGJlIGxlYWtlZC4gVGhpcyBpcyBwcmVmZXJhYmxlIHRvIGVpdGhlciBhIHdpbGQgRE1BXG4mIzQzO1x0XHRcdCAqIHdyaXRlIG9yIHdhaXRpbmcgaW5kZWZpbml0ZWx5OiBmbHVzaF93b3JrKCkgY2FsbGVycyBob2xkXG4mIzQzO1x0XHRcdCAqIHRoZSBtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2sgbXV0ZXggd2hpY2ggc2VyaWFsaXplcyBhY2Nlc3NcbiYjNDM7XHRcdFx0ICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZFxuJiM0MztcdFx0XHQgKiBoYW5nIGFsbCBndWVzdHMgdG8gd2hpY2ggdGhvc2UgbWRldnMgYXJlIGF0dGFjaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogWmVyb2l6YXRpb24gY291bGQgbm90IGJlIGNvbmZpcm1lZDsgc2V0XG4mIzQzO1x0XHRcdCAqIHJlc2V0X3N0YXR1cyB0byBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUy5cbiYjNDM7XHRcdFx0ICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgdG8gc2lnbmFsIHRoYXQgdGhlIHJlc2V0XG4mIzQzO1x0XHRcdCAqIGRpZCBub3QgY29tcGxldGUsIGFuZCBlbnN1cmVzIHRoYXQgaWYgdGhlIHF1ZXVlXG4mIzQzO1x0XHRcdCAqIGlzIHJlc2V0IGFnYWluLCB0aGUgcmUtaXNzdWUgbG9naWMgaW5cbiYjNDM7XHRcdFx0ICogYXBxX3Jlc2V0X2NoZWNrKCkgd2lsbCByZS1pc3N1ZSB0aGUgWkFQUS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHtcbiYjNDM7XHRcdFx0YXBxX3Jlc2V0X2ZpbmFsaXplKHEsIFx1MDAyNnN0YXR1cywgcmV0KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuIFx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuIFx0XHRcdHByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCxcbiBcdFx0XHRcdFx0ICAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbkBAIC0xOTc1LDExICYjNDM7MjI5MSw3IEBAIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXG4gXHRcdFx0ICAgIHJldCA9PSAtRUFHQUlOKSB7XG4gXHRcdFx0XHRzdGF0dXMgPSBhcF96YXBxKHEtXHUwMDNlYXBxbiwgMCk7XG4gXHRcdFx0XHRtZW1jcHkoXHUwMDI2cS1cdTAwM2VyZXNldF9zdGF0dXMsIFx1MDAyNnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpO1xuLVx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChxLVx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxuLVx0XHRcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gfVxuQEAgLTE5OTUsMjIgJiM0MzsyMzA3LDI3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbiBcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcbi1cdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfU1RBVEVfQ0hBTkdFX0lOX1BST0dSRVNTOlxuIFx0XHQvKlxuIFx0XHQgKiBMZXQmIzM5O3MgdmVyaWZ5IHdoZXRoZXIgdGhlIFpBUFEgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvbiBhIHdvcmsgcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbiBcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdFdBUk4odHJ1ZSxcbi1cdFx0ICAgICBcJiMzNDtQUUFQL1pBUFEgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSV1XFxuXCYjMzQ7LFxuLVx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgYXJjaGl0ZWN0dXJlIGRlZmluZXMgb25seSB0aGUgcmVzcG9uc2UgY29kZXMgYWJvdmUgYXNcbiYjNDM7XHRcdCAqIHZhbGlkIGZvciBaQVBRLiBBbnkgb3RoZXIgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgYSBoYXJkd2FyZVxuJiM0MztcdFx0ICogb3IgZmlybXdhcmUgYnVnLiBTaW5jZSBhIG1hbGZ1bmN0aW9uaW5nIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZVxuJiM0MztcdFx0ICogQVAgaW50ZXJydXB0cyBvciBETUEtd3JpdGUgdG8gdGhlIE5JQiwgZnJlZSB0aGUgQVFJQyByZXNvdXJjZXNcbiYjNDM7XHRcdCAqIHJhdGhlciB0aGFuIGxlYWsgdGhlbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVwb3J0X3phcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuJiM0MztcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDYxLDEyICYjNDM7MjM3OCwyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4gXHRyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtXHUwMDNla3ZtKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAobWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIpIHtcbiYjNDM7XHRcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlcik7XG4mIzQzO1x0XHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIpIHtcbiYjNDM7XHRcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIpO1xuJiM0MztcdFx0bWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXG4ge1xuIFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XG4gXHRcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xuIFxuIFx0dmZpb19hcF9tZGV2X3Vuc2V0X2t2bShtYXRyaXhfbWRldik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiYjNDM7XHR2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhtYXRyaXhfbWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXF1ZXN0KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGNvdW50KVxuQEAgLTI0NTcsOCAmIzQzOzI3OTAsOSBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIFx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbi1cdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4gXHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xuJiM0MztcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcbiYjNDM7XHRmbHVzaF93b3JrKFx1MDAyNnEtXHUwMDNlcmVzZXRfd29yayk7XG4gXG4gXHRpZiAobWF0cml4X21kZXYpIHtcbiBcdFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xuQEAgLTI1MzQsNiAmIzQzOzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtXHUwMDNlaW5mby5hcW0pKSB7XG4gXHRcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIHF1ZXVlIGlzIG5vIGxvbmdlciBpbiB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uLlxuJiM0MztcdFx0ICogVGhlIGhhcmR3YXJlIGNhbm5vdCBETUEtd3JpdGUgdG8gdGhlIE5JQiwgc28gaXQgaXMgc2FmZVxuJiM0MztcdFx0ICogdG8gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgZGlyZWN0bHkgd2l0aG91dCBpc3N1aW5nIGFcbiYjNDM7XHRcdCAqIFpBUFEuIElmIHRoZSBxdWV1ZSBpcyBub3QgYXNzaWduZWQgdG8gYW4gbWRldixcbiYjNDM7XHRcdCAqIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIGlzIGEgbm8tb3AuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdH1cbiBcbiBkb25lOlxuQEAgLTI1NDEsOCAmIzQzOzI4ODQsOCBAQCB2b2lkIHZmaW9fYXBfbWRldl9yZW1vdmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4gXHRcdHZmaW9fYXBfdW5saW5rX3F1ZXVlX2ZyX21kZXYocSk7XG4gXG4gXHRkZXZfc2V0X2RydmRhdGEoXHUwMDI2YXBkZXYtXHUwMDNlZGV2aWNlLCBOVUxMKTtcbi1cdGtmcmVlKHEpO1xuIFx0cmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpO1xuJiM0MztcdGtmcmVlKHEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNjk3LDExICYjNDM7MzA0MCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbyxcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGFxcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFxbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuJiM0MztcdFx0XHRcdCAgIEFQX0RPTUFJTlMpO1xuIFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tXHUwMDNlYWRtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKiljdXJfY29uZmlnX2luZm8tXHUwMDNlYWRtLFxuLVx0XHRcdFx0ICAgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRcdFx0ICAgQVBfRE9NQUlOUyk7XG4gXG4gXHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcbkBAIC0yODEyLDcgJiM0MzszMTU1LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcbiBcdFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cdTAwM2VhcW1fYWRkLFxuIFx0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hcW0sIGFxbV9hZGQsIEFQX0RPTUFJTlMpO1xuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFkbV9hZGQsXG4tXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7XG4mIzQzO1x0XHRcdCAgIG1hdHJpeF9tZGV2LVx1MDAzZW1hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpO1xuIFxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfUzM5MCAvIENPTkZJR19WRklPX0FQKSBhbmQgY2Fubm90IGJlIGJ1aWx0IG9yIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDc3YjczYjJjMTQ0ZWY0MDgyZWEzNjBkMTdmMmJjMGI0MDI4NjlhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDg6NDg6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMKaW5kZXggOTQwYzBmZjY2OGJlZS4uZDAzNzYzMmRmODBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFICYjMzQ7aW4gdXNlJiMzNDsKIAogI2RlZmluZSBBUF9SRVNFVF9JTlRFUlZBTAkJMjAJLyogUmVzZXQgc2xlZXAgaW50ZXJ2YWwgKDIwbXMpCQkqLwomIzQzOyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVQJCTIwMDAJLyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKQkqLwogCiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7CiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpxbGlzdCk7CkBAIC0yMjYsMjcgJiM0MzsyMjcsOTAgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKAogfQogCiAvKioKLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzCi0gKiBAYXBxbjogVGhlIEFQIFF1ZXVlIG51bWJlcgotICoKLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS4KLSAqIFJldHVybnMgaWYgdGhlIGFwX3RhcHEgZnVuY3Rpb24gc3VjY2VlZGVkIGFuZCB0aGUgYml0IGlzIGNsZWFyLgotICogUmV0dXJucyBpZiBhcF90YXBxIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgotICogT3RoZXJ3aXNlIHJldHJpZXMgdXAgdG8gNSB0aW1lcyBhZnRlciB3YWl0aW5nIDIwbXMuCiYjNDM7ICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIHdhaXQgZm9yIHRoZSBJUiBiaXQgdG8gY2xlYXIgYWZ0ZXIgYSBkaXNhYmxlCiYjNDM7ICoKJiM0MzsgKiBAYXBxbjogdGhlIEFQUU4gb2YgdGhlIHF1ZXVlCiYjNDM7ICoKJiM0MzsgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVIKJiM0MzsgKiBiaXQgaXMgY2xlYXIsIHRoZSBxdWV1ZSBiZWNvbWVzIG5vbi1vcGVyYXRpb25hbCwgb3IgNSByZXRyaWVzIGFyZSBleGhhdXN0ZWQuCiYjNDM7ICoKJiM0MzsgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGEKJiM0MzsgKiBjb25kaXRpb24tY29kZSAwIGNvbXBsZXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBJUiBiaXQgaGFzIGJlZW4gY2xlYXJlZC4KJiM0MzsgKiBUaGUgaG9zdCBtdXN0IGNvbmZpcm0gSVI9MCBiZWZvcmUgdW5waW5uaW5nIHRoZSBOSUIgcGFnZSB0byBhdm9pZCBhIHdpbGQKJiM0MzsgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOgomIzQzOyAqIC0gMAkJaWYgdGhlIElSIGJpdCBpcyBjbGVhciAoaS5lLiwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQpLgomIzQzOyAqCiYjNDM7ICogLSAtRU5PREVWCWlmIHRoZSBQUUFQLVRBUFEgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIHF1ZXVlIGlzIG5vdCBhdmFpbGFibGUsCiYjNDM7ICoJCWlzIGRlY29uZmlndXJlZCwgb3IgaXMgY2hlY2tzdG9wcGVkIChpLmUuLCBub3Qgb3BlcmF0aW9uYWwpLgomIzQzOyAqCiYjNDM7ICogLSAtRVRJTUVET1VUCXRoZSBmdW5jdGlvbiB0aW1lZCBvdXQgYmVmb3JlIHRoZSBJUiBiaXQgd2FzIGNsZWFyZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pCiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X3RhcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O21hdHJpeF9tZGV2KQomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkgICAgICYjMzQ7UFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzOwllbHNlCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksIHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X2lycWNsZWFyX3RpbWVvdXQoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O21hdHJpeF9tZGV2KQomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS0mZ3Q7bWF0cml4X21kZXYtJmd0O21kZXYpLAomIzQzOwkJCQkgICAgICYjMzQ7UFFBUChUQVBRKSB0aW1lZCBvdXQgd2FpdGluZyBmb3IgSVJRIGNsZWFyIG9uICUwMnguJTA0eDogcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzOwllbHNlCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UFFBUChUQVBRKSB0aW1lZCBvdXQgd2FpdGluZyBmb3IgSVJRIGNsZWFyIG9uICUwMnguJTA0eDogcmM9JSMwMnhcbiYjMzQ7LAomIzQzOwkJCQkgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksIHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpCiYjNDM7ewomIzQzOwlpZiAocS0mZ3Q7bWF0cml4X21kZXYpCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGRpc2FibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pLCByYyk7CiYjNDM7CWVsc2UKJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtQUUFQKEFRSUMpIGRpc2FibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfemFwcV9yYyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpCiYjNDM7ewomIzQzOwlpZiAocS0mZ3Q7bWF0cml4X21kZXYpCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pLCByYyk7CiYjNDM7CWVsc2UKJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxuJiMzNDssCiYjNDM7CQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiB7CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7CiAJaW50IHJldHJ5ID0gNTsKIAogCWRvIHsKLQkJc3RhdHVzID0gYXBfdGFwcShhcHFuLCBOVUxMKTsKJiM0MzsJCXN0YXR1cyA9IGFwX3RhcHEocS0mZ3Q7YXBxbiwgTlVMTCk7CiAJCXN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHsKIAkJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CiAJCWNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6CiAJCQlpZiAoIXN0YXR1cy5pcnFfZW5hYmxlZCkKLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiAwOwogCQkJZmFsbHRocm91Z2g7CiAJCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKIAkJCW1zbGVlcCgyMCk7CkBAIC0yNTUsMTQgJiM0MzszMTksMTQgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbikKIAkJY2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6CiAJCWNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOgogCQlkZWZhdWx0OgotCQkJV0FSTl9PTkNFKDEsICYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogJTA0eFxuJiMzNDssIF9fZnVuY19fLAotCQkJCSAgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pOwotCQkJcmV0dXJuOwomIzQzOwkJCXJlcG9ydF90YXBxX3JjKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0gd2hpbGUgKC0tcmV0cnkpOwogCi0JV0FSTl9PTkNFKDEsICYjMzQ7JXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XG4mIzM0OywKLQkJICBfX2Z1bmNfXywgc3RhdHVzLnJlc3BvbnNlX2NvZGUsIGFwcW4pOwomIzQzOwlyZXBvcnRfaXJxY2xlYXJfdGltZW91dChxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwogfQogCiAvKioKQEAgLTI4OSwyMCAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpCiB9CiAKIC8qKgotICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0Ci0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWUKJiM0MzsgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZQomIzQzOyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZQomIzQzOyAqCiYjNDM7ICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3MKJiM0MzsgKiAoQVBfUkVTUE9OU0VfTk9STUFMIG9yIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEKSwgcG9sbHMgdmlhCiYjNDM7ICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHVudGlsIHRoZSBJUiBiaXQgaXMgY29uZmlybWVkIGNsZWFyIGJlZm9yZQomIzQzOyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXMKJiM0MzsgKiBuZWNlc3NhcnkgYmVjYXVzZSBBUUlDIGRpc2FibGUgaXMgYXN5bmNocm9ub3VzOiBmcmVlaW5nIHRoZSBOSUIgYmVmb3JlIElSPTAKJiM0MzsgKiBpcyBjb25maXJtZWQgcmlza3MgYSB3aWxkIERNQSB3cml0ZSB0byBhIGZyZWVkIGhvc3QgcGFnZS4KICAqCi0gKiBVc2VzIGFwX2FxaWMgdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0aW9uIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHJlc2V0Ci0gKiBpbiBwcm9ncmVzcyBvciBJUlEgZGlzYWJsZSBjb21tYW5kIGFscmVhZHkgcHJvY2VlZGVkOiBjYWxscwotICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHRvIGNoZWNrIGZvciB0aGUgSVJRIGJpdCB0byBiZSBjbGVhcgotICogYW5kIGNhbGxzIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIHRvIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkCi0gKiB3aXRoIHRoZSBBUCBpbnRlcnJ1cHQgaGFuZGxpbmcuCiYjNDM7ICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXMKJiM0MzsgKiBpbiBwcm9ncmVzcy4KICAqCi0gKiBJbiB0aGUgY2FzZSB0aGUgQVAgaXMgYnVzeSwgb3IgYSByZXNldCBpcyBpbiBwcm9ncmVzcywKLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy4KJiM0MzsgKiBJZiB0aGUgSVIgYml0IGNhbm5vdCBiZSBjb25maXJtZWQgY2xlYXIgKHRpbWVvdXQpLCB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0CiYjNDM7ICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlCiYjNDM7ICogYWxsb2NhdG9yLCBhIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwgYWRkcmVzcyB3b3VsZAomIzQzOyAqIGNvcnJ1cHQgbWVtb3J5IGJlbG9uZ2luZyB0byBhIG5ldyBvd25lciDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkIGNyYXNoCiYjNDM7ICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuCiAgKgotICogUmV0dXJucyBpZiBhcF9hcWljIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvcgotICogY2hlY2tzdG9wcGVkIEFQLgomIzQzOyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSwKJiM0MzsgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvCiYjNDM7ICogdGhlIE5JQi4KICAqCiAgKiBSZXR1cm46ICZhbXA7c3RydWN0IGFwX3F1ZXVlX3N0YXR1cwogICovCkBAIC0zMTAsMzQgJiM0MzszODIsODcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIHsKIAl1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07CiAJc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7Ci0JaW50IHJldHJpZXMgPSA1OwomIzQzOwlpbnQgcmV0cmllcyA9IDUsIHJldDsKIAogCWRvIHsKIAkJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIDApOwogCQlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJCWNhc2UgQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ6CiAJCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgotCQkJdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLSZndDthcHFuKTsKLQkJCWdvdG8gZW5kX2ZyZWU7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzCiYjNDM7CQkJICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGwKJiM0MzsJCQkgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0CiYjNDM7CQkJICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZAomIzQzOwkJCSAqIGJlZm9yZSBwcm9jZWVkaW5nLgomIzQzOwkJCSAqLwomIzQzOwkJCXJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocSk7CiYjNDM7CQkJaWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKQomIzQzOwkJCQlnb3RvIGVuZF9mcmVlOwomIzQzOwkJCS8qCiYjNDM7CQkJICogVGltZWQgb3V0IHdhaXRpbmcgdG8gY29uZmlybSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KJiM0MzsJCQkgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5CiYjNDM7CQkJICogaW50ZXJwcmV0IHRoYXQgYXMgYSBzdWNjZXNzZnVsIGRpc2FibGUgYW5kIG1heSBmcmVlIG9yCiYjNDM7CQkJICogcmV1c2UgdGhlIE5JQiB3aGlsZSBoYXJkd2FyZSBjYW4gc3RpbGwgd3JpdGUgdG8gaXQuCiYjNDM7CQkJICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pYwomIzQzOwkJCSAqIHdoYXQgdGhlIGhhcmR3YXJlIGRvZXMgZm9yIHRoYXQgcmVzcG9uc2UgY29kZS4gVGhpcwomIzQzOwkJCSAqIHNpZ25hbHMgdG8gdGhlIGd1ZXN0IHRoYXQgdGhlIHJlc2V0IG9wZXJhdGlvbiBkaWQgbm90CiYjNDM7CQkJICogY29tcGxldGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCkgewomIzQzOwkJCQltZW1zZXQoJmFtcDtzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKJiM0MzsJCQkJc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDsKJiM0MzsJCQl9CiYjNDM7CQkJZ290byBlbmRfZmFpbDsKIAkJY2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzoKIAkJY2FzZSBBUF9SRVNQT05TRV9CVVNZOgomIzQzOwkJY2FzZSBBUF9SRVNQT05TRV9TVEFURV9DSEFOR0VfSU5fUFJPR1JFU1M6CiAJCQltc2xlZXAoMjApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6CiAJCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgogCQljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKJiM0MzsJCQkvKiBBUCBub3Qgb3BlcmF0aW9uYWw7IG5vIGZ1cnRoZXIgaW50ZXJydXB0cyBwb3NzaWJsZSAqLwomIzQzOwkJCXJlcG9ydF9hcWljX2Rpc2FibGVfZXJyb3IocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwomIzQzOwkJCWdvdG8gZW5kX2ZyZWU7CiAJCWNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTOgomIzQzOwkJY2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0dJU0E6CiYjNDM7CQljYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOgomIzQzOwkJY2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6CiAJCWRlZmF1bHQ6Ci0JCQkvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi8KLQkJCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAotCQkJCSAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwotCQkJZ290byBlbmRfZnJlZTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBBUUlDIGRpc2FibGUgd2FzIHJlamVjdGVkOyBJUlEgaXMgc3RpbGwgZW5hYmxlZAomIzQzOwkJCSAqIGFuZCB0aGUgaGFyZHdhcmUgc3RpbGwgaG9sZHMgdGhlIE5JQiBhZGRyZXNzLiBEbyBub3QKJiM0MzsJCQkgKiBmcmVlIHJlc291cmNlcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlyZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJCQlnb3RvIGVuZF9mYWlsOwogCQl9CiAJfSB3aGlsZSAocmV0cmllcy0tKTsKIAotCVdBUk5fT05DRSgxLCAmIzM0OyVzOiBhcF9hcWljIHN0YXR1cyAlZFxuJiMzNDssIF9fZnVuY19fLAotCQkgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CiYjNDM7ZW5kX2ZhaWw6CiYjNDM7CS8qCiYjNDM7CSAqIFdlIGFyZSBoZXJlIGVpdGhlciBiZWNhdXNlIHRoZSBBUUlDIGluc3RydWN0aW9uIGZhaWxlZCB0byBkaXNhYmxlCiYjNDM7CSAqIGludGVycnVwdHMsIG9yIGJlY2F1c2UgSVI9MCBjb3VsZCBub3QgYmUgY29uZmlybWVkLiBJbiBlaXRoZXIgY2FzZQomIzQzOwkgKiB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0IElTQyBjYW5ub3QgYmUgZnJlZWQ6IGhhcmR3YXJlIG1heSBzdGlsbCB3cml0ZQomIzQzOwkgKiB0byB0aGUgTklCLCBhbmQgdW5waW5uaW5nIHRoZSBwYWdlIHdvdWxkIGFsbG93IGl0IHRvIGJlIHJlYWxsb2NhdGVkCiYjNDM7CSAqIHRvIGEgbmV3IG93bmVyLiBBIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwKJiM0MzsJICogYWRkcmVzcyB3b3VsZCBjb3JydXB0IHRoZSBuZXcgb3duZXImIzM5O3MgbWVtb3J5IOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQKJiM0MzsJICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlCiYjNDM7CSAqIHRoZXJlZm9yZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiBzdGF0dXM7CiYjNDM7CiBlbmRfZnJlZToKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsCiYjNDM7CSAqIG9yIGJlY2F1c2UgdGhlIHF1ZXVlIGlzIG5vdCBvcGVyYXRpb25hbCBvciBub3QgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlCiYjNDM7CSAqIGludGVycnVwdHMgY2FuIG5vdCBiZSBwcm9jZXNzZWQsIHNvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIC0gdGhlIHBpbm5lZCBOSUIKJiM0MzsJICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGwKJiM0MzsJICogbm90IGJlIGxlYWtlZC4KJiM0MzsJICovCiAJdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC00MDEsMjIgJiM0Mzs1MjYsMjkgQEAgc3RhdGljIGludCBlbnN1cmVfbmliX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpCiB9CiAKIC8qKgotICogdmZpb19hcF9pcnFfZW5hYmxlIC0gRW5hYmxlIEludGVycnVwdGlvbiBmb3IgYSBBUFFOCiYjNDM7ICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0CiAgKgotICogQHE6CSB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVycwomIzQzOyAqIEBxOgkgdGhlIHZmaW9fYXBfcXVldWUgZm9yIHdoaWNoIGludGVycnVwdHMgYXJlIHRvIGJlIGVuYWJsZWQKICAqIEBpc2M6IHRoZSBndWVzdCBJU0MgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR0lCIGludGVyZmFjZQotICogQHZjcHU6IHRoZSB2Y3B1IG9iamVjdCBjb250YWluaW5nIHRoZSByZWdpc3RlcnMgc3BlY2lmeWluZyB0aGUgcGFyYW1ldGVycwotICoJICBwYXNzZWQgdG8gdGhlIFBRQVAoQVFJQykgaW5zdHJ1Y3Rpb24uCiYjNDM7ICogQHZjcHU6IHRoZSB2Y3B1IHdob3NlIHJlZ2lzdGVycyBjb250YWluIHRoZSBQUUFQKEFRSUMpIHBhcmFtZXRlcnMKJiM0MzsgKgomIzQzOyAqIFBpbnMgdGhlIGd1ZXN0IE5JQiBwYWdlLCByZWdpc3RlcnMgdGhlIGd1ZXN0IElTQyB3aXRoIHRoZSBHSUIgdG8gb2J0YWluIGEKJiM0MzsgKiBob3N0IElTQywgYW5kIHJlaXNzdWVzIFBRQVAoQVFJQykgd2l0aCB0aGUgdHJhbnNsYXRlZCBob3N0LWFic29sdXRlIE5JQgomIzQzOyAqIGFkZHJlc3MgYW5kIGhvc3QgSVNDIG9uIGJlaGFsZiBvZiB0aGUgZ3Vlc3QuCiAgKgotICogUGluIHRoZSBOSUIgc2F2ZWQgaW4gKnEKLSAqIFJlZ2lzdGVyIHRoZSBndWVzdCBJU0MgdG8gR0lCIGludGVyZmFjZSBhbmQgcmV0cmlldmUgdGhlCi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQwomIzQzOyAqIFRoZSBjb25kaXRpb24gY29kZSBhbmQgQVAtcXVldWUgc3RhdHVzIHdvcmQgcmV0dXJuZWQgYnkgUFFBUChBUUlDKSBhcmUKJiM0MzsgKiByZWZsZWN0ZWQgYmFjayB0byB0aGUgZ3Vlc3QgYXMtaXMuIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWwKJiM0MzsgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LgogICoKLSAqIHN0YXR1cy5yZXNwb25zZV9jb2RlIG1heSBiZSBzZXQgdG8gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGluIGNhc2UgdGhlCi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC4KJiM0MzsgKiBSZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGJhc2VkIHNvbGVseSBvbiB3aGV0aGVyIGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOgomIzQzOyAqIC0gQVBfUkVTUE9OU0VfTk9STUFMIChDQz0wKTogaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI7IHRoZSBvbGQgcGlubmVkCiYjNDM7ICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuCiYjNDM7ICogLSBBbGwgb3RoZXIgcmVzcG9uc2VzOiBoYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQjsgdGhlIG5ld2x5IHBpbm5lZAomIzQzOyAqICAgcGFnZSBhbmQgcmVnaXN0ZXJlZCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgcHJldmlvdXNseSBzYXZlZCByZXNvdXJjZXMgYXJlCiYjNDM7ICogICBsZWZ0IGludGFjdC4KICAqCi0gKiBPdGhlcndpc2UgcmV0dXJuIHRoZSBhcF9xdWV1ZV9zdGF0dXMgcmV0dXJuZWQgYnkgdGhlIGFwX2FxaWMoKSwKLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LgomIzQzOyAqIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpcyByZXR1cm5lZCBpZiB2ZmlvX3Bpbl9wYWdlcygpIG9yCiYjNDM7ICoga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcigpIGZhaWxzIGJlZm9yZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBpcyBpc3N1ZWQuCiAgKgogICogUmV0dXJuOiAmYW1wO3N0cnVjdCBhcF9xdWV1ZV9zdGF0dXMKICAqLwpAQCAtNDI4LDE3ICYjNDM7NTYwLDE5IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwKIAlzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9OwogCXN0cnVjdCBrdm1fczM5MF9naXNhICpnaXNhOwogCXN0cnVjdCBwYWdlICpoX3BhZ2U7Ci0JaW50IG5pc2M7CiYjNDM7CWludCBuaXNjLCByZXQ7CiAJc3RydWN0IGt2bSAqa3ZtOwogCXBoeXNfYWRkcl90IGhfbmliOwogCWRtYV9hZGRyX3QgbmliOwotCWludCByZXQ7CiAKIAkvKiBWZXJpZnkgdGhhdCB0aGUgbm90aWZpY2F0aW9uIGluZGljYXRvciBieXRlIGFkZHJlc3MgaXMgdmFsaWQgKi8KIAlpZiAodmZpb19hcF92YWxpZGF0ZV9uaWIodmNwdSwgJmFtcDtuaWIpKSB7CiAJCVZGSU9fQVBfREJGX1dBUk4oJiMzNDslczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcbiYjMzQ7LAogCQkJCSBfX2Z1bmNfXywgJmFtcDtuaWIsIHEtJmd0O2FwcW4pOwotCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiBpbnZhbGlkIE5JQiBhZGRyZXNzICVwYWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgJmFtcDtuaWIpOwogCQlzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUzsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CkBAIC00NTMsNyAmIzQzOzU4NywxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsCiAJCVZGSU9fQVBfREJGX1dBUk4oJiMzNDslczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCwmIzM0OwogCQkJCSAmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XG4mIzM0OywKIAkJCQkgX19mdW5jX18sIHJldCwgJmFtcDtuaWIsIHEtJmd0O2FwcW4pOwotCiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiB2ZmlvX3Bpbl9wYWdlcyBmYWlsZWQgcmM9JWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgcmV0KTsKIAkJc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7CiAJCXJldHVybiBzdGF0dXM7CiAJfQpAQCAtNDc2LDcgJiM0Mzs2MTMsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLAogCWlmIChuaXNjICZsdDsgMCkgewogCQlWRklPX0FQX0RCRl9XQVJOKCYjMzQ7JXM6IGdpc2MgcmVnaXN0cmF0aW9uIGZhaWxlZDogbmlzYz0lZCwgaXNjPSVkLCBhcHFuPSUjMDR4XG4mIzM0OywKIAkJCQkgX19mdW5jX18sIG5pc2MsIGlzYywgcS0mZ3Q7YXBxbik7Ci0KJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJICAgICAmIzM0O1BRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgcmVnaXN0cmF0aW9uIGZhaWxlZCByYz0lZCBpc2M9JWRcbiYjMzQ7LAomIzQzOwkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwgbmlzYywgaXNjKTsKIAkJdmZpb191bnBpbl9wYWdlcygmYW1wO3EtJmd0O21hdHJpeF9tZGV2LSZndDt2ZGV2LCBuaWIsIDEpOwogCQlzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUzsKIAkJcmV0dXJuIHN0YXR1czsKQEAgLTQ4OSwyNCAmIzQzOzYyOSwzOCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsCiAJc3RhdHVzID0gYXBfYXFpYyhxLSZndDthcHFuLCBhcWljX2dpc2EsIGhfbmliKTsKIAlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6Ci0JCS8qIFNlZSBpZiB3ZSBkaWQgY2xlYXIgb2xkZXIgSVJRIGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kCiYjNDM7CQkgKiBndWVzdCBJU0MgYXJlIG5vIGxvbmdlciB1c2VkIGJ5IGhhcmR3YXJlIGFuZCBjYW4gYmUgZnJlZWQuCiYjNDM7CQkgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uCiYjNDM7CQkgKgomIzQzOwkJICogSVJRIHN0YXRlIHZlcmlmaWNhdGlvbiAocG9sbGluZyB1bnRpbCBJUj0xKSBpcyB0aGUKJiM0MzsJCSAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlCiYjNDM7CQkgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZQomIzQzOwkJICogZ3Vlc3QgdG8gcmVzcG9uZCB0byB0aGUgUFFBUC1BUUlDIGluc3RydWN0aW9uLgomIzQzOwkJICovCiAJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJcS0mZ3Q7c2F2ZWRfaW92YSA9IG5pYjsKIAkJcS0mZ3Q7c2F2ZWRfaXNjID0gaXNjOwogCQlicmVhazsKLQljYXNlIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEOgotCQkvKiBXZSBjb3VsZCBub3QgbW9kaWZ5IElSUSBzZXR0aW5nczogY2xlYXIgbmV3IGNvbmZpZ3VyYXRpb24gKi8KJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qCiYjNDM7CQkgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZQomIzQzOwkJICogcHJldmlvdXNseSBzYXZlZCBOSUIgYW5kIGd1ZXN0IElTQyByZW1haW4gYWN0aXZlIGFuZCBtdXN0CiYjNDM7CQkgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkCiYjNDM7CQkgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC4KJiM0MzsJCSAqLwogCQlyZXQgPSBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIoa3ZtLCBpc2MpOwotCQlpZiAocmV0KQomIzQzOwkJaWYgKHJldCkgewogCQkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxuJiMzNDssCiAJCQkJCSBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtJmd0O2FwcW4pOwomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4OiBHSVNDIHVucmVnaXN0ZXIgZmFpbGVkIHJjPSVkIGlzYz0lZFxuJiMzNDssCiYjNDM7CQkJCQkgICAgIEFQX1FJRF9DQVJEKHEtJmd0O2FwcW4pLAomIzQzOwkJCQkJICAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksIHJldCwgaXNjKTsKJiM0MzsJCX0KIAkJdmZpb191bnBpbl9wYWdlcygmYW1wO3EtJmd0O21hdHJpeF9tZGV2LSZndDt2ZGV2LCBuaWIsIDEpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl93YXJuKCYjMzQ7JXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcbiYjMzQ7LCBfX2Z1bmNfXywgcS0mZ3Q7YXBxbiwKLQkJCXN0YXR1cy5yZXNwb25zZV9jb2RlKTsKLQkJdmZpb19hcF9pcnFfZGlzYWJsZShxKTsKLQkJYnJlYWs7CiAJfQogCiAJaWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkgewpAQCAtNTE3LDYgJiM0Mzs2NzEsMTEgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLAogCQkJCSBhcWljX2dpc2Euem9uZSwgYXFpY19naXNhLmlyLCBhcWljX2dpc2EuZ2lzYywKIAkJCQkgYXFpY19naXNhLmdmLCBhcWljX2dpc2EuZ2lzYSwgYXFpY19naXNhLmlzYywKIAkJCQkgcS0mZ3Q7YXBxbik7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLSZndDttYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGVuYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XG4mIzM0OywKJiM0MzsJCQkJICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJICAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCSAgICAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC02MDEsNyAmIzQzOzc2MCw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghKHZjcHUtJmd0O2FyY2guc2llX2Jsb2NrLSZndDtlY2EgJmFtcDsgRUNBX0FJVikpIHsKIAkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBBSVYgZmFjaWxpdHkgbm90IGluc3RhbGxlZDogYXBxbj0weCUwNHgsIGVjYT0weCUwNHhcbiYjMzQ7LAogCQkJCSBfX2Z1bmNfXywgYXBxbiwgdmNwdS0mZ3Q7YXJjaC5zaWVfYmxvY2stJmd0O2VjYSk7Ci0KJiM0MzsJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IEFJViBmYWNpbGl0eSBub3QgaW5zdGFsbGVkXG4mIzM0OywKJiM0MzsJCQkJICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC02MTAsNyAmIzQzOzc3MCw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghdmNwdS0mZ3Q7a3ZtLSZndDthcmNoLmNyeXB0by5wcWFwX2hvb2spIHsKIAkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBQUUFQKEFRSUMpIGhvb2sgbm90IHJlZ2lzdGVyZWQgd2l0aCB0aGUgdmZpb19hcCBkcml2ZXI6IGFwcW49MHglMDR4XG4mIzM0OywKIAkJCQkgX19mdW5jX18sIGFwcW4pOwotCiYjNDM7CQlwcl93YXJuX3JhdGVsaW1pdGVkKCYjMzQ7UFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyXG4mIzM0OywKJiM0MzsJCQkJICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCkBAIC02MjMsNiAmIzQzOzc4NCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQlWRklPX0FQX0RCRl9XQVJOKCYjMzQ7JXM6IG1kZXYgJTA4bHgtJTA0bHgtJTA0bHgtJTA0bHgtJTA0bHglMDhseCBub3QgaW4gdXNlOiBhcHFuPTB4JTA0eFxuJiMzNDssCiAJCQkJIF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSwKIAkJCQkgdXVpZFszXSwgdXVpZFs0XSwgdXVpZFs1XSwgYXBxbik7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi0mZ3Q7bWRldiksCiYjNDM7CQkJCSAgICAgJiMzNDtQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IG1kZXYgbm90IGluIHVzZVxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTYzMSwxMSAmIzQzOzc5NSwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJVkZJT19BUF9EQkZfV0FSTigmIzM0OyVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxuJiMzNDssCiAJCQkJIF9fZnVuY19fLCBBUF9RSURfQ0FSRChhcHFuKSwKIAkJCQkgQVBfUUlEX1FVRVVFKGFwcW4pKTsKJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KG1hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJICAgICAmIzM0O1BRQVAoQVFJQykgZm9yICUwMnguJTA0eDogcXVldWUgbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxuJiMzNDssCiYjNDM7CQkJCSAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlzdGF0dXMgPSB2Y3B1LSZndDtydW4tJmd0O3MucmVncy5ncHJzWzFdOwotCiAJLyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KIAlpZiAoKHN0YXR1cyAmZ3Q7Jmd0OyAoNjMgLSAxNikpICZhbXA7IDB4MDEpCiAJCXFzdGF0dXMgPSB2ZmlvX2FwX2lycV9lbmFibGUocSwgc3RhdHVzICZhbXA7IDB4MDcsIHZjcHUpOwpAQCAtNjkyLDE0ICYjNDM7ODU4LDE0IEBAIHN0YXRpYyBib29sIF9xdWV1ZV9wYXNzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSkKIAlpZiAoIXEpCiAJCXJldHVybiBmYWxzZTsKIAotCXN3aXRjaCAocS0mZ3Q7cmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHsKLQljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKLQljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKLQljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKLQkJcmV0dXJuIHRydWU7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOwotCX0KJiM0MzsJLyoKJiM0MzsJICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnkKJiM0MzsJICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXMKJiM0MzsJICogaW5kaWNhdGVkIGJ5IHJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCAoMCkuCiYjNDM7CSAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZQomIzQzOwkgKiB0byB0aGUgZ3Vlc3QuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcS0mZ3Q7cmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMOwogfQogCiAvKgpAQCAtMTQxMCw3ICYjNDM7MTU3Niw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9ob3RfdW5wbHVnX2RvbWFpbihzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2LAogewogCURFQ0xBUkVfQklUTUFQKGFwcWlzLCBBUF9ET01BSU5TKTsKIAotCWJpdG1hcF96ZXJvKGFwcWlzLCBBUF9ERVZJQ0VTKTsKJiM0MzsJYml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpOwogCXNldF9iaXRfaW52KGFwcWksIGFwcWlzKTsKIAl2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW5zKG1hdHJpeF9tZGV2LCBhcHFpcyk7CiB9CkBAIC0xOTE1LDM3ICYjNDM7MjA4MSwxMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX2ZpbmRfcXVldWUoaW50IGFwcW4pCiAJcmV0dXJuIHE7CiB9CiAKLXN0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhpbnQgYXBxbiwgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQomIzQzO3N0YXRpYyBpbnQgYXBxX3N0YXR1c19jaGVjayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwKJiM0MzsJCQkgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKQogewogCXN3aXRjaCAoc3RhdHVzLSZndDtyZXNwb25zZV9jb2RlKSB7CiAJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CiYjNDM7CQkvKgomIzQzOwkJICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzCiYjNDM7CQkgKiBiZWVuIGluaXRpYXRlZC4gVGhlIGZvbGxvd2luZyBiaXQgc2V0dGluZ3MgaW4gdGhlIHN0YXR1cwomIzQzOwkJICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZQomIzQzOwkJICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzdGF0dXMtJmd0O3F1ZXVlX2VtcHR5ICZhbXA7JmFtcDsgIXN0YXR1cy0mZ3Q7cmVwbGllc193YWl0aW5nICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhc3RhdHVzLSZndDtpcnFfZW5hYmxlZCAmYW1wOyZhbXA7ICFzdGF0dXMtJmd0O2FzeW5jKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJLyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqLwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDoKIAljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKLQkJcmV0dXJuIDA7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIG5vbi1vcGVyYXRpb25hbDogaW50ZXJydXB0cyBhcmUgbm90IHBvc3NpYmxlIHNvCiYjNDM7CQkgKiBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLiBIb3dldmVyLCB6ZXJvaXphdGlvbgomIzQzOwkJICogY2Fubm90IGJlIGNvbmZpcm1lZCBiZWNhdXNlIGFsbCBzdGF0dXMgYml0cyBhcmUgemVyb2VkIHdoZW4KJiM0MzsJCSAqIHRoZXNlIHJlc3BvbnNlIGNvZGVzIGFyZSByZXR1cm5lZCDigJQgdGhlcmUgaXMgbm8gd2F5IHRvCiYjNDM7CQkgKiBkaXN0aW5ndWlzaCBhIHplcm9pemVkIHF1ZXVlIGZyb20gb25lIHRoYXQgaGFzIG5vdCBiZWVuCiYjNDM7CQkgKiB6ZXJvaXplZC4gUmV0dXJuIC1FTk9ERVYgdG8gc2lnbmFsIHRoYXQgQVFJQyByZXNvdXJjZXMgc2hvdWxkCiYjNDM7CQkgKiBiZSBmcmVlZCBidXQgdGhhdCB6ZXJvaXphdGlvbiBoYXMgbm90IGJlZW4gY29uZmlybWVkLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgotCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIHJlc2V0IGlzIGluIHByb2dyZXNzLiBJdCBtYXkgYmUgdGhlIHJlc2V0IHdlIGlzc3VlZCBvciBvbmUKJiM0MzsJCSAqIGlzc3VlZCBwcmlvciB0byBvdXJzOyBlaXRoZXIgd2F5LCBvbmNlIGl0IGNvbXBsZXRlcyB0aGUgcXVldWUKJiM0MzsJCSAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy4KJiM0MzsJCSAqLwogCQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwljYXNlIEFQX1JFU1BPTlNFX0JVU1k6CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91cgomIzQzOwkJICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAljYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOgogCWNhc2UgQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOgogCQkvKgomIzQzOwkJICogQVBfUkVTUE9OU0VfQlVTWToKJiM0MzsJCSAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXIKJiM0MzsJCSAqIFpBUFEgd2FzIHJlamVjdGVkIG91dHJpZ2h0LiBSZS1pc3N1ZSB0aGUgWkFQUS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRQomIzQzOwkJICogQVBfUkVTUE9OU0VfQVNTT0NfRkFJTEVEOgogCQkgKiBUaGVzZSBhc3luY2hyb25vdXMgcmVzcG9uc2UgY29kZXMgaW5kaWNhdGUgYSBQUUFQKEFBUFEpCiAJCSAqIGluc3RydWN0aW9uIHRvIGFzc29jaWF0ZSBhIHNlY3JldCB3aXRoIHRoZSBndWVzdCBmYWlsZWQuIEFsbAogCQkgKiBzdWJzZXF1ZW50IEFQIGluc3RydWN0aW9ucyB3aWxsIGVuZCB3aXRoIHRoZSBhc3luY2hyb25vdXMKLQkJICogcmVzcG9uc2UgY29kZSB1bnRpbCB0aGUgQVAgcXVldWUgaXMgcmVzZXQ7IHNvLCBsZXQmIzM5O3MgcmV0dXJuCi0JCSAqIGEgdmFsdWUgaW5kaWNhdGluZyBhIHJlc2V0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi4KJiM0MzsJCSAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0LiBSZS1pc3N1ZSB0aGUgWkFQUS4KIAkJICovCiAJCXJldHVybiAtRUFHQUlOOwomIzQzOwogCWRlZmF1bHQ6Ci0JCVdBUk4odHJ1ZSwKLQkJICAgICAmIzM0O2ZhaWxlZCB0byB2ZXJpZnkgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4OiBUQVBRIHJjPSV1XG4mIzM0OywKLQkJICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pLAotCQkgICAgIHN0YXR1cy0mZ3Q7cmVzcG9uc2VfY29kZSk7CiYjNDM7CQlyZXBvcnRfdGFwcV9yYyhxLCBzdGF0dXMtJmd0O3Jlc3BvbnNlX2NvZGUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQomIzQzO3sKJiM0MzsJaWYgKHEtJmd0O3NhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEIHx8IHEtJmd0O3NhdmVkX2lvdmEpIHsKJiM0MzsJCWlmIChxLSZndDttYXRyaXhfbWRldikgewomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJCSAgICAgJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSAmYW1wOyBHSVNDKSB0byBwcmV2ZW50IGhvc3QgY3Jhc2hcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0O1Jlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHg6IGxlYWtpbmcgQVFJQyByZXNvdXJjZXMgKE5JQiBwYWdlICZhbXA7IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxuJiMzNDssCiYjNDM7CQkJCQkgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCQkgICAgQVBfUUlEX1FVRVVFKHEtJmd0O2FwcW4pKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChxLSZndDttYXRyaXhfbWRldikgewomIzQzOwkJCWRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtJmd0O21hdHJpeF9tZGV2LSZndDttZGV2KSwKJiM0MzsJCQkJCSAgICAgJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XG4mIzM0OywKJiM0MzsJCQkJCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksCiYjNDM7CQkJCQkgICAgIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXByX3dhcm5fcmF0ZWxpbWl0ZWQoJiMzNDtSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XG4mIzM0OywKJiM0MzsJCQkJCSAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKJiM0MzsJCQkJCSAgICBBUF9RSURfUVVFVUUocS0mZ3Q7YXBxbikpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogI2RlZmluZSBXQUlUX01TRyAmIzM0O1dhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpJiMzNDsKIAomIzQzOy8qKgomIzQzOyAqIGFwcV9yZXNldF9maW5hbGl6ZSAtIHN0b3JlIGZpbmFsIFRBUFEgc3RhdHVzIGFuZCBmcmVlIEFRSUMgcmVzb3VyY2VzLgomIzQzOyAqIEBxOiAgICAgIHRoZSB2ZmlvX2FwX3F1ZXVlCiYjNDM7ICogQHN0YXR1czogdGhlIGZpbmFsIEFQIHF1ZXVlIHN0YXR1cyByZXR1cm5lZCBieSBQUUFQKFRBUFEpCiYjNDM7ICogQHJldDogICAgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGFwcV9zdGF0dXNfY2hlY2soKQomIzQzOyAqCiYjNDM7ICogQ29waWVzIHRoZSBmdWxsIFRBUFEgc3RhdHVzIHdvcmQgdG8gcS0mZ3Q7cmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1cwomIzQzOyAqIGJpdHMgcmVmbGVjdCB0aGUgY29uZmlybWVkIGVuZCBzdGF0ZSBvZiB0aGUgcXVldWUuIElmIHJldCA9PSAwLAomIzQzOyAqIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYW5kIHRoZSByZXNwb25zZSBjb2RlIGlzIG92ZXJyaWRkZW4gd2l0aAomIzQzOyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yCiYjNDM7ICogcmV0ID09IC1FTk9ERVYgKERFQ09ORklHVVJFRCBvciBDSEVDS1NUT1BQRUQpLCB0aGUgbm9uLXplcm8gcmVzcG9uc2UKJiM0MzsgKiBjb2RlIGlzIGxlZnQgaW50YWN0IHNvIF9xdWV1ZV9wYXNzYWJsZSgpIGNvcnJlY3RseSByZXR1cm5zIGZhbHNlLgomIzQzOyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGFwcV9yZXNldF9maW5hbGl6ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwKJiM0MzsJCQkgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJbWVtY3B5KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJcS0mZ3Q7cmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9OT1JNQUw7CiYjNDM7CWlmIChxLSZndDtzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCkKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogewogCWludCByZXQgPSAtRUJVU1ksIGVsYXBzZWQgPSAwOwpAQCAtMTk1OCw5ICYjNDM7MjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKQogCQltc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpOwogCQllbGFwc2VkICYjNDM7PSBBUF9SRVNFVF9JTlRFUlZBTDsKIAkJc3RhdHVzID0gYXBfdGFwcShxLSZndDthcHFuLCBOVUxMKTsKLQkJcmV0ID0gYXBxX3N0YXR1c19jaGVjayhxLSZndDthcHFuLCAmYW1wO3N0YXR1cyk7Ci0JCWlmIChyZXQgPT0gLUVJTykKJiM0MzsJCXJldCA9IGFwcV9zdGF0dXNfY2hlY2socSwgJmFtcDtzdGF0dXMpOwomIzQzOwkJaWYgKHJldCA9PSAtRUlPKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBUQVBRIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2UgY29kZS4gVGhpcwomIzQzOwkJCSAqIGluZGljYXRlcyBhIGhhcmR3YXJlIG9yIGZpcm13YXJlIGJ1ZzsgdGhlIHF1ZXVlCiYjNDM7CQkJICogY2Fubm90IGdlbmVyYXRlIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZQomIzQzOwkJCSAqIE5JQiwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgcmF0aGVyIHRoYW4gbGVhayB0aGVtLgomIzQzOwkJCSAqLwomIzQzOwkJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWlmIChlbGFwc2VkICZndDs9IEFQX1JFU0VUX01BWF9XQUlUKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBaZXJvaXphdGlvbiBjb25maXJtZWQgKHJldCA9PSAwKTogdGhlIFRBUFEgc3RhdHVzIGJpdHMKJiM0MzsJCQkgKiBpbmRpY2F0ZSB0aGUgYXN5bmMgcG9ydGlvbiBvZiB0aGUgWkFQUSBjb21wbGV0ZWQKJiM0MzsJCQkgKiBzdWNjZXNzZnVsbHkuIEZyZWUgQVFJQyByZXNvdXJjZXMgYW5kIHJldHVybi4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIFF1ZXVlIG5vbi1vcGVyYXRpb25hbCAocmV0ID09IC1FTk9ERVYpOiB0aGUgcXVldWUgaXMKJiM0MzsJCQkgKiBkZWNvbmZpZ3VyZWQgb3IgY2hlY2tzdG9wcGVkOyBpbnRlcnJ1cHRzIGFyZSBub3QKJiM0MzsJCQkgKiBwb3NzaWJsZSBzbyBBUUlDIHJlc291cmNlcyBjYW4gYmUgc2FmZWx5IGZyZWVkLgomIzQzOwkJCSAqIFplcm9pemF0aW9uIGNhbm5vdCBiZSBjb25maXJtZWQgaW4gdGhpcyBzdGF0ZSwgYnV0IHRoZQomIzQzOwkJCSAqIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzLCBzbyB0aGUgTklCIHBhZ2UgaXMKJiM0MzsJCQkgKiBubyBsb25nZXIgYSBETUEgdGFyZ2V0IGFuZCBpdCBpcyBzYWZlIHRvIGZyZWUgaXQuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHsKJiM0MzsJCQkJYXBxX3Jlc2V0X2ZpbmFsaXplKHEsICZhbXA7c3RhdHVzLCByZXQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwkJCS8qCiYjNDM7CQkJICogVGltZWQgb3V0IHdpdGhvdXQgYmVpbmcgYWJsZSB0byB2ZXJpZnkgemFwcSBjb21wbGV0ZWQuCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBUaGUgQVFJQyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcXVldWUgLSB0aGUgcGlubmVkCiYjNDM7CQkJICogcGFnZSBjb250YWluaW5nIHRoZSBOSUIgYW5kIHRoZSByZWdpc3RlcmVkIGd1ZXN0IElTQyAtCiYjNDM7CQkJICogY2Fubm90IGJlIGZyZWVkIGhlcmUuIFRoZSBOSUIgaXMgdGhlIGFjdGl2ZSBETUEgdGFyZ2V0CiYjNDM7CQkJICogZm9yIEFQIGludGVycnVwdCBkZWxpdmVyeSB1bnRpbCB0aGUgcmVzZXQgY29tcGxldGVzOwomIzQzOwkJCSAqIGZyZWVpbmcgdGhlIHBpbm5lZCBwYWdlIHdoaWxlIHRoZSBoYXJkd2FyZSBtYXkgc3RpbGwKJiM0MzsJCQkgKiB3cml0ZSB0byBpdCB3b3VsZCByZXN1bHQgaW4gYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkCiYjNDM7CQkJICogY29ycnVwdCBob3N0IG1lbW9yeS4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIElmIHRoZSByZXNldCBldmVudHVhbGx5IGNvbXBsZXRlcywgaW50ZXJydXB0cyB3aWxsIGJlCiYjNDM7CQkJICogdGVybWluYXRlZCBhbmQgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgSVNDIHJlZ2lzdHJhdGlvbgomIzQzOwkJCSAqIHdpbGwgYmUgbGVha2VkLiBUaGlzIGlzIHByZWZlcmFibGUgdG8gZWl0aGVyIGEgd2lsZCBETUEKJiM0MzsJCQkgKiB3cml0ZSBvciB3YWl0aW5nIGluZGVmaW5pdGVseTogZmx1c2hfd29yaygpIGNhbGxlcnMgaG9sZAomIzQzOwkJCSAqIHRoZSBtYXRyaXhfZGV2LSZndDttZGV2c19sb2NrIG11dGV4IHdoaWNoIHNlcmlhbGl6ZXMgYWNjZXNzCiYjNDM7CQkJICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZAomIzQzOwkJCSAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFplcm9pemF0aW9uIGNvdWxkIG5vdCBiZSBjb25maXJtZWQ7IHNldAomIzQzOwkJCSAqIHJlc2V0X3N0YXR1cyB0byBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUy4KJiM0MzsJCQkgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBzaWduYWwgdGhhdCB0aGUgcmVzZXQKJiM0MzsJCQkgKiBkaWQgbm90IGNvbXBsZXRlLCBhbmQgZW5zdXJlcyB0aGF0IGlmIHRoZSBxdWV1ZQomIzQzOwkJCSAqIGlzIHJlc2V0IGFnYWluLCB0aGUgcmUtaXNzdWUgbG9naWMgaW4KJiM0MzsJCQkgKiBhcHFfcmVzZXRfY2hlY2soKSB3aWxsIHJlLWlzc3VlIHRoZSBaQVBRLgomIzQzOwkJCSAqLwomIzQzOwkJCXEtJmd0O3Jlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJaWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHsKJiM0MzsJCQlhcHFfcmVzZXRfZmluYWxpemUocSwgJmFtcDtzdGF0dXMsIHJldCk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQogCQlpZiAocmV0ID09IC1FQlVTWSkgewogCQkJcHJfbm90aWNlX3JhdGVsaW1pdGVkKFdBSVRfTVNHLCBlbGFwc2VkLAogCQkJCQkgICAgICBBUF9RSURfQ0FSRChxLSZndDthcHFuKSwKQEAgLTE5NzUsMTEgJiM0MzsyMjkxLDcgQEAgc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqcmVzZXRfd29yaykKIAkJCSAgICByZXQgPT0gLUVBR0FJTikgewogCQkJCXN0YXR1cyA9IGFwX3phcHEocS0mZ3Q7YXBxbiwgMCk7CiAJCQkJbWVtY3B5KCZhbXA7cS0mZ3Q7cmVzZXRfc3RhdHVzLCAmYW1wO3N0YXR1cywgc2l6ZW9mKHN0YXR1cykpOwotCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJaWYgKHEtJmd0O3NhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKQotCQkJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKLQkJCWJyZWFrOwogCQl9CiAJfQogfQpAQCAtMTk5NSwyMiAmIzQzOzIzMDcsMjcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKQogCXN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHsKIAljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKIAljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgotCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKIAljYXNlIEFQX1JFU1BPTlNFX1NUQVRFX0NIQU5HRV9JTl9QUk9HUkVTUzoKIAkJLyoKIAkJICogTGV0JiMzOTtzIHZlcmlmeSB3aGV0aGVyIHRoZSBaQVBRIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb24gYSB3b3JrIHF1ZXVlLgogCQkgKi8KIAkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmFtcDtxLSZndDtyZXNldF93b3JrKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6CiAJY2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6CiAJY2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6CiAJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJV0FSTih0cnVlLAotCQkgICAgICYjMzQ7UFFBUC9aQVBRIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0ldVxuJiMzNDssCi0JCSAgICAgQVBfUUlEX0NBUkQocS0mZ3Q7YXBxbiksIEFQX1FJRF9RVUVVRShxLSZndDthcHFuKSwKLQkJICAgICBzdGF0dXMucmVzcG9uc2VfY29kZSk7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIG9ubHkgdGhlIHJlc3BvbnNlIGNvZGVzIGFib3ZlIGFzCiYjNDM7CQkgKiB2YWxpZCBmb3IgWkFQUS4gQW55IG90aGVyIHJlc3BvbnNlIGNvZGUgaW5kaWNhdGVzIGEgaGFyZHdhcmUKJiM0MzsJCSAqIG9yIGZpcm13YXJlIGJ1Zy4gU2luY2UgYSBtYWxmdW5jdGlvbmluZyBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGUKJiM0MzsJCSAqIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZSBOSUIsIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzCiYjNDM7CQkgKiByYXRoZXIgdGhhbiBsZWFrIHRoZW0uCiYjNDM7CQkgKi8KJiM0MzsJCXJlcG9ydF96YXBxX3JjKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTsKJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiB9CiAKQEAgLTIwNjEsMTIgJiM0MzsyMzc4LDI4IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldikKIAlyZXR1cm4gdmZpb19hcF9tZGV2X3NldF9rdm0obWF0cml4X21kZXYsIHZkZXYtJmd0O2t2bSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KQomIzQzO3sKJiM0MzsJaWYgKG1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlcikgewomIzQzOwkJZXZlbnRmZF9jdHhfcHV0KG1hdHJpeF9tZGV2LSZndDtyZXFfdHJpZ2dlcik7CiYjNDM7CQltYXRyaXhfbWRldi0mZ3Q7cmVxX3RyaWdnZXIgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChtYXRyaXhfbWRldi0mZ3Q7Y2ZnX2NoZ190cmlnZ2VyKSB7CiYjNDM7CQlldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtJmd0O2NmZ19jaGdfdHJpZ2dlcik7CiYjNDM7CQltYXRyaXhfbWRldi0mZ3Q7Y2ZnX2NoZ190cmlnZ2VyID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYgPQogCQljb250YWluZXJfb2YodmRldiwgc3RydWN0IGFwX21hdHJpeF9tZGV2LCB2ZGV2KTsKIAogCXZmaW9fYXBfbWRldl91bnNldF9rdm0obWF0cml4X21kZXYpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiYjNDM7CXZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bWF0cml4X2Rldi0mZ3Q7bWRldnNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9yZXF1ZXN0KHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldiwgdW5zaWduZWQgaW50IGNvdW50KQpAQCAtMjQ1Nyw4ICYjNDM7Mjc5MCw5IEBAIGludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpCiAKIAlxLSZndDthcHFuID0gYXBxbjsKIAlxLSZndDtzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEOwotCW1lbXNldCgmYW1wO3EtJmd0O3Jlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtJmd0O3Jlc2V0X3N0YXR1cykpOwogCUlOSVRfV09SSygmYW1wO3EtJmd0O3Jlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7CiYjNDM7CXZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTsKJiM0MzsJZmx1c2hfd29yaygmYW1wO3EtJmd0O3Jlc2V0X3dvcmspOwogCiAJaWYgKG1hdHJpeF9tZGV2KSB7CiAJCXZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTsKQEAgLTI1MzQsNiAmIzQzOzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KQogCSAgICB0ZXN0X2JpdF9pbnYoYXBxaSwgKHVuc2lnbmVkIGxvbmcgKiltYXRyaXhfZGV2LSZndDtpbmZvLmFxbSkpIHsKIAkJdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpOwogCQlmbHVzaF93b3JrKCZhbXA7cS0mZ3Q7cmVzZXRfd29yayk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIHF1ZXVlIGlzIG5vIGxvbmdlciBpbiB0aGUgaG9zdCYjMzk7cyBBUCBjb25maWd1cmF0aW9uLgomIzQzOwkJICogVGhlIGhhcmR3YXJlIGNhbm5vdCBETUEtd3JpdGUgdG8gdGhlIE5JQiwgc28gaXQgaXMgc2FmZQomIzQzOwkJICogdG8gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgZGlyZWN0bHkgd2l0aG91dCBpc3N1aW5nIGEKJiM0MzsJCSAqIFpBUFEuIElmIHRoZSBxdWV1ZSBpcyBub3QgYXNzaWduZWQgdG8gYW4gbWRldiwKJiM0MzsJCSAqIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIGlzIGEgbm8tb3AuCiYjNDM7CQkgKi8KJiM0MzsJCXZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTsKIAl9CiAKIGRvbmU6CkBAIC0yNTQxLDggJiM0MzsyODg0LDggQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KQogCQl2ZmlvX2FwX3VubGlua19xdWV1ZV9mcl9tZGV2KHEpOwogCiAJZGV2X3NldF9kcnZkYXRhKCZhbXA7YXBkZXYtJmd0O2RldmljZSwgTlVMTCk7Ci0Ja2ZyZWUocSk7CiAJcmVsZWFzZV91cGRhdGVfbG9ja3NfZm9yX21kZXYobWF0cml4X21kZXYpOwomIzQzOwlrZnJlZShxKTsKIH0KIAogLyoqCkBAIC0yNjk3LDExICYjNDM7MzA0MCwxMSBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfb25fY2ZnX3JlbW92ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKmN1cl9jb25maWdfaW5mbywKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FxbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YXFtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAlkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChjZHJlbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tJmd0O2FkbSwKIAkJCQkgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby0mZ3Q7YWRtLAotCQkJCSAgIEFQX0RFVklDRVMpOwomIzQzOwkJCQkgICBBUF9ET01BSU5TKTsKIAogCWlmIChkb19yZW1vdmUpCiAJCXZmaW9fYXBfbWRldl9jZmdfcmVtb3ZlKGFwcmVtLCBhcXJlbSwgY2RyZW0pOwpAQCAtMjgxMiw3ICYjNDM7MzE1NSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9jZmdfYWRkKHVuc2lnbmVkIGxvbmcgKmFwbV9hZGQsIHVuc2lnbmVkIGxvbmcgKmFxbV9hZGQsCiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FxbV9hZGQsCiAJCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7CiAJCWJpdG1hcF9hbmQobWF0cml4X21kZXYtJmd0O2FkbV9hZGQsCi0JCQkgICBtYXRyaXhfbWRldi0mZ3Q7bWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7CiYjNDM7CQkJICAgbWF0cml4X21kZXYtJmd0O21hdHJpeC5hZG0sIGFkbV9hZGQsIEFQX0RPTUFJTlMpOwogCiAJCW11dGV4X3VubG9jaygmYW1wO21hdHJpeF9kZXYtJmd0O21kZXZzX2xvY2spOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggYW5kIGl0cyBBcmNoaXRlY3R1cmFsIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYGFtZDY0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggdGhhdC4gSSBzZWUgdGhhdCB0aGUgZmlsZSB0b3VjaGVkIGlzIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIGEgYml0IG9mIGEgZmxhZyDigJMgdGhlIGBzMzkwYCBkaXJlY3RvcnkgaW1tZWRpYXRlbHkgc2NyZWFtcyBJQk0gU3lzdGVtLzM5MCwgb3IgczM5MHgsIHdoaWNoIGlzIGRlZmluaXRlbHkgKm5vdCogYGFtZDY0YC4KClNvLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgaXMgZXZlbiAqcmVsZXZhbnQqIHRvIGBhbWQ2NGAuIElzIGl0IGNvbmRpdGlvbmFsPyBJcyB0aGVyZSBzb21lIGNyb3NzLWFyY2hpdGVjdHVyZSBtYWdpYyBnb2luZyBvbiB0aGF0IEkmIzM5O20gbWlzc2luZz8gVGhlcmUmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBubyBsZWdpdGltYXRlIGNhc2Ugd2hlcmUgdGhpcyBmaWxlIHdpbGwgYmUgY29tcGlsZWQgZm9yIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZS4KCkkmIzM5O2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgdG8gcGlucG9pbnQgZXhhY3RseSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgZ2V0cyBidWlsdCBhbmQgaWYgaXQgY2FuIGV2ZXIgYmUgY29tcGlsZWQgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gczM5MC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgc291cmNlIG9mIHRoZSBhbnN3ZXIuIFNvbWV0aGluZyBzZWVtcyB3cm9uZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZGSU9fQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGU9Mzc9dmZpb19hcC1vYmpzIDo9IHZmaW9fYXBfZHJ2Lm8gdmZpb19hcF9vcHMub1xuZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZTozODpvYmotJChDT05GSUdfVkZJT19BUCkgJiM0Mzs9IHZmaW9fYXAub1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo3OiNpZm5kZWYgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDo4OiNkZWZpbmUgVkZJT19BUF9ERUJVR19IXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTE4LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yMC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjIxOiNkZWZpbmUgVkZJT19BUF9EQkZfRVJSKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfRVJSLCAjI19fVkFfQVJHU19fKVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MjM6I2RlZmluZSBWRklPX0FQX0RCRl9XQVJOKC4uLilcdFx0XHRcdFx0XFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI0LVx0ZGVidWdfc3ByaW50Zl9ldmVudCh2ZmlvX2FwX2RiZl9pbmZvLCBEQkZfV0FSTiwgIyNfX1ZBX0FSR1NfXylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNi1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyNzojZGVmaW5lIFZGSU9fQVBfREJGX0RCRyguLi4pXHRcdFx0XHRcdFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0RFQlVHLCAjI19fVkFfQVJHU19fKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0zMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjMyOiNlbmRpZiAvKiBWRklPX0FQX0RFQlVHX0ggKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTk6I2RlZmluZSBWRklPX0FQX1JPT1RfTkFNRSBcJiMzNDt2ZmlvX2FwXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MjA6I2RlZmluZSBWRklPX0FQX0RFVl9OQU1FIFwmIzM0O21hdHJpeFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTIxLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYz04Nj1zdGF0aWMgaW50IHZmaW9fYXBfbWF0cml4X2Rldl9jcmVhdGUodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6OTE6XHRyb290X2RldmljZSA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKFZGSU9fQVBfUk9PVF9OQU1FKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cdGlmIChJU19FUlIocm9vdF9kZXZpY2UpKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTE2Olx0ZGV2X3NldF9uYW1lKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlZGV2aWNlLCBcJiMzNDslc1wmIzM0OywgVkZJT19BUF9ERVZfTkFNRSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTE3LVx0bWF0cml4X2Rldi1cdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jPTE2Nz1zdGF0aWMgaW50IF9faW5pdCB2ZmlvX2FwX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTgyLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjE4MzpcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcdTAwMjZ2ZmlvX2FwX2RydiwgVEhJU19NT0RVTEUsIFZGSU9fQVBfRFJWX05BTUUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4NC1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXCYjMzQ7cGFzc3Rocm91Z2hcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcJiMzNDtWRklPIEFQIFBhc3N0aHJvdWdoIERldmljZVwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0zNDA9c3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDMtXHRcdHJldHVybjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNDQ6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDUtXHQgICAgIVdBUk5fT04oIShxLVx1MDAzZW1hdHJpeF9tZGV2IFx1MDAyNlx1MDAyNiBxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZWt2bSkpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzQ2LVx0XHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2Vrdm0sIHEtXHUwMDNlc2F2ZWRfaXNjKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzozNDc6XHRcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDgtXHR9XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTU1NT1zdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU2OS1cdGlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCBcdTAwMjZuaWIpKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NTcwOlx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NzEtXHRcdFx0XHQgX19mdW5jX18sIFx1MDAyNm5pYiwgcS1cdTAwM2VhcHFuKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTg2LVx0ZGVmYXVsdDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1ODc6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXCYjMzQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNTg4LVx0XHRcdFx0IFwmIzM0O25pYj0lcGFkLCBhcHFuPSUjMDR4XFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTMtXHRpZiAobmlzYyBcdTAwM2MgMCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjYxNDpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjE1LVx0XHRcdFx0IF9fZnVuY19fLCBuaXNjLCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY1NC1cdFx0aWYgKHJldCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjY1NTpcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NTYtXHRcdFx0XHRcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXHUwMDNlYXBxbik7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY2Ni1cdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSAhPSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo2Njc6XHRcdFZGSU9fQVBfREJGX1dBUk4oXCYjMzQ7JXM6IFBRQVAoQVFJQykgZmFpbGVkIHdpdGggc3RhdHVzPSUjMDJ4OiBcJiMzNDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02NjgtXHRcdFx0XHQgXCYjMzQ7em9uZT0lI3gsIGlyPSUjeCwgZ2lzYz0lI3gsIGY9JSN4LFwmIzM0O1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NDc9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc2MC1cdGlmICghKHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNhIFx1MDAyNiBFQ0FfQUlWKSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc2MTpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxuXCYjMzQ7LFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc2Mi1cdFx0XHRcdCBfX2Z1bmNfXywgYXBxbiwgdmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2EpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03NzAtXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjc3MTpcdFx0VkZJT19BUF9EQkZfV0FSTihcJiMzNDslczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03NzItXHRcdFx0XHQgX19mdW5jX18sIGFwcW4pO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODMtXHRcdHZmaW9fYXBfbGVfZ3VpZF90b19iZV91dWlkKFx1MDAyNm1hdHJpeF9tZGV2LVx1MDAzZW1kZXYtXHUwMDNldXVpZCwgdXVpZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzg0Olx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBtZGV2ICUwOGx4LSUwNGx4LSUwNGx4LSUwNGx4LSUwNGx4JTA4bHggbm90IGluIHVzZTogYXBxbj0weCUwNHhcXG5cJiMzNDssXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzg1LVx0XHRcdFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk0LVx0aWYgKCFxKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzk1Olx0XHRWRklPX0FQX0RCRl9XQVJOKFwmIzM0OyVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03OTYtXHRcdFx0XHQgX19mdW5jX18sIEFQX1FJRF9DQVJEKGFwcW4pLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yMTUyPXN0YXRpYyB2b2lkIHJlcG9ydF9hcWljX3Jlc291cmNlX2xlYWsoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjE1My17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE1NDpcdGlmIChxLVx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEIHx8IHEtXHUwMDNlc2F2ZWRfaW92YSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIxNTUtXHRcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIxOTU9c3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAwLVx0XHRxLVx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfTk9STUFMO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyMDE6XHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAyLVx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0MzQ9c3RhdGljIGludCB2ZmlvX2FwX21kZXZfZ2V0X2RldmljZV9pbmZvKHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDQ4LVx0aW5mby5udW1fcmVnaW9ucyA9IDA7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ0OTpcdGluZm8ubnVtX2lycXMgPSBWRklPX0FQX05VTV9JUlFTO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NTAtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTQ9c3RhdGljIHNzaXplX3QgdmZpb19hcF9nZXRfaXJxX2luZm8odW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NjMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ2NDpcdGlmIChpbmZvLmFyZ3N6IFx1MDAzYyBtaW5zeiB8fCBpbmZvLmluZGV4IFx1MDAzZT0gVkZJT19BUF9OVU1fSVJRUylcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY1LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2Ny1cdHN3aXRjaCAoaW5mby5pbmRleCkge1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0Njg6XHRjYXNlIFZGSU9fQVBfUkVRX0lSUV9JTkRFWDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY5LVx0XHRpbmZvLmNvdW50ID0gMTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ3MS1cdFx0YnJlYWs7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ3MjpcdGNhc2UgVkZJT19BUF9DRkdfQ0hHX0lSUV9JTkRFWDpcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVx0XHRpbmZvLmNvdW50ID0gMTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjQ4Mz1zdGF0aWMgaW50IHZmaW9fYXBfaXJxX3NldF9pbml0KHN0cnVjdCB2ZmlvX2lycV9zZXQgKmlycV9zZXQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDkzLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0OTQ6XHRyZXQgPSB2ZmlvX3NldF9pcnFzX3ZhbGlkYXRlX2FuZF9wcmVwYXJlKGlycV9zZXQsIDEsIFZGSU9fQVBfTlVNX0lSUVMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ5NS1cdFx0XHRcdFx0XHQgXHUwMDI2ZGF0YV9zaXplKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU3Mj1zdGF0aWMgaW50IHZmaW9fYXBfc2V0X2lycXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU4NC1cdFx0c3dpdGNoIChpcnFfc2V0LmluZGV4KSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU4NTpcdFx0Y2FzZSBWRklPX0FQX1JFUV9JUlFfSU5ERVg6XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjU4Ni1cdFx0XHRyZXR1cm4gdmZpb19hcF9zZXRfcmVxdWVzdF9pcnEobWF0cml4X21kZXYsIGFyZyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU4NzpcdFx0Y2FzZSBWRklPX0FQX0NGR19DSEdfSVJRX0lOREVYOlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1ODgtXHRcdFx0cmV0dXJuIHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKG1hdHJpeF9tZGV2LCBhcmcpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNzQyPWludCB2ZmlvX2FwX21kZXZfcmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc0OS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzUwOlx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGUuc3lzZnNfbmFtZSA9IFZGSU9fQVBfTURFVl9UWVBFX0hXVklSVDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzUxOlx0bWF0cml4X2Rldi1cdTAwM2VtZGV2X3R5cGUucHJldHR5X25hbWUgPSBWRklPX0FQX01ERVZfTkFNRV9IV1ZJUlQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc1Mi1cdG1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlcyA9IFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldl90eXBlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNzcxPWludCB2ZmlvX2FwX21kZXZfcHJvYmVfcXVldWUoc3RydWN0IGFwX2RldmljZSAqYXBkZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTEtXHRxLVx1MDAzZWFwcW4gPSBhcHFuO1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI3OTI6XHRxLVx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjc5My1cdElOSVRfV09SSyhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTI6I2lmbmRlZiBfVkZJT19BUF9QUklWQVRFX0hfXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjEzOiNkZWZpbmUgX1ZGSU9fQVBfUFJJVkFURV9IX1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTI1LVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNjojZGVmaW5lIFZGSU9fQVBfTU9EVUxFX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNzojZGVmaW5lIFZGSU9fQVBfRFJWX05BTUUgXCYjMzQ7dmZpb19hcFwmIzM0O1xuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yOC1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE0Mz1zdHJ1Y3QgdmZpb19hcF9xdWV1ZSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDYtXHRpbnRcdGFwcW47XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjE0NzojZGVmaW5lIFZGSU9fQVBfSVNDX0lOVkFMSUQgMHhmZlxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNDgtXHR1bnNpZ25lZCBjaGFyIHNhdmVkX2lzYztcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oPTE2NT12b2lkIHZmaW9fYXBfb25fc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgYXBfY29uZmlnX2luZm8gKm5ld19jb25maWdfaW5mbyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE2Ny1cbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTY4OiNlbmRpZiAvKiBfVkZJT19BUF9QUklWQVRFX0hfICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19WRklPX0FQIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1ZGSU9fQVBgIG1pZ2h0IGhhdmUgc29tZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBzMzkwIGNyeXB0byBmcmFtZXdvcmsuIFNvLCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIGJ5IGxvb2tpbmcgZGlyZWN0bHkgaW50byB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHNlZSB3aGF0LCBpZiBhbnksIGNyeXB0by1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIG9yIGZlYXR1cmVzIGFyZSB0aWVkIGludG8gYENPTkZJR19WRklPX0FQYC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbDsgaXTigJlsbCBoZWxwIG1lIGFudGljaXBhdGUgcG90ZW50aWFsIGNvbmZsaWN0cywgYnVpbGQgaXNzdWVzLCBvciBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIGRpcnR5IHdheSB0byBnZXQgYSBzb2xpZCBvdmVydmlldyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGNoZWNrIG9mIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBhY3QgYXMgYSBnb29kIGNoZWNrcG9pbnQgYmVmb3JlIEkgZ28gZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM5MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGhhdmluZyBpdDoKCioqVkZJT19BUCBDb25maWd1cmF0aW9uIEh1bnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYGNvbmZpZyBWRklPX0FQYCBpcyBkZWZpbmVkLCBvciB1c2VkLCB3aXRoaW4gdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUuIEkmIzM5O20gZ29pbmcgdG8ga2ljayBvZmYgYSBzZWFyY2ggZm9yIGl0LiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGdvaW5nIHRvIGJlIGEgYnJvYWQgc3dlZXAgYWNyb3NzIHRoZSB3aG9sZSBwcm9qZWN0LCBzbyBJIGNhbiBzZWUgZXZlcnkgY29udGV4dCBpbiB3aGljaCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1pZ2h0IGV4aXN0LiBHb3R0YSBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCBmaXJzdC4gSXQmIzM5O3MgdXN1YWxseSBmYXN0ZXIgdG8gc3RhcnQgYnJvYWQsIHRoZW4gcmVmaW5lLiBMZXQmIzM5O3MgZ2V0IHRoZSBzZWFyY2ggdW5kZXJ3YXkuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBtb2RlcmF0ZWx5IHF1aWNrIHByb2Nlc3MsIGRlcGVuZGluZyBvbiB0aGUgc3BlZWQgb2YgbXkgc2VhcmNoIHRvb2wgYW5kIGhvdyBleHBhbnNpdmUgdGhlIGtlcm5lbCByZXBvIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRklPX0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnPTgzNT1jb25maWcgVkZJT19DQ1dcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy04NDUtXG5hcmNoL3MzOTAvS2NvbmZpZzo4NDY6Y29uZmlnIFZGSU9fQVBcbmFyY2gvczM5MC9LY29uZmlnLTg0Ny1cdGRlZl90cmlzdGF0ZSBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NzMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBzMzkwIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXZlIGludG8gdGhlIHMzOTAga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGEgc3BlY2lmaWMgYXNwZWN0IG9mIGl0cyBidWlsZCBwcm9jZXNzLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSA4NDYg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGZpbmQgYSByZWxldmFudCBzZWN0aW9uLCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW9uLCBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSBkZWNsYXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLiBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIHRoZSBjb25maWcgbG9naWMgYW5kIGFueSBhc3NvY2lhdGVkIGRlZmluaXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDA6XHRcdGhlbHBcbiA4NDE6XHRcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEkvTyBzdWJjaGFubmVscyB2aWEgVkZJTy1DQ1cuXG4gODQyOlx0XG4gODQzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDg0NDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmZpb19jY3cuXG4gODQ1Olx0XG4gODQ2Olx0Y29uZmlnIFZGSU9fQVBcbiA4NDc6XHRcdGRlZl90cmlzdGF0ZSBuXG4gODQ4Olx0XHRwcm9tcHQgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBBUCBkZXZpY2VzXCYjMzQ7XG4gODQ5Olx0XHRkZXBlbmRzIG9uIEtWTVxuIDg1MDpcdFx0ZGVwZW5kcyBvbiBWRklPXG4gODUxOlx0XHRkZXBlbmRzIG9uIEFQXG4gODUyOlx0XHRzZWxlY3QgVkZJT19NREVWXG4gODUzOlx0XHRoZWxwXG4gODU0Olx0XHQgIFRoaXMgZHJpdmVyIGdyYW50cyBhY2Nlc3MgdG8gQWRqdW5jdCBQcm9jZXNzb3IgKEFQKSBkZXZpY2VzXG4gODU1Olx0XHQgIHZpYSB0aGUgVkZJTyBtZWRpYXRlZCBkZXZpY2UgaW50ZXJmYWNlLlxuIDg1NjpcdFxuIDg1NzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gODU4Olx0XHQgIHdpbGwgYmUgY2FsbGVkIHZmaW9fYXAuXG4gODU5Olx0XG4gODYwOlx0ZW5kbWVudVxuIDg2MTpcdFxuIDg2MjpcdGNvbmZpZyBDQ1dcbiA4NjM6XHRcdGRlZl9ib29sIHlcbiA4NjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIENvZGUgUGF0aCBDb25mbGljdHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgcGF0aHMuIFRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYGFyY2gvczM5MC9LY29uZmlnYCwgaXMgd2hlcmUgSSBzZWUgdGhlIGBWRklPX0FQYCBvcHRpb24gZGVmaW5lZC4gSSBrbm93IHRoYXQgbXVjaC4gTm93LCB0aGUgb3ZlcmFyY2hpbmcgZ29hbCBvZiB0aGlzIGNoZWNrIGlzIHRvIHNlZSBpZiBhbnkgY29kZSBwYXRocyBhcmUgYWNjaWRlbnRhbGx5IGV4ZWN1dGVkIG9uIGFyY2hpdGVjdHVyZSB0aGF0IHRoZXkgYXJlIG5vdCB3cml0dGVuIGZvci4gVGhpcywgSSBrbm93LCBjYW4gYmUgcHJvYmxlbWF0aWMuIFRoaXMgaXMgYmVpbmcgZmxhZ2dlZCBiZWNhdXNlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGBhbWQ2NGAsIGFuZCB3ZSYjMzk7cmUgc2VlaW5nIHNvbWV0aGluZyBzMzkwLXJlbGF0ZWQuCgpUaGUgJiMzNDtORUdBVElWRSBDUklURVJJQSYjMzQ7IHNlY3Rpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgY29kZSBleGNsdXNpdmVseSB0aWVkIHRvIGFuIGFyY2hpdGVjdHVyZSAqb3RoZXIgdGhhbiogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYSBwcm9ibGVtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBkcml2ZXJzL3MzOTAvYCBkaXJlY3RvcnkgKGFuZCBpdHMgY29udGVudHMpIGFyZSBpbmFkdmVydGVudGx5IGJlaW5nIGJ1aWx0IG9uIGFyY2hpdGVjdHVyZXMgYmVzaWRlcyBzMzkwLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGljYXRpb25zIG9mIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzMzkwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL01ha2VmaWxlPTE5OT1vYmotJChDT05GSUdfRElCUylcdFx0JiM0Mzs9IGRpYnMvXG5kcml2ZXJzL01ha2VmaWxlOjIwMDpvYmotJChDT05GSUdfUzM5MClcdFx0JiM0Mzs9IHMzOTAvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjQ1CgkJCQkJCQlvdXRwdXQ6IDk1CgkJCQkJCQl0aG91Z2h0czogNDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBzdWl0YWJsZSBmb3IgZnV6emluZywgYW5kIGhlcmUmIzM5O3Mgd2h5LiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuCgpJIHNlZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlLCBsb2NhdGVkIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBpcyBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1MzOTBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIGBDT05GSUdfUzM5MGAgaXMsIG9mIGNvdXJzZSwgb25seSBkZWZpbmVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gQ3J1Y2lhbGx5LCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhpcyBhbmFseXNpcyBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBhbnkgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYXJlLCBieSBkZWZpbml0aW9uLCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4gVGhlIGNvZGUgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgb24gdGhpcyBwbGF0Zm9ybS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSBjb25maXJtZWQgdGhhdCB0aGUgZGlmZiBvbmx5IGFmZmVjdHMgdGhhdCBzaW5nbGUgZmlsZTogYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuCgpCYXNlZCBvbiB0aGUgcnVsZXMsIHNwZWNpZmljYWxseSB0aGUgJiMzNDtVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0OyBuZWdhdGl2ZSBjcml0ZXJpYSwgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlIGNvZGUgbW9kaWZpZWQgaXMgZXhjbHVzaXZlIHRvIGFuIGFyY2hpdGVjdHVyZSBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYCwgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0IGBbXWAsIGFuZCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYWxzbyBiZSBgW11gLiBNeSByZWFzb25pbmcgaXMgZ3JvdW5kZWQgaW4gdGhlIGFyY2hpdGVjdHVyYWwgZXhjbHVzaXZpdHkgb2YgdGhlIG1vZGlmaWVkIGNvZGUg4oCTIGl0JiMzOTtzIHNpbXBseSBub3QgcmVsZXZhbnQgdG8gZnV6emluZyBvbiBhbWQ2NC4gTm93IEkmIzM5O2xsIHByZXBhcmUgdGhlIHRvb2wgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMsIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19TMzkwIC8gQ09ORklHX1ZGSU9fQVApIGFuZCBjYW5ub3QgYmUgYnVpbHQgb3IgZXhlY3V0ZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMsIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19TMzkwIC8gQ09ORklHX1ZGSU9fQVApIGFuZCBjYW5ub3QgYmUgYnVpbHQgb3IgZXhlY3V0ZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA4OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODowOC4yMjE5NzA0NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE3MTA4NDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgY29kZSBpbiBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMsIHdoaWNoIGlzIGV4Y2x1c2l2ZSB0byB0aGUgczM5MCBhcmNoaXRlY3R1cmUgKENPTkZJR19TMzkwIC8gQ09ORklHX1ZGSU9fQVApIGFuZCBjYW5ub3QgYmUgYnVpbHQgb3IgZXhlY3V0ZWQgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjA4LjIyMTk3NTk0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTE1OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDc3YjczYjJjMTQ0ZWY0MDgyZWEzNjBkMTdmMmJjMGI0MDI4NjlhOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCA2IDA4OjQ4OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xcbmluZGV4IDk0MGMwZmY2NjhiZWUuLmQwMzc2MzJkZjgwZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXFxuQEAgLTMxLDYgKzMxLDcgQEBcXG4gI2RlZmluZSBBUF9RVUVVRV9JTl9VU0UgXFxcImluIHVzZVxcXCJcXG4gXFxuICNkZWZpbmUgQVBfUkVTRVRfSU5URVJWQUxcXHRcXHQyMFxcdC8qIFJlc2V0IHNsZWVwIGludGVydmFsICgyMG1zKVxcdFxcdCovXFxuKyNkZWZpbmUgQVBfUkVTRVRfTUFYX1dBSVRcXHRcXHQyMDAwXFx0LyogTWF4aW11bSB3YWl0IGZvciByZXNldCAoMjAwMG1zKVxcdCovXFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldik7XFxuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3FsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKnFsaXN0KTtcXG5AQCAtMjI2LDI3ICsyMjcsOTAgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX21kZXZfZ2V0X3F1ZXVlKFxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhciAtIGNsZWFycyB0aGUgSVIgYml0IG9yIGdpdmVzIHVwIGFmdGVyIDUgdHJpZXNcXG4tICogQGFwcW46IFRoZSBBUCBRdWV1ZSBudW1iZXJcXG4tICpcXG4tICogQ2hlY2tzIHRoZSBJUlEgYml0IGZvciB0aGUgc3RhdHVzIG9mIHRoaXMgQVBRTiB1c2luZyBhcF90YXBxLlxcbi0gKiBSZXR1cm5zIGlmIHRoZSBhcF90YXBxIGZ1bmN0aW9uIHN1Y2NlZWRlZCBhbmQgdGhlIGJpdCBpcyBjbGVhci5cXG4tICogUmV0dXJucyBpZiBhcF90YXBxIGZ1bmN0aW9uIGZhaWxlZCB3aXRoIGludmFsaWQsIGRlY29uZmlndXJlZCBvclxcbi0gKiBjaGVja3N0b3BwZWQgQVAuXFxuLSAqIE90aGVyd2lzZSByZXRyaWVzIHVwIHRvIDUgdGltZXMgYWZ0ZXIgd2FpdGluZyAyMG1zLlxcbisgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyIC0gd2FpdCBmb3IgdGhlIElSIGJpdCB0byBjbGVhciBhZnRlciBhIGRpc2FibGVcXG4rICpcXG4rICogQGFwcW46IHRoZSBBUFFOIG9mIHRoZSBxdWV1ZVxcbisgKlxcbisgKiBSZXBlYXRlZGx5IHBvbGxzIHRoZSBBUCBxdWV1ZSBzdGF0dXMgdmlhIFBRQVAoVEFQUSkgZXZlcnkgMjBtcyB1bnRpbCB0aGUgSVJcXG4rICogYml0IGlzIGNsZWFyLCB0aGUgcXVldWUgYmVjb21lcyBub24tb3BlcmF0aW9uYWwsIG9yIDUgcmV0cmllcyBhcmUgZXhoYXVzdGVkLlxcbisgKlxcbisgKiBCZWNhdXNlIFBRQVAoQVFJQykgZGlzYWJsZSBpbml0aWF0ZXMgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MsIGFcXG4rICogY29uZGl0aW9uLWNvZGUgMCBjb21wbGV0aW9uIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgSVIgYml0IGhhcyBiZWVuIGNsZWFyZWQuXFxuKyAqIFRoZSBob3N0IG11c3QgY29uZmlybSBJUj0wIGJlZm9yZSB1bnBpbm5pbmcgdGhlIE5JQiBwYWdlIHRvIGF2b2lkIGEgd2lsZFxcbisgKiBETUEgd3JpdGUgdG8gYSBmcmVlZCBwYWdlLlxcbisgKlxcbisgKiBSZXR1cm46XFxuKyAqIC0gMFxcdFxcdGlmIHRoZSBJUiBiaXQgaXMgY2xlYXIgKGkuZS4sIGludGVycnVwdHMgYXJlIGRpc2FibGVkKS5cXG4rICpcXG4rICogLSAtRU5PREVWXFx0aWYgdGhlIFBRQVAtVEFQUSByZXNwb25zZSBjb2RlIGluZGljYXRlcyB0aGUgcXVldWUgaXMgbm90IGF2YWlsYWJsZSxcXG4rICpcXHRcXHRpcyBkZWNvbmZpZ3VyZWQsIG9yIGlzIGNoZWNrc3RvcHBlZCAoaS5lLiwgbm90IG9wZXJhdGlvbmFsKS5cXG4rICpcXG4rICogLSAtRVRJTUVET1VUXFx0dGhlIGZ1bmN0aW9uIHRpbWVkIG91dCBiZWZvcmUgdGhlIElSIGJpdCB3YXMgY2xlYXJlZC5cXG4gICovXFxuLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuK3N0YXRpYyB2b2lkIHJlcG9ydF90YXBxX3JjKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLCB1OCByYylcXG4re1xcbitcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pLCByYyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiUFFBUChUQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZXBvcnRfaXJxY2xlYXJfdGltZW91dChzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXFxuK3tcXG4rXFx0aWYgKHEtXFx1MDAzZW1hdHJpeF9tZGV2KVxcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlBRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXFxuK3tcXG4rXFx0aWYgKHEtXFx1MDAzZW1hdHJpeF9tZGV2KVxcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmMpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlBRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgQVBfUUlEX0NBUkQocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVwb3J0X3phcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxcbit7XFxuK1xcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldilcXG4rXFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZW1kZXYpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIHJjKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJQUUFQKFpBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pLCByYyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cztcXG4gXFx0aW50IHJldHJ5ID0gNTtcXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0c3RhdHVzID0gYXBfdGFwcShhcHFuLCBOVUxMKTtcXG4rXFx0XFx0c3RhdHVzID0gYXBfdGFwcShxLVxcdTAwM2VhcHFuLCBOVUxMKTtcXG4gXFx0XFx0c3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkge1xcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0XFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuIFxcdFxcdFxcdG1zbGVlcCgyMCk7XFxuQEAgLTI1NSwxNCArMzE5LDE0IEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4gXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCIlczogdGFwcSByYyAlMDJ4OiAlMDR4XFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4tXFx0XFx0XFx0XFx0ICBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0XFx0fVxcbiBcXHR9IHdoaWxlICgtLXJldHJ5KTtcXG4gXFxuLVxcdFdBUk5fT05DRSgxLCBcXFwiJXM6IHRhcHEgcmMgJTAyeDogJTA0eCBjb3VsZCBub3QgY2xlYXIgSVIgYml0XFxcXG5cXFwiLFxcbi1cXHRcXHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XFxuK1xcdHJlcG9ydF9pcnFjbGVhcl90aW1lb3V0KHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjg5LDIwICszNTMsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiB9XFxuIFxcbiAvKipcXG4tICogdmZpb19hcF9pcnFfZGlzYWJsZSAtIGRpc2FibGVzIGFuZCBjbGVhcnMgYW4gYXBfcXVldWUgaW50ZXJydXB0XFxuLSAqIEBxOiBUaGUgdmZpb19hcF9xdWV1ZVxcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxcbisgKiBAcTogdGhlIHZmaW9fYXBfcXVldWVcXG4rICpcXG4rICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3NcXG4rICogKEFQX1JFU1BPTlNFX05PUk1BTCBvciBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRCksIHBvbGxzIHZpYVxcbisgKiB2ZmlvX2FwX3dhaXRfZm9yX2lycWNsZWFyKCkgdW50aWwgdGhlIElSIGJpdCBpcyBjb25maXJtZWQgY2xlYXIgYmVmb3JlXFxuKyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXNcXG4rICogbmVjZXNzYXJ5IGJlY2F1c2UgQVFJQyBkaXNhYmxlIGlzIGFzeW5jaHJvbm91czogZnJlZWluZyB0aGUgTklCIGJlZm9yZSBJUj0wXFxuKyAqIGlzIGNvbmZpcm1lZCByaXNrcyBhIHdpbGQgRE1BIHdyaXRlIHRvIGEgZnJlZWQgaG9zdCBwYWdlLlxcbiAgKlxcbi0gKiBVc2VzIGFwX2FxaWMgdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0aW9uIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIHJlc2V0XFxuLSAqIGluIHByb2dyZXNzIG9yIElSUSBkaXNhYmxlIGNvbW1hbmQgYWxyZWFkeSBwcm9jZWVkZWQ6IGNhbGxzXFxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoKSB0byBjaGVjayBmb3IgdGhlIElSUSBiaXQgdG8gYmUgY2xlYXJcXG4tICogYW5kIGNhbGxzIHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcygpIHRvIGZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkXFxuLSAqIHdpdGggdGhlIEFQIGludGVycnVwdCBoYW5kbGluZy5cXG4rICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXNcXG4rICogaW4gcHJvZ3Jlc3MuXFxuICAqXFxuLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLFxcbi0gKiByZXRyaWVzIGFmdGVyIDIwbXMsIHVwIHRvIDUgdGltZXMuXFxuKyAqIElmIHRoZSBJUiBiaXQgY2Fubm90IGJlIGNvbmZpcm1lZCBjbGVhciAodGltZW91dCksIHRoZSBOSUIgcGFnZSBhbmQgZ3Vlc3RcXG4rICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlXFxuKyAqIGFsbG9jYXRvciwgYSBzdWJzZXF1ZW50IGhhcmR3YXJlIERNQSB3cml0ZSB0byB0aGF0IHBoeXNpY2FsIGFkZHJlc3Mgd291bGRcXG4rICogY29ycnVwdCBtZW1vcnkgYmVsb25naW5nIHRvIGEgbmV3IG93bmVyIOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXQgY291bGQgY3Jhc2hcXG4rICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuXFxuICAqXFxuLSAqIFJldHVybnMgaWYgYXBfYXFpYyBmdW5jdGlvbiBmYWlsZWQgd2l0aCBpbnZhbGlkLCBkZWNvbmZpZ3VyZWQgb3JcXG4tICogY2hlY2tzdG9wcGVkIEFQLlxcbisgKiBJZiB0aGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsIChkZWNvbmZpZ3VyZWQsIGNoZWNrc3RvcHBlZCwgbm90IGF2YWlsYWJsZSksXFxuKyAqIHJlc291cmNlcyBhcmUgZnJlZWQgaW1tZWRpYXRlbHkgc2luY2UgdGhlIGhhcmR3YXJlIGNhbiBubyBsb25nZXIgd3JpdGUgdG9cXG4rICogdGhlIE5JQi5cXG4gICpcXG4gICogUmV0dXJuOiBcXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xcbiAgKi9cXG5AQCAtMzEwLDM0ICszODIsODcgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4ge1xcbiBcXHR1bmlvbiBhcF9xaXJxX2N0cmwgYXFpY19naXNhID0geyAudmFsdWUgPSAwIH07XFxuIFxcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzO1xcbi1cXHRpbnQgcmV0cmllcyA9IDU7XFxuK1xcdGludCByZXRyaWVzID0gNSwgcmV0O1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XFxuIFxcdFxcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XFxuLVxcdFxcdFxcdHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocS1cXHUwMDNlYXBxbik7XFxuLVxcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEFRSUMgZGlzYWJsZSB3YXMgYWNjZXB0ZWQgKE5PUk1BTCksIG9yIHRoZSBxdWV1ZSB3YXNcXG4rXFx0XFx0XFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcXG4rXFx0XFx0XFx0ICogY29tcGxldGluZyAoT1RIRVJXSVNFX0NIQU5HRUQpLiAgSW4gYm90aCBjYXNlcywgd2UgbXVzdFxcbitcXHRcXHRcXHQgKiB3YWl0IHVudGlsIGludGVycnVwdCBwcm9jZXNzaW5nIGhhcyBiZWVuIGRpc2FibGVkXFxuK1xcdFxcdFxcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cmV0ID0gdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxKTtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2FpdGluZyB0byBjb25maXJtIGludGVycnVwdHMgYXJlIGRpc2FibGVkLlxcbitcXHRcXHRcXHQgKiBJZiBhcF9hcWljIHJldHVybmVkIE5PUk1BTCwgdGhlIGd1ZXN0IHdvdWxkIGluY29ycmVjdGx5XFxuK1xcdFxcdFxcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxcbitcXHRcXHRcXHQgKiByZXVzZSB0aGUgTklCIHdoaWxlIGhhcmR3YXJlIGNhbiBzdGlsbCB3cml0ZSB0byBpdC5cXG4rXFx0XFx0XFx0ICogWmVybyB0aGUgc3RhdHVzIHdvcmQgYW5kIHNldCBPVEhFUldJU0VfQ0hBTkdFRCB0byBtaW1pY1xcbitcXHRcXHRcXHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcXG4rXFx0XFx0XFx0ICogc2lnbmFscyB0byB0aGUgZ3Vlc3QgdGhhdCB0aGUgcmVzZXQgb3BlcmF0aW9uIGRpZCBub3RcXG4rXFx0XFx0XFx0ICogY29tcGxldGUuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuK1xcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2c3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7XFxuK1xcdFxcdFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0Z290byBlbmRfZmFpbDtcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxcbitcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX1NUQVRFX0NIQU5HRV9JTl9QUk9HUkVTUzpcXG4gXFx0XFx0XFx0bXNsZWVwKDIwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4rXFx0XFx0XFx0LyogQVAgbm90IG9wZXJhdGlvbmFsOyBubyBmdXJ0aGVyIGludGVycnVwdHMgcG9zc2libGUgKi9cXG4rXFx0XFx0XFx0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XFxuK1xcdFxcdFxcdGdvdG8gZW5kX2ZyZWU7XFxuIFxcdFxcdGNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTOlxcbitcXHRcXHRjYXNlIEFQX1JFU1BPTlNFX0lOVkFMSURfR0lTQTpcXG4rXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRTpcXG4rXFx0XFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XFxuIFxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdC8qIEFsbCBjYXNlcyBpbiBkZWZhdWx0IG1lYW5zIEFQIG5vdCBvcGVyYXRpb25hbCAqL1xcbi1cXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuLVxcdFxcdFxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbi1cXHRcXHRcXHRnb3RvIGVuZF9mcmVlO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaGUgQVFJQyBkaXNhYmxlIHdhcyByZWplY3RlZDsgSVJRIGlzIHN0aWxsIGVuYWJsZWRcXG4rXFx0XFx0XFx0ICogYW5kIHRoZSBoYXJkd2FyZSBzdGlsbCBob2xkcyB0aGUgTklCIGFkZHJlc3MuIERvIG5vdFxcbitcXHRcXHRcXHQgKiBmcmVlIHJlc291cmNlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHJlcG9ydF9hcWljX2Rpc2FibGVfZXJyb3IocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHRcXHRnb3RvIGVuZF9mYWlsO1xcbiBcXHRcXHR9XFxuIFxcdH0gd2hpbGUgKHJldHJpZXMtLSk7XFxuIFxcbi1cXHRXQVJOX09OQ0UoMSwgXFxcIiVzOiBhcF9hcWljIHN0YXR1cyAlZFxcXFxuXFxcIiwgX19mdW5jX18sXFxuLVxcdFxcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRyZXBvcnRfYXFpY19kaXNhYmxlX2Vycm9yKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcXG4rXFxuK2VuZF9mYWlsOlxcbitcXHQvKlxcbitcXHQgKiBXZSBhcmUgaGVyZSBlaXRoZXIgYmVjYXVzZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBmYWlsZWQgdG8gZGlzYWJsZVxcbitcXHQgKiBpbnRlcnJ1cHRzLCBvciBiZWNhdXNlIElSPTAgY291bGQgbm90IGJlIGNvbmZpcm1lZC4gSW4gZWl0aGVyIGNhc2VcXG4rXFx0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcXG4rXFx0ICogdG8gdGhlIE5JQiwgYW5kIHVucGlubmluZyB0aGUgcGFnZSB3b3VsZCBhbGxvdyBpdCB0byBiZSByZWFsbG9jYXRlZFxcbitcXHQgKiB0byBhIG5ldyBvd25lci4gQSBzdWJzZXF1ZW50IGhhcmR3YXJlIERNQSB3cml0ZSB0byB0aGF0IHBoeXNpY2FsXFxuK1xcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJ3MgbWVtb3J5IOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXRcXG4rXFx0ICogY291bGQgY3Jhc2ggb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuIFRoZSByZXNvdXJjZXMgYXJlXFxuK1xcdCAqIHRoZXJlZm9yZSBpbnRlbnRpb25hbGx5IGxlYWtlZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBzdGF0dXM7XFxuK1xcbiBlbmRfZnJlZTpcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBsYWJlbCBpcyByZWFjaGVkIGJlY2F1c2UgdGhlIHF1ZXVlIHdhcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQsXFxuK1xcdCAqIG9yIGJlY2F1c2UgdGhlIHF1ZXVlIGlzIG5vdCBvcGVyYXRpb25hbCBvciBub3QgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlXFxuK1xcdCAqIGludGVycnVwdHMgY2FuIG5vdCBiZSBwcm9jZXNzZWQsIHNvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIC0gdGhlIHBpbm5lZCBOSUJcXG4rXFx0ICogcGFnZSBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC0gdXNlZCB0byBlbmFibGUgaW50ZXJydXB0cyBzbyB0aGV5IHdpbGxcXG4rXFx0ICogbm90IGJlIGxlYWtlZC5cXG4rXFx0ICovXFxuIFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbkBAIC00MDEsMjIgKzUyNiwyOSBAQCBzdGF0aWMgaW50IGVuc3VyZV9uaWJfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIHZmaW9fYXBfaXJxX2VuYWJsZSAtIEVuYWJsZSBJbnRlcnJ1cHRpb24gZm9yIGEgQVBRTlxcbisgKiB2ZmlvX2FwX2lycV9lbmFibGUgLSBlbmFibGUgaW50ZXJydXB0cyBmb3IgYW4gQVAgcXVldWUgb24gYmVoYWxmIG9mIGEgZ3Vlc3RcXG4gICpcXG4tICogQHE6XFx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGhvbGRpbmcgQVFJQyBwYXJhbWV0ZXJzXFxuKyAqIEBxOlxcdCB0aGUgdmZpb19hcF9xdWV1ZSBmb3Igd2hpY2ggaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZFxcbiAgKiBAaXNjOiB0aGUgZ3Vlc3QgSVNDIHRvIHJlZ2lzdGVyIHdpdGggdGhlIEdJQiBpbnRlcmZhY2VcXG4tICogQHZjcHU6IHRoZSB2Y3B1IG9iamVjdCBjb250YWluaW5nIHRoZSByZWdpc3RlcnMgc3BlY2lmeWluZyB0aGUgcGFyYW1ldGVyc1xcbi0gKlxcdCAgcGFzc2VkIHRvIHRoZSBQUUFQKEFRSUMpIGluc3RydWN0aW9uLlxcbisgKiBAdmNwdTogdGhlIHZjcHUgd2hvc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIFBRQVAoQVFJQykgcGFyYW1ldGVyc1xcbisgKlxcbisgKiBQaW5zIHRoZSBndWVzdCBOSUIgcGFnZSwgcmVnaXN0ZXJzIHRoZSBndWVzdCBJU0Mgd2l0aCB0aGUgR0lCIHRvIG9idGFpbiBhXFxuKyAqIGhvc3QgSVNDLCBhbmQgcmVpc3N1ZXMgUFFBUChBUUlDKSB3aXRoIHRoZSB0cmFuc2xhdGVkIGhvc3QtYWJzb2x1dGUgTklCXFxuKyAqIGFkZHJlc3MgYW5kIGhvc3QgSVNDIG9uIGJlaGFsZiBvZiB0aGUgZ3Vlc3QuXFxuICAqXFxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXFxuLSAqIFJlZ2lzdGVyIHRoZSBndWVzdCBJU0MgdG8gR0lCIGludGVyZmFjZSBhbmQgcmV0cmlldmUgdGhlXFxuLSAqIGhvc3QgSVNDIHRvIGlzc3VlIHRoZSBob3N0IHNpZGUgUFFBUC9BUUlDXFxuKyAqIFRoZSBjb25kaXRpb24gY29kZSBhbmQgQVAtcXVldWUgc3RhdHVzIHdvcmQgcmV0dXJuZWQgYnkgUFFBUChBUUlDKSBhcmVcXG4rICogcmVmbGVjdGVkIGJhY2sgdG8gdGhlIGd1ZXN0IGFzLWlzLiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsXFxuKyAqIElSPTEpIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuXFxuICAqXFxuLSAqIHN0YXR1cy5yZXNwb25zZV9jb2RlIG1heSBiZSBzZXQgdG8gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTIGluIGNhc2UgdGhlXFxuLSAqIHZmaW9fcGluX3BhZ2VzIG9yIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIgZmFpbGVkLlxcbisgKiBSZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGJhc2VkIHNvbGVseSBvbiB3aGV0aGVyIGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOlxcbisgKiAtIEFQX1JFU1BPTlNFX05PUk1BTCAoQ0M9MCk6IGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOyB0aGUgb2xkIHBpbm5lZFxcbisgKiAgIE5JQiBwYWdlIGFuZCByZWdpc3RlcmVkIGd1ZXN0IElTQyBhcmUgZnJlZWQgYW5kIHRoZSBuZXcgb25lcyBzYXZlZC5cXG4rICogLSBBbGwgb3RoZXIgcmVzcG9uc2VzOiBoYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQjsgdGhlIG5ld2x5IHBpbm5lZFxcbisgKiAgIHBhZ2UgYW5kIHJlZ2lzdGVyZWQgSVNDIGFyZSBmcmVlZCBhbmQgdGhlIHByZXZpb3VzbHkgc2F2ZWQgcmVzb3VyY2VzIGFyZVxcbisgKiAgIGxlZnQgaW50YWN0LlxcbiAgKlxcbi0gKiBPdGhlcndpc2UgcmV0dXJuIHRoZSBhcF9xdWV1ZV9zdGF0dXMgcmV0dXJuZWQgYnkgdGhlIGFwX2FxaWMoKSxcXG4tICogYWxsIHJldHJ5IGhhbmRsaW5nIHdpbGwgYmUgZG9uZSBieSB0aGUgZ3Vlc3QuXFxuKyAqIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpcyByZXR1cm5lZCBpZiB2ZmlvX3Bpbl9wYWdlcygpIG9yXFxuKyAqIGt2bV9zMzkwX2dpc2NfcmVnaXN0ZXIoKSBmYWlscyBiZWZvcmUgdGhlIEFRSUMgaW5zdHJ1Y3Rpb24gaXMgaXNzdWVkLlxcbiAgKlxcbiAgKiBSZXR1cm46IFxcdTAwMjZzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzXFxuICAqL1xcbkBAIC00MjgsMTcgKzU2MCwxOSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXFxuIFxcdHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzID0ge307XFxuIFxcdHN0cnVjdCBrdm1fczM5MF9naXNhICpnaXNhO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xcbi1cXHRpbnQgbmlzYztcXG4rXFx0aW50IG5pc2MsIHJldDtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtO1xcbiBcXHRwaHlzX2FkZHJfdCBoX25pYjtcXG4gXFx0ZG1hX2FkZHJfdCBuaWI7XFxuLVxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBWZXJpZnkgdGhhdCB0aGUgbm90aWZpY2F0aW9uIGluZGljYXRvciBieXRlIGFkZHJlc3MgaXMgdmFsaWQgKi9cXG4gXFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFxcdTAwMjZuaWIpKSB7XFxuIFxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBpbnZhbGlkIE5JQiBhZGRyZXNzOiBuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fLCBcXHUwMDI2bmliLCBxLVxcdTAwM2VhcHFuKTtcXG4tXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogaW52YWxpZCBOSUIgYWRkcmVzcyAlcGFkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgXFx1MDAyNm5pYik7XFxuIFxcdFxcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfSU5WQUxJRF9BRERSRVNTO1xcbiBcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiBcXHR9XFxuQEAgLTQ1Myw3ICs1ODcsMTAgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCxcXFwiXFxuIFxcdFxcdFxcdFxcdCBcXFwibmliPSVwYWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgcmV0LCBcXHUwMDI2bmliLCBxLVxcdTAwM2VhcHFuKTtcXG4tXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogdmZpb19waW5fcGFnZXMgZmFpbGVkIHJjPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmV0KTtcXG4gXFx0XFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7XFxuIFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdH1cXG5AQCAtNDc2LDcgKzYxMywxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXFxuIFxcdGlmIChuaXNjIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgbmlzYywgaXNjLCBxLVxcdTAwM2VhcHFuKTtcXG4tXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogR0lTQyByZWdpc3RyYXRpb24gZmFpbGVkIHJjPSVkIGlzYz0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksIG5pc2MsIGlzYyk7XFxuIFxcdFxcdHZmaW9fdW5waW5fcGFnZXMoXFx1MDAyNnEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2LCBuaWIsIDEpO1xcbiBcXHRcXHRzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUztcXG4gXFx0XFx0cmV0dXJuIHN0YXR1cztcXG5AQCAtNDg5LDI0ICs2MjksMzggQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRzdGF0dXMgPSBhcF9hcWljKHEtXFx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgaF9uaWIpO1xcbiBcXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRcXHQvKiBTZWUgaWYgd2UgZGlkIGNsZWFyIG9sZGVyIElSUSBjb25maWd1cmF0aW9uICovXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCIGFkZHJlc3MgKENDPTApLiBUaGUgb2xkIE5JQiBhbmRcXG4rXFx0XFx0ICogZ3Vlc3QgSVNDIGFyZSBubyBsb25nZXIgdXNlZCBieSBoYXJkd2FyZSBhbmQgY2FuIGJlIGZyZWVkLlxcbitcXHRcXHQgKiBUaGUgbmV3IHJlc291cmNlcyBhcmUgc2F2ZWQgZm9yIHRyYWNraW5nIGFuZCBmdXR1cmUgdGVhcmRvd24uXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWwgSVI9MSkgaXMgdGhlXFxuK1xcdFxcdCAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBndWVzdCBBUCBidXMsIG5vdCB0aGUgaG9zdC4gVGhlXFxuK1xcdFxcdCAqIGNvbmRpdGlvbiBjb2RlIGFuZCBzdGF0dXMgd29yZCBhcmUgcmVmbGVjdGVkIGJhY2sgdG8gdGhlXFxuK1xcdFxcdCAqIGd1ZXN0IHRvIHJlc3BvbmQgdG8gdGhlIFBRQVAtQVFJQyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcXG4gXFx0XFx0cS1cXHUwMDNlc2F2ZWRfaXNjID0gaXNjO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcXG4tXFx0XFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEhhcmR3YXJlIGRpZCBub3QgYWNjZXB0IHRoZSBuZXcgTklCIChDQz0zIG9yIGVycm9yKS4gVGhlXFxuK1xcdFxcdCAqIHByZXZpb3VzbHkgc2F2ZWQgTklCIGFuZCBndWVzdCBJU0MgcmVtYWluIGFjdGl2ZSBhbmQgbXVzdFxcbitcXHRcXHQgKiBub3QgYmUgZnJlZWQuIFJlbGVhc2UgdGhlIG5ld2x5IHBpbm5lZCBwYWdlIGFuZCByZWdpc3RlcmVkXFxuK1xcdFxcdCAqIElTQyB0aGF0IHdlcmUgcHJlcGFyZWQgZm9yIHRoaXMgKHJlamVjdGVkKSByZXF1ZXN0LlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0cmV0ID0ga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyKGt2bSwgaXNjKTtcXG4tXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczoga3ZtX3MzOTBfZ2lzY191bnJlZ2lzdGVyOiByYz0lZCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXFx1MDAzZWFwcW4pO1xcbitcXHRcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVxcdTAwM2VtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgdW5yZWdpc3RlciBmYWlsZWQgcmM9JWQgaXNjPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSwgcmV0LCBpc2MpO1xcbitcXHRcXHR9XFxuIFxcdFxcdHZmaW9fdW5waW5fcGFnZXMoXFx1MDAyNnEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2V2ZGV2LCBuaWIsIDEpO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IGFwcW4gJTA0eDogcmVzcG9uc2U6ICUwMnhcXFxcblxcXCIsIF9fZnVuY19fLCBxLVxcdTAwM2VhcHFuLFxcbi1cXHRcXHRcXHRzdGF0dXMucmVzcG9uc2VfY29kZSk7XFxuLVxcdFxcdHZmaW9fYXBfaXJxX2Rpc2FibGUocSk7XFxuLVxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuQEAgLTUxNyw2ICs2NzEsMTEgQEAgc3RhdGljIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgdmZpb19hcF9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbiBcXHRcXHRcXHRcXHQgYXFpY19naXNhLnpvbmUsIGFxaWNfZ2lzYS5pciwgYXFpY19naXNhLmdpc2MsXFxuIFxcdFxcdFxcdFxcdCBhcWljX2dpc2EuZ2YsIGFxaWNfZ2lzYS5naXNhLCBhcWljX2dpc2EuaXNjLFxcbiBcXHRcXHRcXHRcXHQgcS1cXHUwMDNlYXBxbik7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXFx1MDAzZW1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCByYz0lIzAyeFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbkBAIC02MDEsNyArNzYwLDggQEAgc3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdGlmICghKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EgXFx1MDAyNiBFQ0FfQUlWKSkge1xcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EpO1xcbi1cXG4rXFx0XFx0cHJfd2Fybl9yYXRlbGltaXRlZChcXFwiUFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBBSVYgZmFjaWxpdHkgbm90IGluc3RhbGxlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuQEAgLTYxMCw3ICs3NzAsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCF2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2guY3J5cHRvLnBxYXBfaG9vaykge1xcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fLCBhcHFuKTtcXG4tXFxuK1xcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuQEAgLTYyMyw2ICs3ODQsOSBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IG1kZXYgJTA4bHgtJTA0bHgtJTA0bHgtJTA0bHgtJTA0bHglMDhseCBub3QgaW4gdXNlOiBhcHFuPTB4JTA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcXG4gXFx0XFx0XFx0XFx0IHV1aWRbM10sIHV1aWRbNF0sIHV1aWRbNV0sIGFwcW4pO1xcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogbWRldiBub3QgaW4gdXNlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuQEAgLTYzMSwxMSArNzk1LDEzIEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUXVldWUgJTAyeC4lMDR4IG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgQVBfUUlEX0NBUkQoYXBxbiksXFxuIFxcdFxcdFxcdFxcdCBBUF9RSURfUVVFVUUoYXBxbikpO1xcbitcXHRcXHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cXHUwMDNlbWRldiksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogcXVldWUgbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHRzdGF0dXMgPSB2Y3B1LVxcdTAwM2VydW4tXFx1MDAzZXMucmVncy5ncHJzWzFdO1xcbi1cXG4gXFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cXG4gXFx0aWYgKChzdGF0dXMgXFx1MDAzZVxcdTAwM2UgKDYzIC0gMTYpKSBcXHUwMDI2IDB4MDEpXFxuIFxcdFxcdHFzdGF0dXMgPSB2ZmlvX2FwX2lycV9lbmFibGUocSwgc3RhdHVzIFxcdTAwMjYgMHgwNywgdmNwdSk7XFxuQEAgLTY5MiwxNCArODU4LDE0IEBAIHN0YXRpYyBib29sIF9xdWV1ZV9wYXNzYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4gXFx0aWYgKCFxKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRzd2l0Y2ggKHEtXFx1MDAzZXJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuLVxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcXG4tXFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdH1cXG4rXFx0LypcXG4rXFx0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcXG4rXFx0ICogYXBxX3Jlc2V0X2NoZWNrKCkgdmlhIFRBUFEgc3RhdHVzIGJpdCB2ZXJpZmljYXRpb24uIFRoaXMgaXNcXG4rXFx0ICogaW5kaWNhdGVkIGJ5IHJlc2V0X3N0YXR1cy5yZXNwb25zZV9jb2RlID09IEFQX1JFU1BPTlNFX05PUk1BTCAoMCkuXFxuK1xcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxcbitcXHQgKiB0byB0aGUgZ3Vlc3QuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xNDEwLDcgKzE1NzYsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW4oc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4ge1xcbiBcXHRERUNMQVJFX0JJVE1BUChhcHFpcywgQVBfRE9NQUlOUyk7XFxuIFxcbi1cXHRiaXRtYXBfemVybyhhcHFpcywgQVBfREVWSUNFUyk7XFxuK1xcdGJpdG1hcF96ZXJvKGFwcWlzLCBBUF9ET01BSU5TKTtcXG4gXFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xcbiBcXHR2ZmlvX2FwX21kZXZfaG90X3VucGx1Z19kb21haW5zKG1hdHJpeF9tZGV2LCBhcHFpcyk7XFxuIH1cXG5AQCAtMTkxNSwzNyArMjA4MSwxMjcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICp2ZmlvX2FwX2ZpbmRfcXVldWUoaW50IGFwcW4pXFxuIFxcdHJldHVybiBxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcXG4rc3RhdGljIGludCBhcHFfc3RhdHVzX2NoZWNrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzKVxcbiB7XFxuIFxcdHN3aXRjaCAoc3RhdHVzLVxcdTAwM2VyZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGlzIHJlc3BvbnNlIGNvZGUgb25seSBpbmRpY2F0ZXMgdGhhdCB0aGUgUFFBUChaQVBRKSBoYXNcXG4rXFx0XFx0ICogYmVlbiBpbml0aWF0ZWQuIFRoZSBmb2xsb3dpbmcgYml0IHNldHRpbmdzIGluIHRoZSBzdGF0dXNcXG4rXFx0XFx0ICogcmV0dXJuZWQgZnJvbSBUQVBRIG11c3QgYmUgdmVyaWZpZWQgdG8gY29uZmlybSB0aGF0IHRoZVxcbitcXHRcXHQgKiBhc3luY2hyb25vdXMgcG9ydGlvbiBvZiB0aGUgcXVldWUgemVyb2l6YXRpb24gaGFzIGNvbXBsZXRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChzdGF0dXMtXFx1MDAzZXF1ZXVlX2VtcHR5IFxcdTAwMjZcXHUwMDI2ICFzdGF0dXMtXFx1MDAzZXJlcGxpZXNfd2FpdGluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXN0YXR1cy1cXHUwMDNlaXJxX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgIXN0YXR1cy1cXHUwMDNlYXN5bmMpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0XFx0LyogQXN5bmMgemVyb2l6YXRpb24gc3RpbGwgaW4gcHJvZ3Jlc3M7IGtlZXAgd2FpdGluZyAqL1xcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4gXFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogVGhlIHF1ZXVlIGlzIG5vbi1vcGVyYXRpb25hbDogaW50ZXJydXB0cyBhcmUgbm90IHBvc3NpYmxlIHNvXFxuK1xcdFxcdCAqIEFRSUMgcmVzb3VyY2VzIGNhbiBiZSBzYWZlbHkgZnJlZWQuIEhvd2V2ZXIsIHplcm9pemF0aW9uXFxuK1xcdFxcdCAqIGNhbm5vdCBiZSBjb25maXJtZWQgYmVjYXVzZSBhbGwgc3RhdHVzIGJpdHMgYXJlIHplcm9lZCB3aGVuXFxuK1xcdFxcdCAqIHRoZXNlIHJlc3BvbnNlIGNvZGVzIGFyZSByZXR1cm5lZCDigJQgdGhlcmUgaXMgbm8gd2F5IHRvXFxuK1xcdFxcdCAqIGRpc3Rpbmd1aXNoIGEgemVyb2l6ZWQgcXVldWUgZnJvbSBvbmUgdGhhdCBoYXMgbm90IGJlZW5cXG4rXFx0XFx0ICogemVyb2l6ZWQuIFJldHVybiAtRU5PREVWIHRvIHNpZ25hbCB0aGF0IEFRSUMgcmVzb3VyY2VzIHNob3VsZFxcbitcXHRcXHQgKiBiZSBmcmVlZCBidXQgdGhhdCB6ZXJvaXphdGlvbiBoYXMgbm90IGJlZW4gY29uZmlybWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MuIEl0IG1heSBiZSB0aGUgcmVzZXQgd2UgaXNzdWVkIG9yIG9uZVxcbitcXHRcXHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXFxuK1xcdFxcdCAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcXG4rXFx0XFx0ICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcXG4gXFx0XFx0LypcXG4rXFx0XFx0ICogQVBfUkVTUE9OU0VfQlVTWTpcXG4rXFx0XFx0ICogVGhlIHF1ZXVlIGlzIGJ1c3kgd2l0aCBzb21ldGhpbmcgdW5yZWxhdGVkIHRvIGEgcmVzZXQgYW5kIG91clxcbitcXHRcXHQgKiBaQVBRIHdhcyByZWplY3RlZCBvdXRyaWdodC4gUmUtaXNzdWUgdGhlIFpBUFEuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFXFxuK1xcdFxcdCAqIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcXG4gXFx0XFx0ICogVGhlc2UgYXN5bmNocm9ub3VzIHJlc3BvbnNlIGNvZGVzIGluZGljYXRlIGEgUFFBUChBQVBRKVxcbiBcXHRcXHQgKiBpbnN0cnVjdGlvbiB0byBhc3NvY2lhdGUgYSBzZWNyZXQgd2l0aCB0aGUgZ3Vlc3QgZmFpbGVkLiBBbGxcXG4gXFx0XFx0ICogc3Vic2VxdWVudCBBUCBpbnN0cnVjdGlvbnMgd2lsbCBlbmQgd2l0aCB0aGUgYXN5bmNocm9ub3VzXFxuLVxcdFxcdCAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0OyBzbywgbGV0J3MgcmV0dXJuXFxuLVxcdFxcdCAqIGEgdmFsdWUgaW5kaWNhdGluZyBhIHJlc2V0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi5cXG4rXFx0XFx0ICogcmVzcG9uc2UgY29kZSB1bnRpbCB0aGUgQVAgcXVldWUgaXMgcmVzZXQuIFJlLWlzc3VlIHRoZSBaQVBRLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOKHRydWUsXFxuLVxcdFxcdCAgICAgXFxcImZhaWxlZCB0byB2ZXJpZnkgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4OiBUQVBRIHJjPSV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbiksXFxuLVxcdFxcdCAgICAgc3RhdHVzLVxcdTAwM2VyZXNwb25zZV9jb2RlKTtcXG4rXFx0XFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLVxcdTAwM2VyZXNwb25zZV9jb2RlKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcXG4re1xcbitcXHRpZiAocS1cXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cXHUwMDNlc2F2ZWRfaW92YSkge1xcbitcXHRcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZW1kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbikpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQVBfUUlEX1FVRVVFKHEtXFx1MDAzZWFwcW4pKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocS1cXHUwMDNlbWF0cml4X21kZXYpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZW1kZXYpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXFxcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFQX1FJRF9RVUVVRShxLVxcdTAwM2VhcHFuKSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiAjZGVmaW5lIFdBSVRfTVNHIFxcXCJXYWl0ZWQgJWRtcyBmb3IgcmVzZXQgb2YgcXVldWUgJTAyeC4lMDR4ICgldSwgJXUsICV1KVxcXCJcXG4gXFxuKy8qKlxcbisgKiBhcHFfcmVzZXRfZmluYWxpemUgLSBzdG9yZSBmaW5hbCBUQVBRIHN0YXR1cyBhbmQgZnJlZSBBUUlDIHJlc291cmNlcy5cXG4rICogQHE6ICAgICAgdGhlIHZmaW9fYXBfcXVldWVcXG4rICogQHN0YXR1czogdGhlIGZpbmFsIEFQIHF1ZXVlIHN0YXR1cyByZXR1cm5lZCBieSBQUUFQKFRBUFEpXFxuKyAqIEByZXQ6ICAgIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhcHFfc3RhdHVzX2NoZWNrKClcXG4rICpcXG4rICogQ29waWVzIHRoZSBmdWxsIFRBUFEgc3RhdHVzIHdvcmQgdG8gcS1cXHUwMDNlcmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1c1xcbisgKiBiaXRzIHJlZmxlY3QgdGhlIGNvbmZpcm1lZCBlbmQgc3RhdGUgb2YgdGhlIHF1ZXVlLiBJZiByZXQgPT0gMCxcXG4rICogemVyb2l6YXRpb24gd2FzIGNvbmZpcm1lZCBhbmQgdGhlIHJlc3BvbnNlIGNvZGUgaXMgb3ZlcnJpZGRlbiB3aXRoXFxuKyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yXFxuKyAqIHJldCA9PSAtRU5PREVWIChERUNPTkZJR1VSRUQgb3IgQ0hFQ0tTVE9QUEVEKSwgdGhlIG5vbi16ZXJvIHJlc3BvbnNlXFxuKyAqIGNvZGUgaXMgbGVmdCBpbnRhY3Qgc28gX3F1ZXVlX3Bhc3NhYmxlKCkgY29ycmVjdGx5IHJldHVybnMgZmFsc2UuXFxuKyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KVxcbit7XFxuK1xcdG1lbWNweShcXHUwMDI2cS1cXHUwMDNlcmVzZXRfc3RhdHVzLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRxLVxcdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX05PUk1BTDtcXG4rXFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxcbitcXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuIHtcXG4gXFx0aW50IHJldCA9IC1FQlVTWSwgZWxhcHNlZCA9IDA7XFxuQEAgLTE5NTgsOSArMjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxcbiBcXHRcXHRtc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpO1xcbiBcXHRcXHRlbGFwc2VkICs9IEFQX1JFU0VUX0lOVEVSVkFMO1xcbiBcXHRcXHRzdGF0dXMgPSBhcF90YXBxKHEtXFx1MDAzZWFwcW4sIE5VTEwpO1xcbi1cXHRcXHRyZXQgPSBhcHFfc3RhdHVzX2NoZWNrKHEtXFx1MDAzZWFwcW4sIFxcdTAwMjZzdGF0dXMpO1xcbi1cXHRcXHRpZiAocmV0ID09IC1FSU8pXFxuK1xcdFxcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socSwgXFx1MDAyNnN0YXR1cyk7XFxuK1xcdFxcdGlmIChyZXQgPT0gLUVJTykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUQVBRIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2UgY29kZS4gVGhpc1xcbitcXHRcXHRcXHQgKiBpbmRpY2F0ZXMgYSBoYXJkd2FyZSBvciBmaXJtd2FyZSBidWc7IHRoZSBxdWV1ZVxcbitcXHRcXHRcXHQgKiBjYW5ub3QgZ2VuZXJhdGUgQVAgaW50ZXJydXB0cyBvciBETUEtd3JpdGUgdG8gdGhlXFxuK1xcdFxcdFxcdCAqIE5JQiwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgcmF0aGVyIHRoYW4gbGVhayB0aGVtLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGVsYXBzZWQgXFx1MDAzZT0gQVBfUkVTRVRfTUFYX1dBSVQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogWmVyb2l6YXRpb24gY29uZmlybWVkIChyZXQgPT0gMCk6IHRoZSBUQVBRIHN0YXR1cyBiaXRzXFxuK1xcdFxcdFxcdCAqIGluZGljYXRlIHRoZSBhc3luYyBwb3J0aW9uIG9mIHRoZSBaQVBRIGNvbXBsZXRlZFxcbitcXHRcXHRcXHQgKiBzdWNjZXNzZnVsbHkuIEZyZWUgQVFJQyByZXNvdXJjZXMgYW5kIHJldHVybi5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogUXVldWUgbm9uLW9wZXJhdGlvbmFsIChyZXQgPT0gLUVOT0RFVik6IHRoZSBxdWV1ZSBpc1xcbitcXHRcXHRcXHQgKiBkZWNvbmZpZ3VyZWQgb3IgY2hlY2tzdG9wcGVkOyBpbnRlcnJ1cHRzIGFyZSBub3RcXG4rXFx0XFx0XFx0ICogcG9zc2libGUgc28gQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC5cXG4rXFx0XFx0XFx0ICogWmVyb2l6YXRpb24gY2Fubm90IGJlIGNvbmZpcm1lZCBpbiB0aGlzIHN0YXRlLCBidXQgdGhlXFxuK1xcdFxcdFxcdCAqIHF1ZXVlIGNhbm5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzLCBzbyB0aGUgTklCIHBhZ2UgaXNcXG4rXFx0XFx0XFx0ICogbm8gbG9uZ2VyIGEgRE1BIHRhcmdldCBhbmQgaXQgaXMgc2FmZSB0byBmcmVlIGl0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHtcXG4rXFx0XFx0XFx0XFx0YXBxX3Jlc2V0X2ZpbmFsaXplKHEsIFxcdTAwMjZzdGF0dXMsIHJldCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBUaW1lZCBvdXQgd2l0aG91dCBiZWluZyBhYmxlIHRvIHZlcmlmeSB6YXBxIGNvbXBsZXRlZC5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogVGhlIEFRSUMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlIC0gdGhlIHBpbm5lZFxcbitcXHRcXHRcXHQgKiBwYWdlIGNvbnRhaW5pbmcgdGhlIE5JQiBhbmQgdGhlIHJlZ2lzdGVyZWQgZ3Vlc3QgSVNDIC1cXG4rXFx0XFx0XFx0ICogY2Fubm90IGJlIGZyZWVkIGhlcmUuIFRoZSBOSUIgaXMgdGhlIGFjdGl2ZSBETUEgdGFyZ2V0XFxuK1xcdFxcdFxcdCAqIGZvciBBUCBpbnRlcnJ1cHQgZGVsaXZlcnkgdW50aWwgdGhlIHJlc2V0IGNvbXBsZXRlcztcXG4rXFx0XFx0XFx0ICogZnJlZWluZyB0aGUgcGlubmVkIHBhZ2Ugd2hpbGUgdGhlIGhhcmR3YXJlIG1heSBzdGlsbFxcbitcXHRcXHRcXHQgKiB3cml0ZSB0byBpdCB3b3VsZCByZXN1bHQgaW4gYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkXFxuK1xcdFxcdFxcdCAqIGNvcnJ1cHQgaG9zdCBtZW1vcnkuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIElmIHRoZSByZXNldCBldmVudHVhbGx5IGNvbXBsZXRlcywgaW50ZXJydXB0cyB3aWxsIGJlXFxuK1xcdFxcdFxcdCAqIHRlcm1pbmF0ZWQgYW5kIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIElTQyByZWdpc3RyYXRpb25cXG4rXFx0XFx0XFx0ICogd2lsbCBiZSBsZWFrZWQuIFRoaXMgaXMgcHJlZmVyYWJsZSB0byBlaXRoZXIgYSB3aWxkIERNQVxcbitcXHRcXHRcXHQgKiB3cml0ZSBvciB3YWl0aW5nIGluZGVmaW5pdGVseTogZmx1c2hfd29yaygpIGNhbGxlcnMgaG9sZFxcbitcXHRcXHRcXHQgKiB0aGUgbWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayBtdXRleCB3aGljaCBzZXJpYWxpemVzIGFjY2Vzc1xcbitcXHRcXHRcXHQgKiB0byBhbGwgbWRldiBvYmplY3RzIHN5c3RlbS13aWRlLCBzbyBibG9ja2luZyBoZXJlIHdvdWxkXFxuK1xcdFxcdFxcdCAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRyZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHEpO1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBaZXJvaXphdGlvbiBjb3VsZCBub3QgYmUgY29uZmlybWVkOyBzZXRcXG4rXFx0XFx0XFx0ICogcmVzZXRfc3RhdHVzIHRvIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTLlxcbitcXHRcXHRcXHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBzaWduYWwgdGhhdCB0aGUgcmVzZXRcXG4rXFx0XFx0XFx0ICogZGlkIG5vdCBjb21wbGV0ZSwgYW5kIGVuc3VyZXMgdGhhdCBpZiB0aGUgcXVldWVcXG4rXFx0XFx0XFx0ICogaXMgcmVzZXQgYWdhaW4sIHRoZSByZS1pc3N1ZSBsb2dpYyBpblxcbitcXHRcXHRcXHQgKiBhcHFfcmVzZXRfY2hlY2soKSB3aWxsIHJlLWlzc3VlIHRoZSBaQVBRLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKSB7XFxuK1xcdFxcdFxcdGFwcV9yZXNldF9maW5hbGl6ZShxLCBcXHUwMDI2c3RhdHVzLCByZXQpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4gXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kpIHtcXG4gXFx0XFx0XFx0cHJfbm90aWNlX3JhdGVsaW1pdGVkKFdBSVRfTVNHLCBlbGFwc2VkLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBBUF9RSURfQ0FSRChxLVxcdTAwM2VhcHFuKSxcXG5AQCAtMTk3NSwxMSArMjI5MSw3IEBAIHN0YXRpYyB2b2lkIGFwcV9yZXNldF9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnJlc2V0X3dvcmspXFxuIFxcdFxcdFxcdCAgICByZXQgPT0gLUVBR0FJTikge1xcbiBcXHRcXHRcXHRcXHRzdGF0dXMgPSBhcF96YXBxKHEtXFx1MDAzZWFwcW4sIDApO1xcbiBcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3N0YXR1cywgXFx1MDAyNnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAocS1cXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpXFxuLVxcdFxcdFxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiB9XFxuQEAgLTE5OTUsMjIgKzIzMDcsMjcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbiBcXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOlxcbi1cXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfU1RBVEVfQ0hBTkdFX0lOX1BST0dSRVNTOlxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBMZXQncyB2ZXJpZnkgd2hldGhlciB0aGUgWkFQUSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9uIGEgd29yayBxdWV1ZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6XFxuIFxcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxcbiBcXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcXG4gXFx0XFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0V0FSTih0cnVlLFxcbi1cXHRcXHQgICAgIFxcXCJQUUFQL1pBUFEgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSV1XFxcXG5cXFwiLFxcbi1cXHRcXHQgICAgIEFQX1FJRF9DQVJEKHEtXFx1MDAzZWFwcW4pLCBBUF9RSURfUVVFVUUocS1cXHUwMDNlYXBxbiksXFxuLVxcdFxcdCAgICAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgYXJjaGl0ZWN0dXJlIGRlZmluZXMgb25seSB0aGUgcmVzcG9uc2UgY29kZXMgYWJvdmUgYXNcXG4rXFx0XFx0ICogdmFsaWQgZm9yIFpBUFEuIEFueSBvdGhlciByZXNwb25zZSBjb2RlIGluZGljYXRlcyBhIGhhcmR3YXJlXFxuK1xcdFxcdCAqIG9yIGZpcm13YXJlIGJ1Zy4gU2luY2UgYSBtYWxmdW5jdGlvbmluZyBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGVcXG4rXFx0XFx0ICogQVAgaW50ZXJydXB0cyBvciBETUEtd3JpdGUgdG8gdGhlIE5JQiwgZnJlZSB0aGUgQVFJQyByZXNvdXJjZXNcXG4rXFx0XFx0ICogcmF0aGVyIHRoYW4gbGVhayB0aGVtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVwb3J0X3phcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xcbitcXHRcXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjA2MSwxMiArMjM3OCwyOCBAQCBzdGF0aWMgaW50IHZmaW9fYXBfbWRldl9vcGVuX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuIFxcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cXHUwMDNla3ZtKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldilcXG4re1xcbitcXHRpZiAobWF0cml4X21kZXYtXFx1MDAzZXJlcV90cmlnZ2VyKSB7XFxuK1xcdFxcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cXHUwMDNlcmVxX3RyaWdnZXIpO1xcbitcXHRcXHRtYXRyaXhfbWRldi1cXHUwMDNlcmVxX3RyaWdnZXIgPSBOVUxMO1xcbitcXHR9XFxuK1xcdGlmIChtYXRyaXhfbWRldi1cXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKSB7XFxuK1xcdFxcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKTtcXG4rXFx0XFx0bWF0cml4X21kZXYtXFx1MDAzZWNmZ19jaGdfdHJpZ2dlciA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldiA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgYXBfbWF0cml4X21kZXYsIHZkZXYpO1xcbiBcXG4gXFx0dmZpb19hcF9tZGV2X3Vuc2V0X2t2bShtYXRyaXhfbWRldik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYXRyaXhfZGV2LVxcdTAwM2VtZGV2c19sb2NrKTtcXG4rXFx0dmZpb19hcF9tZGV2X3JlbGVhc2VfZXZlbnRmZHMobWF0cml4X21kZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZW1kZXZzX2xvY2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVxdWVzdChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIGludCBjb3VudClcXG5AQCAtMjQ1Nyw4ICsyNzkwLDkgQEAgaW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4gXFxuIFxcdHEtXFx1MDAzZWFwcW4gPSBhcHFuO1xcbiBcXHRxLVxcdTAwM2VzYXZlZF9pc2MgPSBWRklPX0FQX0lTQ19JTlZBTElEO1xcbi1cXHRtZW1zZXQoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXFx1MDAzZXJlc2V0X3N0YXR1cykpO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnEtXFx1MDAzZXJlc2V0X3dvcmssIGFwcV9yZXNldF9jaGVjayk7XFxuK1xcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcXG4rXFx0Zmx1c2hfd29yayhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yayk7XFxuIFxcbiBcXHRpZiAobWF0cml4X21kZXYpIHtcXG4gXFx0XFx0dmZpb19hcF9tZGV2X2xpbmtfcXVldWUobWF0cml4X21kZXYsIHEpO1xcbkBAIC0yNTM0LDYgKzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXHQgICAgdGVzdF9iaXRfaW52KGFwcWksICh1bnNpZ25lZCBsb25nICopbWF0cml4X2Rldi1cXHUwMDNlaW5mby5hcW0pKSB7XFxuIFxcdFxcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcXG4gXFx0XFx0Zmx1c2hfd29yayhcXHUwMDI2cS1cXHUwMDNlcmVzZXRfd29yayk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBxdWV1ZSBpcyBubyBsb25nZXIgaW4gdGhlIGhvc3QncyBBUCBjb25maWd1cmF0aW9uLlxcbitcXHRcXHQgKiBUaGUgaGFyZHdhcmUgY2Fubm90IERNQS13cml0ZSB0byB0aGUgTklCLCBzbyBpdCBpcyBzYWZlXFxuK1xcdFxcdCAqIHRvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIGRpcmVjdGx5IHdpdGhvdXQgaXNzdWluZyBhXFxuK1xcdFxcdCAqIFpBUFEuIElmIHRoZSBxdWV1ZSBpcyBub3QgYXNzaWduZWQgdG8gYW4gbWRldixcXG4rXFx0XFx0ICogdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKCkgaXMgYSBuby1vcC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4gXFx0fVxcbiBcXG4gZG9uZTpcXG5AQCAtMjU0MSw4ICsyODg0LDggQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxcbiBcXHRcXHR2ZmlvX2FwX3VubGlua19xdWV1ZV9mcl9tZGV2KHEpO1xcbiBcXG4gXFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZhcGRldi1cXHUwMDNlZGV2aWNlLCBOVUxMKTtcXG4tXFx0a2ZyZWUocSk7XFxuIFxcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KG1hdHJpeF9tZGV2KTtcXG4rXFx0a2ZyZWUocSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yNjk3LDExICszMDQwLDExIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxcbiBcXHRkb19yZW1vdmUgfD0gYml0bWFwX2FuZG5vdChhcXJlbSxcXG4gXFx0XFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVxcdTAwM2VhcW0sXFxuIFxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVxcdTAwM2VhcW0sXFxuLVxcdFxcdFxcdFxcdCAgIEFQX0RFVklDRVMpO1xcbitcXHRcXHRcXHRcXHQgICBBUF9ET01BSU5TKTtcXG4gXFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoY2RyZW0sXFxuIFxcdFxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nICopcHJldl9jb25maWdfaW5mby1cXHUwMDNlYWRtLFxcbiBcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyAqKWN1cl9jb25maWdfaW5mby1cXHUwMDNlYWRtLFxcbi1cXHRcXHRcXHRcXHQgICBBUF9ERVZJQ0VTKTtcXG4rXFx0XFx0XFx0XFx0ICAgQVBfRE9NQUlOUyk7XFxuIFxcbiBcXHRpZiAoZG9fcmVtb3ZlKVxcbiBcXHRcXHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcXG5AQCAtMjgxMiw3ICszMTU1LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2NmZ19hZGQodW5zaWduZWQgbG9uZyAqYXBtX2FkZCwgdW5zaWduZWQgbG9uZyAqYXFtX2FkZCxcXG4gXFx0XFx0Yml0bWFwX2FuZChtYXRyaXhfbWRldi1cXHUwMDNlYXFtX2FkZCxcXG4gXFx0XFx0XFx0ICAgbWF0cml4X21kZXYtXFx1MDAzZW1hdHJpeC5hcW0sIGFxbV9hZGQsIEFQX0RPTUFJTlMpO1xcbiBcXHRcXHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVxcdTAwM2VhZG1fYWRkLFxcbi1cXHRcXHRcXHQgICBtYXRyaXhfbWRldi1cXHUwMDNlbWF0cml4LmFkbSwgYWRtX2FkZCwgQVBfREVWSUNFUyk7XFxuK1xcdFxcdFxcdCAgIG1hdHJpeF9tZGV2LVxcdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ET01BSU5TKTtcXG4gXFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldnNfbG9jayk7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MDguNzc2ODEzOTY3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTYxNjE5MDA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBjb2RlIGluIGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYywgd2hpY2ggaXMgZXhjbHVzaXZlIHRvIHRoZSBzMzkwIGFyY2hpdGVjdHVyZSAoQ09ORklHX1MzOTAgLyBDT05GSUdfVkZJT19BUCkgYW5kIGNhbm5vdCBiZSBidWlsdCBvciBleGVjdXRlZCBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NzdiNzNiMmMxNDRlZjQwODJlYTM2MGQxN2YyYmMwYjQwMjg2OWE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwODo0ODowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuaW5kZXggOTQwYzBmZjY2OGJlZS4uZDAzNzYzMmRmODBlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY1xuKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNkZWZpbmUgQVBfUVVFVUVfSU5fVVNFIFwiaW4gdXNlXCJcbiBcbiAjZGVmaW5lIEFQX1JFU0VUX0lOVEVSVkFMXHRcdDIwXHQvKiBSZXNldCBzbGVlcCBpbnRlcnZhbCAoMjBtcylcdFx0Ki9cbisjZGVmaW5lIEFQX1JFU0VUX01BWF9XQUlUXHRcdDIwMDBcdC8qIE1heGltdW0gd2FpdCBmb3IgcmVzZXQgKDIwMDBtcylcdCovXG4gXG4gc3RhdGljIGludCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWVzKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpO1xuIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X3Jlc2V0X3FsaXN0KHN0cnVjdCBsaXN0X2hlYWQgKnFsaXN0KTtcbkBAIC0yMjYsMjcgKzIyNyw5MCBAQCBzdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfbWRldl9nZXRfcXVldWUoXG4gfVxuIFxuIC8qKlxuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSBjbGVhcnMgdGhlIElSIGJpdCBvciBnaXZlcyB1cCBhZnRlciA1IHRyaWVzXG4tICogQGFwcW46IFRoZSBBUCBRdWV1ZSBudW1iZXJcbi0gKlxuLSAqIENoZWNrcyB0aGUgSVJRIGJpdCBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIEFQUU4gdXNpbmcgYXBfdGFwcS5cbi0gKiBSZXR1cm5zIGlmIHRoZSBhcF90YXBxIGZ1bmN0aW9uIHN1Y2NlZWRlZCBhbmQgdGhlIGJpdCBpcyBjbGVhci5cbi0gKiBSZXR1cm5zIGlmIGFwX3RhcHEgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuLSAqIE90aGVyd2lzZSByZXRyaWVzIHVwIHRvIDUgdGltZXMgYWZ0ZXIgd2FpdGluZyAyMG1zLlxuKyAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIgLSB3YWl0IGZvciB0aGUgSVIgYml0IHRvIGNsZWFyIGFmdGVyIGEgZGlzYWJsZVxuKyAqXG4rICogQGFwcW46IHRoZSBBUFFOIG9mIHRoZSBxdWV1ZVxuKyAqXG4rICogUmVwZWF0ZWRseSBwb2xscyB0aGUgQVAgcXVldWUgc3RhdHVzIHZpYSBQUUFQKFRBUFEpIGV2ZXJ5IDIwbXMgdW50aWwgdGhlIElSXG4rICogYml0IGlzIGNsZWFyLCB0aGUgcXVldWUgYmVjb21lcyBub24tb3BlcmF0aW9uYWwsIG9yIDUgcmV0cmllcyBhcmUgZXhoYXVzdGVkLlxuKyAqXG4rICogQmVjYXVzZSBQUUFQKEFRSUMpIGRpc2FibGUgaW5pdGlhdGVzIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLCBhXG4rICogY29uZGl0aW9uLWNvZGUgMCBjb21wbGV0aW9uIGRvZXMgbm90IGd1YXJhbnRlZSB0aGUgSVIgYml0IGhhcyBiZWVuIGNsZWFyZWQuXG4rICogVGhlIGhvc3QgbXVzdCBjb25maXJtIElSPTAgYmVmb3JlIHVucGlubmluZyB0aGUgTklCIHBhZ2UgdG8gYXZvaWQgYSB3aWxkXG4rICogRE1BIHdyaXRlIHRvIGEgZnJlZWQgcGFnZS5cbisgKlxuKyAqIFJldHVybjpcbisgKiAtIDBcdFx0aWYgdGhlIElSIGJpdCBpcyBjbGVhciAoaS5lLiwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQpLlxuKyAqXG4rICogLSAtRU5PREVWXHRpZiB0aGUgUFFBUC1UQVBRIHJlc3BvbnNlIGNvZGUgaW5kaWNhdGVzIHRoZSBxdWV1ZSBpcyBub3QgYXZhaWxhYmxlLFxuKyAqXHRcdGlzIGRlY29uZmlndXJlZCwgb3IgaXMgY2hlY2tzdG9wcGVkIChpLmUuLCBub3Qgb3BlcmF0aW9uYWwpLlxuKyAqXG4rICogLSAtRVRJTUVET1VUXHR0aGUgZnVuY3Rpb24gdGltZWQgb3V0IGJlZm9yZSB0aGUgSVIgYml0IHdhcyBjbGVhcmVkLlxuICAqL1xuLXN0YXRpYyB2b2lkIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoaW50IGFwcW4pXG4rc3RhdGljIHZvaWQgcmVwb3J0X3RhcHFfcmMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuK3tcbitcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoVEFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4rXHRlbHNlXG4rXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJQUUFQKFRBUFEpIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0lIzAyeFxcblwiLFxuK1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVwb3J0X2lycWNsZWFyX3RpbWVvdXQoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsIHU4IHJjKVxuK3tcbitcdGlmIChxLVx1MDAzZW1hdHJpeF9tZGV2KVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoVEFQUSkgdGltZWQgb3V0IHdhaXRpbmcgZm9yIElSUSBjbGVhciBvbiAlMDJ4LiUwNHg6IHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByYyk7XG4rXHRlbHNlXG4rXHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJQUUFQKFRBUFEpIHRpbWVkIG91dCB3YWl0aW5nIGZvciBJUlEgY2xlYXIgb24gJTAyeC4lMDR4OiByYz0lIzAyeFxcblwiLFxuK1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXG4re1xuK1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChBUUlDKSBkaXNhYmxlIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggcmM9JSMwMnhcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbitcdGVsc2VcbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoQVFJQykgZGlzYWJsZSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuK31cbitcbitzdGF0aWMgdm9pZCByZXBvcnRfemFwcV9yYyhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSwgdTggcmMpXG4re1xuK1x0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChaQVBRKSBmb3IgJTAyeC4lMDR4IGZhaWxlZCB3aXRoIGludmFsaWQgcmM9JSMwMnhcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIHJjKTtcbitcdGVsc2VcbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoWkFQUSkgZm9yICUwMnguJTA0eCBmYWlsZWQgd2l0aCBpbnZhbGlkIHJjPSUjMDJ4XFxuXCIsXG4rXHRcdFx0XHQgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmMpO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4gXHRpbnQgcmV0cnkgPSA1O1xuIFxuIFx0ZG8ge1xuLVx0XHRzdGF0dXMgPSBhcF90YXBxKGFwcW4sIE5VTEwpO1xuK1x0XHRzdGF0dXMgPSBhcF90YXBxKHEtXHUwMDNlYXBxbiwgTlVMTCk7XG4gXHRcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4gXHRcdFx0aWYgKCFzdGF0dXMuaXJxX2VuYWJsZWQpXG4tXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHRmYWxsdGhyb3VnaDtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9CVVNZOlxuIFx0XHRcdG1zbGVlcCgyMCk7XG5AQCAtMjU1LDE0ICszMTksMTQgQEAgc3RhdGljIHZvaWQgdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihpbnQgYXBxbilcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuIFx0XHRkZWZhdWx0OlxuLVx0XHRcdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6ICUwNHhcXG5cIiwgX19mdW5jX18sXG4tXHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlLCBhcHFuKTtcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuK1x0XHRcdHJldHVybiAtRU5PREVWO1xuIFx0XHR9XG4gXHR9IHdoaWxlICgtLXJldHJ5KTtcbiBcbi1cdFdBUk5fT05DRSgxLCBcIiVzOiB0YXBxIHJjICUwMng6ICUwNHggY291bGQgbm90IGNsZWFyIElSIGJpdFxcblwiLFxuLVx0XHQgIF9fZnVuY19fLCBzdGF0dXMucmVzcG9uc2VfY29kZSwgYXBxbik7XG4rXHRyZXBvcnRfaXJxY2xlYXJfdGltZW91dChxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbiB9XG4gXG4gLyoqXG5AQCAtMjg5LDIwICszNTMsMjggQEAgc3RhdGljIHZvaWQgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIH1cbiBcbiAvKipcbi0gKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZXMgYW5kIGNsZWFycyBhbiBhcF9xdWV1ZSBpbnRlcnJ1cHRcbi0gKiBAcTogVGhlIHZmaW9fYXBfcXVldWVcbisgKiB2ZmlvX2FwX2lycV9kaXNhYmxlIC0gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBhbiBBUCBxdWV1ZVxuKyAqIEBxOiB0aGUgdmZpb19hcF9xdWV1ZVxuKyAqXG4rICogSXNzdWVzIFBRQVAoQVFJQykgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgQVAgcXVldWUuIE9uIHN1Y2Nlc3NcbisgKiAoQVBfUkVTUE9OU0VfTk9STUFMIG9yIEFQX1JFU1BPTlNFX09USEVSV0lTRV9DSEFOR0VEKSwgcG9sbHMgdmlhXG4rICogdmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcigpIHVudGlsIHRoZSBJUiBiaXQgaXMgY29uZmlybWVkIGNsZWFyIGJlZm9yZVxuKyAqIGZyZWVpbmcgdGhlIHBpbm5lZCBOSUIgcGFnZSBhbmQgdW5yZWdpc3RlcmluZyB0aGUgZ3Vlc3QgSVNDLiBUaGlzIHdhaXQgaXNcbisgKiBuZWNlc3NhcnkgYmVjYXVzZSBBUUlDIGRpc2FibGUgaXMgYXN5bmNocm9ub3VzOiBmcmVlaW5nIHRoZSBOSUIgYmVmb3JlIElSPTBcbisgKiBpcyBjb25maXJtZWQgcmlza3MgYSB3aWxkIERNQSB3cml0ZSB0byBhIGZyZWVkIGhvc3QgcGFnZS5cbiAgKlxuLSAqIFVzZXMgYXBfYXFpYyB0byBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRpb24gYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcywgcmVzZXRcbi0gKiBpbiBwcm9ncmVzcyBvciBJUlEgZGlzYWJsZSBjb21tYW5kIGFscmVhZHkgcHJvY2VlZGVkOiBjYWxsc1xuLSAqIHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIoKSB0byBjaGVjayBmb3IgdGhlIElSUSBiaXQgdG8gYmUgY2xlYXJcbi0gKiBhbmQgY2FsbHMgdmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKCkgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWRcbi0gKiB3aXRoIHRoZSBBUCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG4rICogUmV0cmllcyB1cCB0byA1IHRpbWVzICh3aXRoIDIwbXMgc2xlZXApIGlmIHRoZSBxdWV1ZSBpcyBidXN5IG9yIGEgcmVzZXQgaXNcbisgKiBpbiBwcm9ncmVzcy5cbiAgKlxuLSAqIEluIHRoZSBjYXNlIHRoZSBBUCBpcyBidXN5LCBvciBhIHJlc2V0IGlzIGluIHByb2dyZXNzLFxuLSAqIHJldHJpZXMgYWZ0ZXIgMjBtcywgdXAgdG8gNSB0aW1lcy5cbisgKiBJZiB0aGUgSVIgYml0IGNhbm5vdCBiZSBjb25maXJtZWQgY2xlYXIgKHRpbWVvdXQpLCB0aGUgTklCIHBhZ2UgYW5kIGd1ZXN0XG4rICogSVNDIGFyZSBpbnRlbnRpb25hbGx5IGxlYWtlZC4gSWYgdGhlIHBhZ2Ugd2VyZSB1bnBpbm5lZCBhbmQgcmV0dXJuZWQgdG8gdGhlXG4rICogYWxsb2NhdG9yLCBhIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWwgYWRkcmVzcyB3b3VsZFxuKyAqIGNvcnJ1cHQgbWVtb3J5IGJlbG9uZ2luZyB0byBhIG5ldyBvd25lciDigJQgYSB3aWxkIERNQSB3cml0ZSB0aGF0IGNvdWxkIGNyYXNoXG4rICogb3IgY29tcHJvbWlzZSB0aGUgaG9zdCBrZXJuZWwuXG4gICpcbi0gKiBSZXR1cm5zIGlmIGFwX2FxaWMgZnVuY3Rpb24gZmFpbGVkIHdpdGggaW52YWxpZCwgZGVjb25maWd1cmVkIG9yXG4tICogY2hlY2tzdG9wcGVkIEFQLlxuKyAqIElmIHRoZSBxdWV1ZSBpcyBub24tb3BlcmF0aW9uYWwgKGRlY29uZmlndXJlZCwgY2hlY2tzdG9wcGVkLCBub3QgYXZhaWxhYmxlKSxcbisgKiByZXNvdXJjZXMgYXJlIGZyZWVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZSBoYXJkd2FyZSBjYW4gbm8gbG9uZ2VyIHdyaXRlIHRvXG4rICogdGhlIE5JQi5cbiAgKlxuICAqIFJldHVybjogXHUwMDI2c3RydWN0IGFwX3F1ZXVlX3N0YXR1c1xuICAqL1xuQEAgLTMxMCwzNCArMzgyLDg3IEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4ge1xuIFx0dW5pb24gYXBfcWlycV9jdHJsIGFxaWNfZ2lzYSA9IHsgLnZhbHVlID0gMCB9O1xuIFx0c3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBzdGF0dXM7XG4tXHRpbnQgcmV0cmllcyA9IDU7XG4rXHRpbnQgcmV0cmllcyA9IDUsIHJldDtcbiBcbiBcdGRvIHtcbiBcdFx0c3RhdHVzID0gYXBfYXFpYyhxLVx1MDAzZWFwcW4sIGFxaWNfZ2lzYSwgMCk7XG4gXHRcdHN3aXRjaCAoc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6XG4tXHRcdFx0dmZpb19hcF93YWl0X2Zvcl9pcnFjbGVhcihxLVx1MDAzZWFwcW4pO1xuLVx0XHRcdGdvdG8gZW5kX2ZyZWU7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBBUUlDIGRpc2FibGUgd2FzIGFjY2VwdGVkIChOT1JNQUwpLCBvciB0aGUgcXVldWUgd2FzXG4rXHRcdFx0ICogYWxyZWFkeSBkaXNhYmxlZCBvciBhIHByaW9yIGFzeW5jIHJlcXVlc3QgaXMgc3RpbGxcbitcdFx0XHQgKiBjb21wbGV0aW5nIChPVEhFUldJU0VfQ0hBTkdFRCkuICBJbiBib3RoIGNhc2VzLCB3ZSBtdXN0XG4rXHRcdFx0ICogd2FpdCB1bnRpbCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBoYXMgYmVlbiBkaXNhYmxlZFxuK1x0XHRcdCAqIGJlZm9yZSBwcm9jZWVkaW5nLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJldCA9IHZmaW9fYXBfd2FpdF9mb3JfaXJxY2xlYXIocSk7XG4rXHRcdFx0aWYgKHJldCA9PSAwIHx8IHJldCA9PSAtRU5PREVWKVxuK1x0XHRcdFx0Z290byBlbmRfZnJlZTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRpbWVkIG91dCB3YWl0aW5nIHRvIGNvbmZpcm0gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuXG4rXHRcdFx0ICogSWYgYXBfYXFpYyByZXR1cm5lZCBOT1JNQUwsIHRoZSBndWVzdCB3b3VsZCBpbmNvcnJlY3RseVxuK1x0XHRcdCAqIGludGVycHJldCB0aGF0IGFzIGEgc3VjY2Vzc2Z1bCBkaXNhYmxlIGFuZCBtYXkgZnJlZSBvclxuK1x0XHRcdCAqIHJldXNlIHRoZSBOSUIgd2hpbGUgaGFyZHdhcmUgY2FuIHN0aWxsIHdyaXRlIHRvIGl0LlxuK1x0XHRcdCAqIFplcm8gdGhlIHN0YXR1cyB3b3JkIGFuZCBzZXQgT1RIRVJXSVNFX0NIQU5HRUQgdG8gbWltaWNcbitcdFx0XHQgKiB3aGF0IHRoZSBoYXJkd2FyZSBkb2VzIGZvciB0aGF0IHJlc3BvbnNlIGNvZGUuIFRoaXNcbitcdFx0XHQgKiBzaWduYWxzIHRvIHRoZSBndWVzdCB0aGF0IHRoZSByZXNldCBvcGVyYXRpb24gZGlkIG5vdFxuK1x0XHRcdCAqIGNvbXBsZXRlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChzdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUwpIHtcbitcdFx0XHRcdG1lbXNldChcdTAwMjZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTtcbitcdFx0XHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlID0gQVBfUkVTUE9OU0VfT1RIRVJXSVNFX0NIQU5HRUQ7XG4rXHRcdFx0fVxuK1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQlVTWTpcbitcdFx0Y2FzZSBBUF9SRVNQT05TRV9TVEFURV9DSEFOR0VfSU5fUFJPR1JFU1M6XG4gXHRcdFx0bXNsZWVwKDIwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDpcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4gXHRcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuK1x0XHRcdC8qIEFQIG5vdCBvcGVyYXRpb25hbDsgbm8gZnVydGhlciBpbnRlcnJ1cHRzIHBvc3NpYmxlICovXG4rXHRcdFx0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXHRcdFx0Z290byBlbmRfZnJlZTtcbiBcdFx0Y2FzZSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M6XG4rXHRcdGNhc2UgQVBfUkVTUE9OU0VfSU5WQUxJRF9HSVNBOlxuK1x0XHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOlxuK1x0XHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX0ZBSUxFRDpcbiBcdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKiBBbGwgY2FzZXMgaW4gZGVmYXVsdCBtZWFucyBBUCBub3Qgb3BlcmF0aW9uYWwgKi9cbi1cdFx0XHRXQVJOX09OQ0UoMSwgXCIlczogYXBfYXFpYyBzdGF0dXMgJWRcXG5cIiwgX19mdW5jX18sXG4tXHRcdFx0XHQgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbi1cdFx0XHRnb3RvIGVuZF9mcmVlO1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogVGhlIEFRSUMgZGlzYWJsZSB3YXMgcmVqZWN0ZWQ7IElSUSBpcyBzdGlsbCBlbmFibGVkXG4rXHRcdFx0ICogYW5kIHRoZSBoYXJkd2FyZSBzdGlsbCBob2xkcyB0aGUgTklCIGFkZHJlc3MuIERvIG5vdFxuK1x0XHRcdCAqIGZyZWUgcmVzb3VyY2VzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJlcG9ydF9hcWljX2Rpc2FibGVfZXJyb3IocSwgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuK1x0XHRcdGdvdG8gZW5kX2ZhaWw7XG4gXHRcdH1cbiBcdH0gd2hpbGUgKHJldHJpZXMtLSk7XG4gXG4tXHRXQVJOX09OQ0UoMSwgXCIlczogYXBfYXFpYyBzdGF0dXMgJWRcXG5cIiwgX19mdW5jX18sXG4tXHRcdCAgc3RhdHVzLnJlc3BvbnNlX2NvZGUpO1xuK1x0cmVwb3J0X2FxaWNfZGlzYWJsZV9lcnJvcihxLCBzdGF0dXMucmVzcG9uc2VfY29kZSk7XG4rXG4rZW5kX2ZhaWw6XG4rXHQvKlxuK1x0ICogV2UgYXJlIGhlcmUgZWl0aGVyIGJlY2F1c2UgdGhlIEFRSUMgaW5zdHJ1Y3Rpb24gZmFpbGVkIHRvIGRpc2FibGVcbitcdCAqIGludGVycnVwdHMsIG9yIGJlY2F1c2UgSVI9MCBjb3VsZCBub3QgYmUgY29uZmlybWVkLiBJbiBlaXRoZXIgY2FzZVxuK1x0ICogdGhlIE5JQiBwYWdlIGFuZCBndWVzdCBJU0MgY2Fubm90IGJlIGZyZWVkOiBoYXJkd2FyZSBtYXkgc3RpbGwgd3JpdGVcbitcdCAqIHRvIHRoZSBOSUIsIGFuZCB1bnBpbm5pbmcgdGhlIHBhZ2Ugd291bGQgYWxsb3cgaXQgdG8gYmUgcmVhbGxvY2F0ZWRcbitcdCAqIHRvIGEgbmV3IG93bmVyLiBBIHN1YnNlcXVlbnQgaGFyZHdhcmUgRE1BIHdyaXRlIHRvIHRoYXQgcGh5c2ljYWxcbitcdCAqIGFkZHJlc3Mgd291bGQgY29ycnVwdCB0aGUgbmV3IG93bmVyJ3MgbWVtb3J5IOKAlCBhIHdpbGQgRE1BIHdyaXRlIHRoYXRcbitcdCAqIGNvdWxkIGNyYXNoIG9yIGNvbXByb21pc2UgdGhlIGhvc3Qga2VybmVsLiBUaGUgcmVzb3VyY2VzIGFyZVxuK1x0ICogdGhlcmVmb3JlIGludGVudGlvbmFsbHkgbGVha2VkLlxuK1x0ICovXG4rXHRyZXR1cm4gc3RhdHVzO1xuK1xuIGVuZF9mcmVlOlxuK1x0LypcbitcdCAqIFRoaXMgbGFiZWwgaXMgcmVhY2hlZCBiZWNhdXNlIHRoZSBxdWV1ZSB3YXMgc3VjY2Vzc2Z1bGx5IGRpc2FibGVkLFxuK1x0ICogb3IgYmVjYXVzZSB0aGUgcXVldWUgaXMgbm90IG9wZXJhdGlvbmFsIG9yIG5vdCBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2VcbitcdCAqIGludGVycnVwdHMgY2FuIG5vdCBiZSBwcm9jZXNzZWQsIHNvIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzIC0gdGhlIHBpbm5lZCBOSUJcbitcdCAqIHBhZ2UgYW5kIHRoZSByZWdpc3RlcmVkIGd1ZXN0IElTQyAtIHVzZWQgdG8gZW5hYmxlIGludGVycnVwdHMgc28gdGhleSB3aWxsXG4rXHQgKiBub3QgYmUgbGVha2VkLlxuK1x0ICovXG4gXHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRyZXR1cm4gc3RhdHVzO1xuIH1cbkBAIC00MDEsMjIgKzUyNiwyOSBAQCBzdGF0aWMgaW50IGVuc3VyZV9uaWJfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbiB9XG4gXG4gLyoqXG4tICogdmZpb19hcF9pcnFfZW5hYmxlIC0gRW5hYmxlIEludGVycnVwdGlvbiBmb3IgYSBBUFFOXG4rICogdmZpb19hcF9pcnFfZW5hYmxlIC0gZW5hYmxlIGludGVycnVwdHMgZm9yIGFuIEFQIHF1ZXVlIG9uIGJlaGFsZiBvZiBhIGd1ZXN0XG4gICpcbi0gKiBAcTpcdCB0aGUgdmZpb19hcF9xdWV1ZSBob2xkaW5nIEFRSUMgcGFyYW1ldGVyc1xuKyAqIEBxOlx0IHRoZSB2ZmlvX2FwX3F1ZXVlIGZvciB3aGljaCBpbnRlcnJ1cHRzIGFyZSB0byBiZSBlbmFibGVkXG4gICogQGlzYzogdGhlIGd1ZXN0IElTQyB0byByZWdpc3RlciB3aXRoIHRoZSBHSUIgaW50ZXJmYWNlXG4tICogQHZjcHU6IHRoZSB2Y3B1IG9iamVjdCBjb250YWluaW5nIHRoZSByZWdpc3RlcnMgc3BlY2lmeWluZyB0aGUgcGFyYW1ldGVyc1xuLSAqXHQgIHBhc3NlZCB0byB0aGUgUFFBUChBUUlDKSBpbnN0cnVjdGlvbi5cbisgKiBAdmNwdTogdGhlIHZjcHUgd2hvc2UgcmVnaXN0ZXJzIGNvbnRhaW4gdGhlIFBRQVAoQVFJQykgcGFyYW1ldGVyc1xuKyAqXG4rICogUGlucyB0aGUgZ3Vlc3QgTklCIHBhZ2UsIHJlZ2lzdGVycyB0aGUgZ3Vlc3QgSVNDIHdpdGggdGhlIEdJQiB0byBvYnRhaW4gYVxuKyAqIGhvc3QgSVNDLCBhbmQgcmVpc3N1ZXMgUFFBUChBUUlDKSB3aXRoIHRoZSB0cmFuc2xhdGVkIGhvc3QtYWJzb2x1dGUgTklCXG4rICogYWRkcmVzcyBhbmQgaG9zdCBJU0Mgb24gYmVoYWxmIG9mIHRoZSBndWVzdC5cbiAgKlxuLSAqIFBpbiB0aGUgTklCIHNhdmVkIGluICpxXG4tICogUmVnaXN0ZXIgdGhlIGd1ZXN0IElTQyB0byBHSUIgaW50ZXJmYWNlIGFuZCByZXRyaWV2ZSB0aGVcbi0gKiBob3N0IElTQyB0byBpc3N1ZSB0aGUgaG9zdCBzaWRlIFBRQVAvQVFJQ1xuKyAqIFRoZSBjb25kaXRpb24gY29kZSBhbmQgQVAtcXVldWUgc3RhdHVzIHdvcmQgcmV0dXJuZWQgYnkgUFFBUChBUUlDKSBhcmVcbisgKiByZWZsZWN0ZWQgYmFjayB0byB0aGUgZ3Vlc3QgYXMtaXMuIElSUSBzdGF0ZSB2ZXJpZmljYXRpb24gKHBvbGxpbmcgdW50aWxcbisgKiBJUj0xKSBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGd1ZXN0IEFQIGJ1cywgbm90IHRoZSBob3N0LlxuICAqXG4tICogc3RhdHVzLnJlc3BvbnNlX2NvZGUgbWF5IGJlIHNldCB0byBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1MgaW4gY2FzZSB0aGVcbi0gKiB2ZmlvX3Bpbl9wYWdlcyBvciBrdm1fczM5MF9naXNjX3JlZ2lzdGVyIGZhaWxlZC5cbisgKiBSZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGJhc2VkIHNvbGVseSBvbiB3aGV0aGVyIGhhcmR3YXJlIGFjY2VwdGVkIHRoZSBuZXcgTklCOlxuKyAqIC0gQVBfUkVTUE9OU0VfTk9STUFMIChDQz0wKTogaGFyZHdhcmUgYWNjZXB0ZWQgdGhlIG5ldyBOSUI7IHRoZSBvbGQgcGlubmVkXG4rICogICBOSUIgcGFnZSBhbmQgcmVnaXN0ZXJlZCBndWVzdCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgbmV3IG9uZXMgc2F2ZWQuXG4rICogLSBBbGwgb3RoZXIgcmVzcG9uc2VzOiBoYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQjsgdGhlIG5ld2x5IHBpbm5lZFxuKyAqICAgcGFnZSBhbmQgcmVnaXN0ZXJlZCBJU0MgYXJlIGZyZWVkIGFuZCB0aGUgcHJldmlvdXNseSBzYXZlZCByZXNvdXJjZXMgYXJlXG4rICogICBsZWZ0IGludGFjdC5cbiAgKlxuLSAqIE90aGVyd2lzZSByZXR1cm4gdGhlIGFwX3F1ZXVlX3N0YXR1cyByZXR1cm5lZCBieSB0aGUgYXBfYXFpYygpLFxuLSAqIGFsbCByZXRyeSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgYnkgdGhlIGd1ZXN0LlxuKyAqIEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUyBpcyByZXR1cm5lZCBpZiB2ZmlvX3Bpbl9wYWdlcygpIG9yXG4rICoga3ZtX3MzOTBfZ2lzY19yZWdpc3RlcigpIGZhaWxzIGJlZm9yZSB0aGUgQVFJQyBpbnN0cnVjdGlvbiBpcyBpc3N1ZWQuXG4gICpcbiAgKiBSZXR1cm46IFx1MDAyNnN0cnVjdCBhcF9xdWV1ZV9zdGF0dXNcbiAgKi9cbkBAIC00MjgsMTcgKzU2MCwxOSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1cyA9IHt9O1xuIFx0c3RydWN0IGt2bV9zMzkwX2dpc2EgKmdpc2E7XG4gXHRzdHJ1Y3QgcGFnZSAqaF9wYWdlO1xuLVx0aW50IG5pc2M7XG4rXHRpbnQgbmlzYywgcmV0O1xuIFx0c3RydWN0IGt2bSAqa3ZtO1xuIFx0cGh5c19hZGRyX3QgaF9uaWI7XG4gXHRkbWFfYWRkcl90IG5pYjtcbi1cdGludCByZXQ7XG4gXG4gXHQvKiBWZXJpZnkgdGhhdCB0aGUgbm90aWZpY2F0aW9uIGluZGljYXRvciBieXRlIGFkZHJlc3MgaXMgdmFsaWQgKi9cbiBcdGlmICh2ZmlvX2FwX3ZhbGlkYXRlX25pYih2Y3B1LCBcdTAwMjZuaWIpKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXywgXHUwMDI2bmliLCBxLVx1MDAzZWFwcW4pO1xuLVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IGludmFsaWQgTklCIGFkZHJlc3MgJXBhZFxcblwiLFxuK1x0XHRcdFx0ICAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuK1x0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgXHUwMDI2bmliKTtcbiBcdFx0c3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9JTlZBTElEX0FERFJFU1M7XG4gXHRcdHJldHVybiBzdGF0dXM7XG4gXHR9XG5AQCAtNDUzLDcgKzU4NywxMCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogdmZpb19waW5fcGFnZXMgZmFpbGVkOiByYz0lZCxcIlxuIFx0XHRcdFx0IFwibmliPSVwYWQsIGFwcW49JSMwNHhcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXywgcmV0LCBcdTAwMjZuaWIsIHEtXHUwMDNlYXBxbik7XG4tXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChBUUlDKSBlbmFibGUgZm9yICUwMnguJTA0eDogdmZpb19waW5fcGFnZXMgZmFpbGVkIHJjPSVkXFxuXCIsXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLCByZXQpO1xuIFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUztcbiBcdFx0cmV0dXJuIHN0YXR1cztcbiBcdH1cbkBAIC00NzYsNyArNjEzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbiBcdGlmIChuaXNjIFx1MDAzYyAwKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXG5cIixcbiBcdFx0XHRcdCBfX2Z1bmNfXywgbmlzYywgaXNjLCBxLVx1MDAzZWFwcW4pO1xuLVxuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgcmVnaXN0cmF0aW9uIGZhaWxlZCByYz0lZCBpc2M9JWRcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksIG5pc2MsIGlzYyk7XG4gXHRcdHZmaW9fdW5waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEpO1xuIFx0XHRzdGF0dXMucmVzcG9uc2VfY29kZSA9IEFQX1JFU1BPTlNFX0lOVkFMSURfQUREUkVTUztcbiBcdFx0cmV0dXJuIHN0YXR1cztcbkBAIC00ODksMjQgKzYyOSwzOCBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRzdGF0dXMgPSBhcF9hcWljKHEtXHUwMDNlYXBxbiwgYXFpY19naXNhLCBoX25pYik7XG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbi1cdFx0LyogU2VlIGlmIHdlIGRpZCBjbGVhciBvbGRlciBJUlEgY29uZmlndXJhdGlvbiAqL1xuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBhY2NlcHRlZCB0aGUgbmV3IE5JQiBhZGRyZXNzIChDQz0wKS4gVGhlIG9sZCBOSUIgYW5kXG4rXHRcdCAqIGd1ZXN0IElTQyBhcmUgbm8gbG9uZ2VyIHVzZWQgYnkgaGFyZHdhcmUgYW5kIGNhbiBiZSBmcmVlZC5cbitcdFx0ICogVGhlIG5ldyByZXNvdXJjZXMgYXJlIHNhdmVkIGZvciB0cmFja2luZyBhbmQgZnV0dXJlIHRlYXJkb3duLlxuK1x0XHQgKlxuK1x0XHQgKiBJUlEgc3RhdGUgdmVyaWZpY2F0aW9uIChwb2xsaW5nIHVudGlsIElSPTEpIGlzIHRoZVxuK1x0XHQgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZ3Vlc3QgQVAgYnVzLCBub3QgdGhlIGhvc3QuIFRoZVxuK1x0XHQgKiBjb25kaXRpb24gY29kZSBhbmQgc3RhdHVzIHdvcmQgYXJlIHJlZmxlY3RlZCBiYWNrIHRvIHRoZVxuK1x0XHQgKiBndWVzdCB0byByZXNwb25kIHRvIHRoZSBQUUFQLUFRSUMgaW5zdHJ1Y3Rpb24uXG4rXHRcdCAqL1xuIFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdHEtXHUwMDNlc2F2ZWRfaW92YSA9IG5pYjtcbiBcdFx0cS1cdTAwM2VzYXZlZF9pc2MgPSBpc2M7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBBUF9SRVNQT05TRV9PVEhFUldJU0VfQ0hBTkdFRDpcbi1cdFx0LyogV2UgY291bGQgbm90IG1vZGlmeSBJUlEgc2V0dGluZ3M6IGNsZWFyIG5ldyBjb25maWd1cmF0aW9uICovXG4rXHRkZWZhdWx0OlxuK1x0XHQvKlxuK1x0XHQgKiBIYXJkd2FyZSBkaWQgbm90IGFjY2VwdCB0aGUgbmV3IE5JQiAoQ0M9MyBvciBlcnJvcikuIFRoZVxuK1x0XHQgKiBwcmV2aW91c2x5IHNhdmVkIE5JQiBhbmQgZ3Vlc3QgSVNDIHJlbWFpbiBhY3RpdmUgYW5kIG11c3RcbitcdFx0ICogbm90IGJlIGZyZWVkLiBSZWxlYXNlIHRoZSBuZXdseSBwaW5uZWQgcGFnZSBhbmQgcmVnaXN0ZXJlZFxuK1x0XHQgKiBJU0MgdGhhdCB3ZXJlIHByZXBhcmVkIGZvciB0aGlzIChyZWplY3RlZCkgcmVxdWVzdC5cbitcdFx0ICovXG4gXHRcdHJldCA9IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3Rlcihrdm0sIGlzYyk7XG4tXHRcdGlmIChyZXQpXG4rXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRWRklPX0FQX0RCRl9XQVJOKFwiJXM6IGt2bV9zMzkwX2dpc2NfdW5yZWdpc3RlcjogcmM9JWQgaXNjPSVkLCBhcHFuPSUjMDR4XFxuXCIsXG4gXHRcdFx0XHRcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXHUwMDNlYXBxbik7XG4rXHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYocS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbitcdFx0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHg6IEdJU0MgdW5yZWdpc3RlciBmYWlsZWQgcmM9JWQgaXNjPSVkXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSwgcmV0LCBpc2MpO1xuK1x0XHR9XG4gXHRcdHZmaW9fdW5waW5fcGFnZXMoXHUwMDI2cS1cdTAwM2VtYXRyaXhfbWRldi1cdTAwM2V2ZGV2LCBuaWIsIDEpO1xuIFx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCIlczogYXBxbiAlMDR4OiByZXNwb25zZTogJTAyeFxcblwiLCBfX2Z1bmNfXywgcS1cdTAwM2VhcHFuLFxuLVx0XHRcdHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbi1cdFx0dmZpb19hcF9pcnFfZGlzYWJsZShxKTtcbi1cdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XG5AQCAtNTE3LDYgKzY3MSwxMSBAQCBzdGF0aWMgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyB2ZmlvX2FwX2lycV9lbmFibGUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4gXHRcdFx0XHQgYXFpY19naXNhLnpvbmUsIGFxaWNfZ2lzYS5pciwgYXFpY19naXNhLmdpc2MsXG4gXHRcdFx0XHQgYXFpY19naXNhLmdmLCBhcWljX2dpc2EuZ2lzYSwgYXFpY19naXNhLmlzYyxcbiBcdFx0XHRcdCBxLVx1MDAzZWFwcW4pO1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0ICAgICBcIlBRQVAoQVFJQykgZW5hYmxlIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggcmM9JSMwMnhcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHQgICAgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbiBcdH1cbiBcbiBcdHJldHVybiBzdGF0dXM7XG5AQCAtNjAxLDcgKzc2MCw4IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCEodmNwdS1cdTAwM2VhcmNoLnNpZV9ibG9jay1cdTAwM2VlY2EgXHUwMDI2IEVDQV9BSVYpKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWQ6IGFwcW49MHglMDR4LCBlY2E9MHglMDR4XFxuXCIsXG4gXHRcdFx0XHQgX19mdW5jX18sIGFwcW4sIHZjcHUtXHUwMDNlYXJjaC5zaWVfYmxvY2stXHUwMDNlZWNhKTtcbi1cbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogQUlWIGZhY2lsaXR5IG5vdCBpbnN0YWxsZWRcXG5cIixcbitcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pKTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuQEAgLTYxMCw3ICs3NzAsOCBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5jcnlwdG8ucHFhcF9ob29rKSB7XG4gXHRcdFZGSU9fQVBfREJGX1dBUk4oXCIlczogUFFBUChBUUlDKSBob29rIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIHZmaW9fYXAgZHJpdmVyOiBhcHFuPTB4JTA0eFxcblwiLFxuIFx0XHRcdFx0IF9fZnVuY19fLCBhcHFuKTtcbi1cbitcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlBRQVAoQVFJQykgZm9yICUwMnguJTA0eDogaG9vayBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwiLFxuK1x0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKGFwcW4pLCBBUF9RSURfUVVFVUUoYXBxbikpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNjIzLDYgKzc4NCw5IEBAIHN0YXRpYyBpbnQgaGFuZGxlX3BxYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRWRklPX0FQX0RCRl9XQVJOKFwiJXM6IG1kZXYgJTA4bHgtJTA0bHgtJTA0bHgtJTA0bHgtJTA0bHglMDhseCBub3QgaW4gdXNlOiBhcHFuPTB4JTA0eFxcblwiLFxuIFx0XHRcdFx0IF9fZnVuY19fLCB1dWlkWzBdLCAgdXVpZFsxXSwgdXVpZFsyXSxcbiBcdFx0XHRcdCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLCBhcHFuKTtcbitcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobWRldl9kZXYobWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHQgICAgIFwiUFFBUChBUUlDKSBmb3IgJTAyeC4lMDR4OiBtZGV2IG5vdCBpbiB1c2VcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbkBAIC02MzEsMTEgKzc5NSwxMyBAQCBzdGF0aWMgaW50IGhhbmRsZV9wcWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdFx0VkZJT19BUF9EQkZfV0FSTihcIiVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcblwiLFxuIFx0XHRcdFx0IF9fZnVuY19fLCBBUF9RSURfQ0FSRChhcHFuKSxcbiBcdFx0XHRcdCBBUF9RSURfUVVFVUUoYXBxbikpO1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihtYXRyaXhfbWRldi1cdTAwM2VtZGV2KSxcbitcdFx0XHRcdCAgICAgXCJQUUFQKEFRSUMpIGZvciAlMDJ4LiUwNHg6IHF1ZXVlIG5vdCBib3VuZCB0byB0aGUgdmZpb19hcCBkcml2ZXJcXG5cIixcbitcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQoYXBxbiksIEFQX1FJRF9RVUVVRShhcHFuKSk7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdHN0YXR1cyA9IHZjcHUtXHUwMDNlcnVuLVx1MDAzZXMucmVncy5ncHJzWzFdO1xuLVxuIFx0LyogSWYgSVIgYml0KDE2KSBpcyBzZXQgd2UgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi9cbiBcdGlmICgoc3RhdHVzIFx1MDAzZVx1MDAzZSAoNjMgLSAxNikpIFx1MDAyNiAweDAxKVxuIFx0XHRxc3RhdHVzID0gdmZpb19hcF9pcnFfZW5hYmxlKHEsIHN0YXR1cyBcdTAwMjYgMHgwNywgdmNwdSk7XG5AQCAtNjkyLDE0ICs4NTgsMTQgQEAgc3RhdGljIGJvb2wgX3F1ZXVlX3Bhc3NhYmxlKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxuIFx0aWYgKCFxKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRzd2l0Y2ggKHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUpIHtcbi1cdGNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOlxuLVx0Y2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDpcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHRkZWZhdWx0OlxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXHR9XG4rXHQvKlxuK1x0ICogQSBxdWV1ZSBpcyBvbmx5IHBhc3NhYmxlIGlmIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYnlcbitcdCAqIGFwcV9yZXNldF9jaGVjaygpIHZpYSBUQVBRIHN0YXR1cyBiaXQgdmVyaWZpY2F0aW9uLiBUaGlzIGlzXG4rXHQgKiBpbmRpY2F0ZWQgYnkgcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICgwKS5cbitcdCAqIFRoaXMgaXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlYWtpbmcgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBxdWV1ZVxuK1x0ICogdG8gdGhlIGd1ZXN0LlxuK1x0ICovXG4rXHRyZXR1cm4gcS1cdTAwM2VyZXNldF9zdGF0dXMucmVzcG9uc2VfY29kZSA9PSBBUF9SRVNQT05TRV9OT1JNQUw7XG4gfVxuIFxuIC8qXG5AQCAtMTQxMCw3ICsxNTc2LDcgQEAgc3RhdGljIHZvaWQgdmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWluKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYsXG4ge1xuIFx0REVDTEFSRV9CSVRNQVAoYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFxuLVx0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RFVklDRVMpO1xuK1x0Yml0bWFwX3plcm8oYXBxaXMsIEFQX0RPTUFJTlMpO1xuIFx0c2V0X2JpdF9pbnYoYXBxaSwgYXBxaXMpO1xuIFx0dmZpb19hcF9tZGV2X2hvdF91bnBsdWdfZG9tYWlucyhtYXRyaXhfbWRldiwgYXBxaXMpO1xuIH1cbkBAIC0xOTE1LDM3ICsyMDgxLDEyNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fYXBfcXVldWUgKnZmaW9fYXBfZmluZF9xdWV1ZShpbnQgYXBxbilcbiBcdHJldHVybiBxO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soaW50IGFwcW4sIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbitzdGF0aWMgaW50IGFwcV9zdGF0dXNfY2hlY2soc3RydWN0IHZmaW9fYXBfcXVldWUgKnEsXG4rXHRcdFx0ICAgIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgKnN0YXR1cylcbiB7XG4gXHRzd2l0Y2ggKHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbitcdFx0LypcbitcdFx0ICogVGhpcyByZXNwb25zZSBjb2RlIG9ubHkgaW5kaWNhdGVzIHRoYXQgdGhlIFBRQVAoWkFQUSkgaGFzXG4rXHRcdCAqIGJlZW4gaW5pdGlhdGVkLiBUaGUgZm9sbG93aW5nIGJpdCBzZXR0aW5ncyBpbiB0aGUgc3RhdHVzXG4rXHRcdCAqIHJldHVybmVkIGZyb20gVEFQUSBtdXN0IGJlIHZlcmlmaWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVcbitcdFx0ICogYXN5bmNocm9ub3VzIHBvcnRpb24gb2YgdGhlIHF1ZXVlIHplcm9pemF0aW9uIGhhcyBjb21wbGV0ZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoc3RhdHVzLVx1MDAzZXF1ZXVlX2VtcHR5IFx1MDAyNlx1MDAyNiAhc3RhdHVzLVx1MDAzZXJlcGxpZXNfd2FpdGluZyBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdGF0dXMtXHUwMDNlaXJxX2VuYWJsZWQgXHUwMDI2XHUwMDI2ICFzdGF0dXMtXHUwMDNlYXN5bmMpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXG4rXHRcdC8qIEFzeW5jIHplcm9pemF0aW9uIHN0aWxsIGluIHByb2dyZXNzOyBrZWVwIHdhaXRpbmcgKi9cbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdGNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6XG4tXHRcdHJldHVybiAwO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgcXVldWUgaXMgbm9uLW9wZXJhdGlvbmFsOiBpbnRlcnJ1cHRzIGFyZSBub3QgcG9zc2libGUgc29cbitcdFx0ICogQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC4gSG93ZXZlciwgemVyb2l6YXRpb25cbitcdFx0ICogY2Fubm90IGJlIGNvbmZpcm1lZCBiZWNhdXNlIGFsbCBzdGF0dXMgYml0cyBhcmUgemVyb2VkIHdoZW5cbitcdFx0ICogdGhlc2UgcmVzcG9uc2UgY29kZXMgYXJlIHJldHVybmVkIOKAlCB0aGVyZSBpcyBubyB3YXkgdG9cbitcdFx0ICogZGlzdGluZ3Vpc2ggYSB6ZXJvaXplZCBxdWV1ZSBmcm9tIG9uZSB0aGF0IGhhcyBub3QgYmVlblxuK1x0XHQgKiB6ZXJvaXplZC4gUmV0dXJuIC1FTk9ERVYgdG8gc2lnbmFsIHRoYXQgQVFJQyByZXNvdXJjZXMgc2hvdWxkXG4rXHRcdCAqIGJlIGZyZWVkIGJ1dCB0aGF0IHplcm9pemF0aW9uIGhhcyBub3QgYmVlbiBjb25maXJtZWQuXG4rXHRcdCAqL1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4rXHRcdC8qXG4rXHRcdCAqIEEgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MuIEl0IG1heSBiZSB0aGUgcmVzZXQgd2UgaXNzdWVkIG9yIG9uZVxuK1x0XHQgKiBpc3N1ZWQgcHJpb3IgdG8gb3VyczsgZWl0aGVyIHdheSwgb25jZSBpdCBjb21wbGV0ZXMgdGhlIHF1ZXVlXG4rXHRcdCAqIHdpbGwgYmUgemVyb2l6ZWQsIHNvIGtlZXAgd2FpdGluZy5cbitcdFx0ICovXG4gXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbitcdFx0ICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4gXHRjYXNlIEFQX1JFU1BPTlNFX0FTU09DX1NFQ1JFVF9OT1RfVU5JUVVFOlxuIFx0Y2FzZSBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XG4gXHRcdC8qXG4rXHRcdCAqIEFQX1JFU1BPTlNFX0JVU1k6XG4rXHRcdCAqIFRoZSBxdWV1ZSBpcyBidXN5IHdpdGggc29tZXRoaW5nIHVucmVsYXRlZCB0byBhIHJlc2V0IGFuZCBvdXJcbitcdFx0ICogWkFQUSB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQuIFJlLWlzc3VlIHRoZSBaQVBRLlxuK1x0XHQgKlxuK1x0XHQgKiBBUF9SRVNQT05TRV9BU1NPQ19TRUNSRVRfTk9UX1VOSVFVRVxuK1x0XHQgKiBBUF9SRVNQT05TRV9BU1NPQ19GQUlMRUQ6XG4gXHRcdCAqIFRoZXNlIGFzeW5jaHJvbm91cyByZXNwb25zZSBjb2RlcyBpbmRpY2F0ZSBhIFBRQVAoQUFQUSlcbiBcdFx0ICogaW5zdHJ1Y3Rpb24gdG8gYXNzb2NpYXRlIGEgc2VjcmV0IHdpdGggdGhlIGd1ZXN0IGZhaWxlZC4gQWxsXG4gXHRcdCAqIHN1YnNlcXVlbnQgQVAgaW5zdHJ1Y3Rpb25zIHdpbGwgZW5kIHdpdGggdGhlIGFzeW5jaHJvbm91c1xuLVx0XHQgKiByZXNwb25zZSBjb2RlIHVudGlsIHRoZSBBUCBxdWV1ZSBpcyByZXNldDsgc28sIGxldCdzIHJldHVyblxuLVx0XHQgKiBhIHZhbHVlIGluZGljYXRpbmcgYSByZXNldCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uXG4rXHRcdCAqIHJlc3BvbnNlIGNvZGUgdW50aWwgdGhlIEFQIHF1ZXVlIGlzIHJlc2V0LiBSZS1pc3N1ZSB0aGUgWkFQUS5cbiBcdFx0ICovXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuK1xuIFx0ZGVmYXVsdDpcbi1cdFx0V0FSTih0cnVlLFxuLVx0XHQgICAgIFwiZmFpbGVkIHRvIHZlcmlmeSByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHg6IFRBUFEgcmM9JXVcXG5cIixcbi1cdFx0ICAgICBBUF9RSURfQ0FSRChhcHFuKSwgQVBfUUlEX1FVRVVFKGFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy1cdTAwM2VyZXNwb25zZV9jb2RlKTtcbitcdFx0cmVwb3J0X3RhcHFfcmMocSwgc3RhdHVzLVx1MDAzZXJlc3BvbnNlX2NvZGUpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgcmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSlcbit7XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCB8fCBxLVx1MDAzZXNhdmVkX2lvdmEpIHtcbitcdFx0aWYgKHEtXHUwMDNlbWF0cml4X21kZXYpIHtcbitcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChtZGV2X2RldihxLVx1MDAzZW1hdHJpeF9tZGV2LVx1MDAzZW1kZXYpLFxuK1x0XHRcdFx0XHQgICAgIFwiUmVzZXQgdGltZWQgb3V0IGZvciBBUFFOICUwMnguJTA0eDogbGVha2luZyBBUUlDIHJlc291cmNlcyAoTklCIHBhZ2UgXHUwMDI2IEdJU0MpIHRvIHByZXZlbnQgaG9zdCBjcmFzaFxcblwiLFxuK1x0XHRcdFx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4OiBsZWFraW5nIEFRSUMgcmVzb3VyY2VzIChOSUIgcGFnZSBcdTAwMjYgR0lTQykgdG8gcHJldmVudCBob3N0IGNyYXNoXFxuXCIsXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfQ0FSRChxLVx1MDAzZWFwcW4pLFxuK1x0XHRcdFx0XHQgICAgQVBfUUlEX1FVRVVFKHEtXHUwMDNlYXBxbikpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocS1cdTAwM2VtYXRyaXhfbWRldikge1xuK1x0XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKG1kZXZfZGV2KHEtXHUwMDNlbWF0cml4X21kZXYtXHUwMDNlbWRldiksXG4rXHRcdFx0XHRcdCAgICAgXCJSZXNldCB0aW1lZCBvdXQgZm9yIEFQUU4gJTAyeC4lMDR4XFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbitcdFx0XHRcdFx0ICAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cHJfd2Fybl9yYXRlbGltaXRlZChcIlJlc2V0IHRpbWVkIG91dCBmb3IgQVBRTiAlMDJ4LiUwNHhcXG5cIixcbitcdFx0XHRcdFx0ICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksXG4rXHRcdFx0XHRcdCAgICBBUF9RSURfUVVFVUUocS1cdTAwM2VhcHFuKSk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gI2RlZmluZSBXQUlUX01TRyBcIldhaXRlZCAlZG1zIGZvciByZXNldCBvZiBxdWV1ZSAlMDJ4LiUwNHggKCV1LCAldSwgJXUpXCJcbiBcbisvKipcbisgKiBhcHFfcmVzZXRfZmluYWxpemUgLSBzdG9yZSBmaW5hbCBUQVBRIHN0YXR1cyBhbmQgZnJlZSBBUUlDIHJlc291cmNlcy5cbisgKiBAcTogICAgICB0aGUgdmZpb19hcF9xdWV1ZVxuKyAqIEBzdGF0dXM6IHRoZSBmaW5hbCBBUCBxdWV1ZSBzdGF0dXMgcmV0dXJuZWQgYnkgUFFBUChUQVBRKVxuKyAqIEByZXQ6ICAgIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhcHFfc3RhdHVzX2NoZWNrKClcbisgKlxuKyAqIENvcGllcyB0aGUgZnVsbCBUQVBRIHN0YXR1cyB3b3JkIHRvIHEtXHUwMDNlcmVzZXRfc3RhdHVzIHNvIHRoYXQgYWxsIHN0YXR1c1xuKyAqIGJpdHMgcmVmbGVjdCB0aGUgY29uZmlybWVkIGVuZCBzdGF0ZSBvZiB0aGUgcXVldWUuIElmIHJldCA9PSAwLFxuKyAqIHplcm9pemF0aW9uIHdhcyBjb25maXJtZWQgYW5kIHRoZSByZXNwb25zZSBjb2RlIGlzIG92ZXJyaWRkZW4gd2l0aFxuKyAqIEFQX1JFU1BPTlNFX05PUk1BTCBzbyB0aGF0IF9xdWV1ZV9wYXNzYWJsZSgpIHJldHVybnMgdHJ1ZS4gRm9yXG4rICogcmV0ID09IC1FTk9ERVYgKERFQ09ORklHVVJFRCBvciBDSEVDS1NUT1BQRUQpLCB0aGUgbm9uLXplcm8gcmVzcG9uc2VcbisgKiBjb2RlIGlzIGxlZnQgaW50YWN0IHNvIF9xdWV1ZV9wYXNzYWJsZSgpIGNvcnJlY3RseSByZXR1cm5zIGZhbHNlLlxuKyAqIEFRSUMgcmVzb3VyY2VzIGFyZSB0aGVuIGZyZWVkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFwcV9yZXNldF9maW5hbGl6ZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcbitcdFx0XHQgICAgICAgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyAqc3RhdHVzLCBpbnQgcmV0KVxuK3tcbitcdG1lbWNweShcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgc3RhdHVzLCBzaXplb2YoKnN0YXR1cykpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9OT1JNQUw7XG4rXHRpZiAocS1cdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRClcbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIHtcbiBcdGludCByZXQgPSAtRUJVU1ksIGVsYXBzZWQgPSAwO1xuQEAgLTE5NTgsOSArMjIxNCw2OSBAQCBzdGF0aWMgdm9pZCBhcHFfcmVzZXRfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpyZXNldF93b3JrKVxuIFx0XHRtc2xlZXAoQVBfUkVTRVRfSU5URVJWQUwpO1xuIFx0XHRlbGFwc2VkICs9IEFQX1JFU0VUX0lOVEVSVkFMO1xuIFx0XHRzdGF0dXMgPSBhcF90YXBxKHEtXHUwMDNlYXBxbiwgTlVMTCk7XG4tXHRcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socS1cdTAwM2VhcHFuLCBcdTAwMjZzdGF0dXMpO1xuLVx0XHRpZiAocmV0ID09IC1FSU8pXG4rXHRcdHJldCA9IGFwcV9zdGF0dXNfY2hlY2socSwgXHUwMDI2c3RhdHVzKTtcbitcdFx0aWYgKHJldCA9PSAtRUlPKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUQVBRIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2UgY29kZS4gVGhpc1xuK1x0XHRcdCAqIGluZGljYXRlcyBhIGhhcmR3YXJlIG9yIGZpcm13YXJlIGJ1ZzsgdGhlIHF1ZXVlXG4rXHRcdFx0ICogY2Fubm90IGdlbmVyYXRlIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZVxuK1x0XHRcdCAqIE5JQiwgc28gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgcmF0aGVyIHRoYW4gbGVhayB0aGVtLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcbiBcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aWYgKGVsYXBzZWQgXHUwMDNlPSBBUF9SRVNFVF9NQVhfV0FJVCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogWmVyb2l6YXRpb24gY29uZmlybWVkIChyZXQgPT0gMCk6IHRoZSBUQVBRIHN0YXR1cyBiaXRzXG4rXHRcdFx0ICogaW5kaWNhdGUgdGhlIGFzeW5jIHBvcnRpb24gb2YgdGhlIFpBUFEgY29tcGxldGVkXG4rXHRcdFx0ICogc3VjY2Vzc2Z1bGx5LiBGcmVlIEFRSUMgcmVzb3VyY2VzIGFuZCByZXR1cm4uXG4rXHRcdFx0ICpcbitcdFx0XHQgKiBRdWV1ZSBub24tb3BlcmF0aW9uYWwgKHJldCA9PSAtRU5PREVWKTogdGhlIHF1ZXVlIGlzXG4rXHRcdFx0ICogZGVjb25maWd1cmVkIG9yIGNoZWNrc3RvcHBlZDsgaW50ZXJydXB0cyBhcmUgbm90XG4rXHRcdFx0ICogcG9zc2libGUgc28gQVFJQyByZXNvdXJjZXMgY2FuIGJlIHNhZmVseSBmcmVlZC5cbitcdFx0XHQgKiBaZXJvaXphdGlvbiBjYW5ub3QgYmUgY29uZmlybWVkIGluIHRoaXMgc3RhdGUsIGJ1dCB0aGVcbitcdFx0XHQgKiBxdWV1ZSBjYW5ub3QgZ2VuZXJhdGUgaW50ZXJydXB0cywgc28gdGhlIE5JQiBwYWdlIGlzXG4rXHRcdFx0ICogbm8gbG9uZ2VyIGEgRE1BIHRhcmdldCBhbmQgaXQgaXMgc2FmZSB0byBmcmVlIGl0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICghcmV0IHx8IHJldCA9PSAtRU5PREVWKSB7XG4rXHRcdFx0XHRhcHFfcmVzZXRfZmluYWxpemUocSwgXHUwMDI2c3RhdHVzLCByZXQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdH1cbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRpbWVkIG91dCB3aXRob3V0IGJlaW5nIGFibGUgdG8gdmVyaWZ5IHphcHEgY29tcGxldGVkLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogVGhlIEFRSUMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHF1ZXVlIC0gdGhlIHBpbm5lZFxuK1x0XHRcdCAqIHBhZ2UgY29udGFpbmluZyB0aGUgTklCIGFuZCB0aGUgcmVnaXN0ZXJlZCBndWVzdCBJU0MgLVxuK1x0XHRcdCAqIGNhbm5vdCBiZSBmcmVlZCBoZXJlLiBUaGUgTklCIGlzIHRoZSBhY3RpdmUgRE1BIHRhcmdldFxuK1x0XHRcdCAqIGZvciBBUCBpbnRlcnJ1cHQgZGVsaXZlcnkgdW50aWwgdGhlIHJlc2V0IGNvbXBsZXRlcztcbitcdFx0XHQgKiBmcmVlaW5nIHRoZSBwaW5uZWQgcGFnZSB3aGlsZSB0aGUgaGFyZHdhcmUgbWF5IHN0aWxsXG4rXHRcdFx0ICogd3JpdGUgdG8gaXQgd291bGQgcmVzdWx0IGluIGEgd2lsZCBETUEgd3JpdGUgdGhhdCBjb3VsZFxuK1x0XHRcdCAqIGNvcnJ1cHQgaG9zdCBtZW1vcnkuXG4rXHRcdFx0ICpcbitcdFx0XHQgKiBJZiB0aGUgcmVzZXQgZXZlbnR1YWxseSBjb21wbGV0ZXMsIGludGVycnVwdHMgd2lsbCBiZVxuK1x0XHRcdCAqIHRlcm1pbmF0ZWQgYW5kIHRoZSBwaW5uZWQgTklCIHBhZ2UgYW5kIElTQyByZWdpc3RyYXRpb25cbitcdFx0XHQgKiB3aWxsIGJlIGxlYWtlZC4gVGhpcyBpcyBwcmVmZXJhYmxlIHRvIGVpdGhlciBhIHdpbGQgRE1BXG4rXHRcdFx0ICogd3JpdGUgb3Igd2FpdGluZyBpbmRlZmluaXRlbHk6IGZsdXNoX3dvcmsoKSBjYWxsZXJzIGhvbGRcbitcdFx0XHQgKiB0aGUgbWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrIG11dGV4IHdoaWNoIHNlcmlhbGl6ZXMgYWNjZXNzXG4rXHRcdFx0ICogdG8gYWxsIG1kZXYgb2JqZWN0cyBzeXN0ZW0td2lkZSwgc28gYmxvY2tpbmcgaGVyZSB3b3VsZFxuK1x0XHRcdCAqIGhhbmcgYWxsIGd1ZXN0cyB0byB3aGljaCB0aG9zZSBtZGV2cyBhcmUgYXR0YWNoZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0cmVwb3J0X2FxaWNfcmVzb3VyY2VfbGVhayhxKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFplcm9pemF0aW9uIGNvdWxkIG5vdCBiZSBjb25maXJtZWQ7IHNldFxuK1x0XHRcdCAqIHJlc2V0X3N0YXR1cyB0byBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUy5cbitcdFx0XHQgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBzaWduYWwgdGhhdCB0aGUgcmVzZXRcbitcdFx0XHQgKiBkaWQgbm90IGNvbXBsZXRlLCBhbmQgZW5zdXJlcyB0aGF0IGlmIHRoZSBxdWV1ZVxuK1x0XHRcdCAqIGlzIHJlc2V0IGFnYWluLCB0aGUgcmUtaXNzdWUgbG9naWMgaW5cbitcdFx0XHQgKiBhcHFfcmVzZXRfY2hlY2soKSB3aWxsIHJlLWlzc3VlIHRoZSBaQVBRLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHEtXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUztcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0aWYgKCFyZXQgfHwgcmV0ID09IC1FTk9ERVYpIHtcbitcdFx0XHRhcHFfcmVzZXRfZmluYWxpemUocSwgXHUwMDI2c3RhdHVzLCByZXQpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuIFx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuIFx0XHRcdHByX25vdGljZV9yYXRlbGltaXRlZChXQUlUX01TRywgZWxhcHNlZCxcbiBcdFx0XHRcdFx0ICAgICAgQVBfUUlEX0NBUkQocS1cdTAwM2VhcHFuKSxcbkBAIC0xOTc1LDExICsyMjkxLDcgQEAgc3RhdGljIHZvaWQgYXBxX3Jlc2V0X2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqcmVzZXRfd29yaylcbiBcdFx0XHQgICAgcmV0ID09IC1FQUdBSU4pIHtcbiBcdFx0XHRcdHN0YXR1cyA9IGFwX3phcHEocS1cdTAwM2VhcHFuLCAwKTtcbiBcdFx0XHRcdG1lbWNweShcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgXHUwMDI2c3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7XG4tXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKHEtXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQpXG4tXHRcdFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdH1cbiB9XG5AQCAtMTk5NSwyMiArMjMwNywyNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVzZXRfcXVldWUoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXG4gXHRzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7XG4gXHRjYXNlIEFQX1JFU1BPTlNFX05PUk1BTDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6XG4tXHRjYXNlIEFQX1JFU1BPTlNFX0JVU1k6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX1NUQVRFX0NIQU5HRV9JTl9QUk9HUkVTUzpcbiBcdFx0LypcbiBcdFx0ICogTGV0J3MgdmVyaWZ5IHdoZXRoZXIgdGhlIFpBUFEgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvbiBhIHdvcmsgcXVldWUuXG4gXHRcdCAqL1xuIFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFx0XHRicmVhaztcbitcdGNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6XG4gXHRjYXNlIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRDpcbiBcdGNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOlxuIFx0XHR2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMocSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbi1cdFx0V0FSTih0cnVlLFxuLVx0XHQgICAgIFwiUFFBUC9aQVBRIGZvciAlMDJ4LiUwNHggZmFpbGVkIHdpdGggaW52YWxpZCByYz0ldVxcblwiLFxuLVx0XHQgICAgIEFQX1FJRF9DQVJEKHEtXHUwMDNlYXBxbiksIEFQX1FJRF9RVUVVRShxLVx1MDAzZWFwcW4pLFxuLVx0XHQgICAgIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbitcdFx0LypcbitcdFx0ICogVGhlIGFyY2hpdGVjdHVyZSBkZWZpbmVzIG9ubHkgdGhlIHJlc3BvbnNlIGNvZGVzIGFib3ZlIGFzXG4rXHRcdCAqIHZhbGlkIGZvciBaQVBRLiBBbnkgb3RoZXIgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgYSBoYXJkd2FyZVxuK1x0XHQgKiBvciBmaXJtd2FyZSBidWcuIFNpbmNlIGEgbWFsZnVuY3Rpb25pbmcgcXVldWUgY2Fubm90IGdlbmVyYXRlXG4rXHRcdCAqIEFQIGludGVycnVwdHMgb3IgRE1BLXdyaXRlIHRvIHRoZSBOSUIsIGZyZWUgdGhlIEFRSUMgcmVzb3VyY2VzXG4rXHRcdCAqIHJhdGhlciB0aGFuIGxlYWsgdGhlbS5cbitcdFx0ICovXG4rXHRcdHJlcG9ydF96YXBxX3JjKHEsIHN0YXR1cy5yZXNwb25zZV9jb2RlKTtcbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0fVxuIH1cbiBcbkBAIC0yMDYxLDEyICsyMzc4LDI4IEBAIHN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X29wZW5fZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiBcdHJldHVybiB2ZmlvX2FwX21kZXZfc2V0X2t2bShtYXRyaXhfbWRldiwgdmRldi1cdTAwM2Vrdm0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVsZWFzZV9ldmVudGZkcyhzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2KVxuK3tcbitcdGlmIChtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlcikge1xuK1x0XHRldmVudGZkX2N0eF9wdXQobWF0cml4X21kZXYtXHUwMDNlcmVxX3RyaWdnZXIpO1xuK1x0XHRtYXRyaXhfbWRldi1cdTAwM2VyZXFfdHJpZ2dlciA9IE5VTEw7XG4rXHR9XG4rXHRpZiAobWF0cml4X21kZXYtXHUwMDNlY2ZnX2NoZ190cmlnZ2VyKSB7XG4rXHRcdGV2ZW50ZmRfY3R4X3B1dChtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIpO1xuK1x0XHRtYXRyaXhfbWRldi1cdTAwM2VjZmdfY2hnX3RyaWdnZXIgPSBOVUxMO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2xvc2VfZGV2aWNlKHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldilcbiB7XG4gXHRzdHJ1Y3QgYXBfbWF0cml4X21kZXYgKm1hdHJpeF9tZGV2ID1cbiBcdFx0Y29udGFpbmVyX29mKHZkZXYsIHN0cnVjdCBhcF9tYXRyaXhfbWRldiwgdmRldik7XG4gXG4gXHR2ZmlvX2FwX21kZXZfdW5zZXRfa3ZtKG1hdHJpeF9tZGV2KTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWF0cml4X2Rldi1cdTAwM2VtZGV2c19sb2NrKTtcbitcdHZmaW9fYXBfbWRldl9yZWxlYXNlX2V2ZW50ZmRzKG1hdHJpeF9tZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYXRyaXhfZGV2LVx1MDAzZW1kZXZzX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfcmVxdWVzdChzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXYsIHVuc2lnbmVkIGludCBjb3VudClcbkBAIC0yNDU3LDggKzI3OTAsOSBAQCBpbnQgdmZpb19hcF9tZGV2X3Byb2JlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFxuIFx0cS1cdTAwM2VhcHFuID0gYXBxbjtcbiBcdHEtXHUwMDNlc2F2ZWRfaXNjID0gVkZJT19BUF9JU0NfSU5WQUxJRDtcbi1cdG1lbXNldChcdTAwMjZxLVx1MDAzZXJlc2V0X3N0YXR1cywgMCwgc2l6ZW9mKHEtXHUwMDNlcmVzZXRfc3RhdHVzKSk7XG4gXHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xuK1x0dmZpb19hcF9tZGV2X3Jlc2V0X3F1ZXVlKHEpO1xuK1x0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuIFxuIFx0aWYgKG1hdHJpeF9tZGV2KSB7XG4gXHRcdHZmaW9fYXBfbWRldl9saW5rX3F1ZXVlKG1hdHJpeF9tZGV2LCBxKTtcbkBAIC0yNTM0LDYgKzI4NjgsMTUgQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0ICAgIHRlc3RfYml0X2ludihhcHFpLCAodW5zaWduZWQgbG9uZyAqKW1hdHJpeF9kZXYtXHUwMDNlaW5mby5hcW0pKSB7XG4gXHRcdHZmaW9fYXBfbWRldl9yZXNldF9xdWV1ZShxKTtcbiBcdFx0Zmx1c2hfd29yayhcdTAwMjZxLVx1MDAzZXJlc2V0X3dvcmspO1xuK1x0fSBlbHNlIHtcbitcdFx0LypcbitcdFx0ICogVGhlIHF1ZXVlIGlzIG5vIGxvbmdlciBpbiB0aGUgaG9zdCdzIEFQIGNvbmZpZ3VyYXRpb24uXG4rXHRcdCAqIFRoZSBoYXJkd2FyZSBjYW5ub3QgRE1BLXdyaXRlIHRvIHRoZSBOSUIsIHNvIGl0IGlzIHNhZmVcbitcdFx0ICogdG8gZnJlZSB0aGUgQVFJQyByZXNvdXJjZXMgZGlyZWN0bHkgd2l0aG91dCBpc3N1aW5nIGFcbitcdFx0ICogWkFQUS4gSWYgdGhlIHF1ZXVlIGlzIG5vdCBhc3NpZ25lZCB0byBhbiBtZGV2LFxuK1x0XHQgKiB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoKSBpcyBhIG5vLW9wLlxuK1x0XHQgKi9cbitcdFx0dmZpb19hcF9mcmVlX2FxaWNfcmVzb3VyY2VzKHEpO1xuIFx0fVxuIFxuIGRvbmU6XG5AQCAtMjU0MSw4ICsyODg0LDggQEAgdm9pZCB2ZmlvX2FwX21kZXZfcmVtb3ZlX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwZGV2KVxuIFx0XHR2ZmlvX2FwX3VubGlua19xdWV1ZV9mcl9tZGV2KHEpO1xuIFxuIFx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNmFwZGV2LVx1MDAzZWRldmljZSwgTlVMTCk7XG4tXHRrZnJlZShxKTtcbiBcdHJlbGVhc2VfdXBkYXRlX2xvY2tzX2Zvcl9tZGV2KG1hdHJpeF9tZGV2KTtcbitcdGtmcmVlKHEpO1xuIH1cbiBcbiAvKipcbkBAIC0yNjk3LDExICszMDQwLDExIEBAIHN0YXRpYyB2b2lkIHZmaW9fYXBfbWRldl9vbl9jZmdfcmVtb3ZlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqY3VyX2NvbmZpZ19pbmZvLFxuIFx0ZG9fcmVtb3ZlIHw9IGJpdG1hcF9hbmRub3QoYXFyZW0sXG4gXHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyAqKXByZXZfY29uZmlnX2luZm8tXHUwMDNlYXFtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKiljdXJfY29uZmlnX2luZm8tXHUwMDNlYXFtLFxuLVx0XHRcdFx0ICAgQVBfREVWSUNFUyk7XG4rXHRcdFx0XHQgICBBUF9ET01BSU5TKTtcbiBcdGRvX3JlbW92ZSB8PSBiaXRtYXBfYW5kbm90KGNkcmVtLFxuIFx0XHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcgKilwcmV2X2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbiBcdFx0XHRcdCAgICh1bnNpZ25lZCBsb25nICopY3VyX2NvbmZpZ19pbmZvLVx1MDAzZWFkbSxcbi1cdFx0XHRcdCAgIEFQX0RFVklDRVMpO1xuK1x0XHRcdFx0ICAgQVBfRE9NQUlOUyk7XG4gXG4gXHRpZiAoZG9fcmVtb3ZlKVxuIFx0XHR2ZmlvX2FwX21kZXZfY2ZnX3JlbW92ZShhcHJlbSwgYXFyZW0sIGNkcmVtKTtcbkBAIC0yODEyLDcgKzMxNTUsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX2FwX21kZXZfY2ZnX2FkZCh1bnNpZ25lZCBsb25nICphcG1fYWRkLCB1bnNpZ25lZCBsb25nICphcW1fYWRkLFxuIFx0XHRiaXRtYXBfYW5kKG1hdHJpeF9tZGV2LVx1MDAzZWFxbV9hZGQsXG4gXHRcdFx0ICAgbWF0cml4X21kZXYtXHUwMDNlbWF0cml4LmFxbSwgYXFtX2FkZCwgQVBfRE9NQUlOUyk7XG4gXHRcdGJpdG1hcF9hbmQobWF0cml4X21kZXYtXHUwMDNlYWRtX2FkZCxcbi1cdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ERVZJQ0VTKTtcbitcdFx0XHQgICBtYXRyaXhfbWRldi1cdTAwM2VtYXRyaXguYWRtLCBhZG1fYWRkLCBBUF9ET01BSU5TKTtcbiBcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1hdHJpeF9kZXYtXHUwMDNlbWRldnNfbG9jayk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODowOC43NzY4MjAzODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQyNDE2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGFuZCBpdHMgQXJjaGl0ZWN0dXJhbCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBgYW1kNjRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aCB0aGF0LiBJIHNlZSB0aGF0IHRoZSBmaWxlIHRvdWNoZWQgaXMgYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBiaXQgb2YgYSBmbGFnIOKAkyB0aGUgYHMzOTBgIGRpcmVjdG9yeSBpbW1lZGlhdGVseSBzY3JlYW1zIElCTSBTeXN0ZW0vMzkwLCBvciBzMzkweCwgd2hpY2ggaXMgZGVmaW5pdGVseSAqbm90KiBgYW1kNjRgLlxuXG5TbywgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgIGlzIGV2ZW4gKnJlbGV2YW50KiB0byBgYW1kNjRgLiBJcyBpdCBjb25kaXRpb25hbD8gSXMgdGhlcmUgc29tZSBjcm9zcy1hcmNoaXRlY3R1cmUgbWFnaWMgZ29pbmcgb24gdGhhdCBJJ20gbWlzc2luZz8gVGhlcmUncyBhbG1vc3QgY2VydGFpbmx5IG5vIGxlZ2l0aW1hdGUgY2FzZSB3aGVyZSB0aGlzIGZpbGUgd2lsbCBiZSBjb21waWxlZCBmb3IgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlLlxuXG5JJ2xsIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgdG8gcGlucG9pbnQgZXhhY3RseSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgZ2V0cyBidWlsdCBhbmQgaWYgaXQgY2FuIGV2ZXIgYmUgY29tcGlsZWQgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gczM5MC4gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBzb3VyY2Ugb2YgdGhlIGFuc3dlci4gU29tZXRoaW5nIHNlZW1zIHdyb25nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MTEuOTE5MjQwNTA3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MDY2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZGSU9fQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0b1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlPTM3PXZmaW9fYXAtb2JqcyA6PSB2ZmlvX2FwX2Rydi5vIHZmaW9fYXBfb3BzLm9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlOjM4Om9iai0kKENPTkZJR19WRklPX0FQKSArPSB2ZmlvX2FwLm9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTYtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6NzojaWZuZGVmIFZGSU9fQVBfREVCVUdfSFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjg6I2RlZmluZSBWRklPX0FQX0RFQlVHX0hcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC05LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMTgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MTk6I2RlZmluZSBWRklPX0FQX0RCRiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIwLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMTojZGVmaW5lIFZGSU9fQVBfREJGX0VSUiguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTIyLVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0VSUiwgIyNfX1ZBX0FSR1NfXylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaDoyMzojZGVmaW5lIFZGSU9fQVBfREJGX1dBUk4oLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yNC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9XQVJOLCAjI19fVkFfQVJHU19fKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oOjI1OiNkZWZpbmUgVkZJT19BUF9EQkZfSU5GTyguLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oLTI2LVxcdGRlYnVnX3NwcmludGZfZXZlbnQodmZpb19hcF9kYmZfaW5mbywgREJGX0lORk8sICMjX19WQV9BUkdTX18pXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6Mjc6I2RlZmluZSBWRklPX0FQX0RCRl9EQkcoLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZGVidWcuaC0yOC1cXHRkZWJ1Z19zcHJpbnRmX2V2ZW50KHZmaW9fYXBfZGJmX2luZm8sIERCRl9ERUJVRywgIyNfX1ZBX0FSR1NfXylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kZWJ1Zy5oPTMwPWV4dGVybiBkZWJ1Z19pbmZvX3QgKnZmaW9fYXBfZGJmX2luZm87XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmgtMzEtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2RlYnVnLmg6MzI6I2VuZGlmIC8qIFZGSU9fQVBfREVCVUdfSCAqL1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoxOTojZGVmaW5lIFZGSU9fQVBfUk9PVF9OQU1FIFxcXCJ2ZmlvX2FwXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYzoyMDojZGVmaW5lIFZGSU9fQVBfREVWX05BTUUgXFxcIm1hdHJpeFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMjEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9ODY9c3RhdGljIGludCB2ZmlvX2FwX21hdHJpeF9kZXZfY3JlYXRlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtOTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjkxOlxcdHJvb3RfZGV2aWNlID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoVkZJT19BUF9ST09UX05BTUUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy05Mi1cXHRpZiAoSVNfRVJSKHJvb3RfZGV2aWNlKSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9kcnYuYy0xMTUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jOjExNjpcXHRkZXZfc2V0X25hbWUoXFx1MDAyNm1hdHJpeF9kZXYtXFx1MDAzZWRldmljZSwgXFxcIiVzXFxcIiwgVkZJT19BUF9ERVZfTkFNRSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTExNy1cXHRtYXRyaXhfZGV2LVxcdTAwM2VkZXZpY2UucGFyZW50ID0gcm9vdF9kZXZpY2U7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM9MTY3PXN0YXRpYyBpbnQgX19pbml0IHZmaW9fYXBfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX2Rydi5jLTE4Mi1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmM6MTgzOlxcdHJldCA9IGFwX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2dmZpb19hcF9kcnYsIFRISVNfTU9EVUxFLCBWRklPX0FQX0RSVl9OQU1FKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfZHJ2LmMtMTg0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjY6I2RlZmluZSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQgXFxcInBhc3N0aHJvdWdoXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzojZGVmaW5lIFZGSU9fQVBfTURFVl9OQU1FX0hXVklSVCBcXFwiVkZJTyBBUCBQYXNzdGhyb3VnaCBEZXZpY2VcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI4LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTM0MD1zdGF0aWMgdm9pZCB2ZmlvX2FwX2ZyZWVfYXFpY19yZXNvdXJjZXMoc3RydWN0IHZmaW9fYXBfcXVldWUgKnEpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMzQzLVxcdFxcdHJldHVybjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MzQ0OlxcdGlmIChxLVxcdTAwM2VzYXZlZF9pc2MgIT0gVkZJT19BUF9JU0NfSU5WQUxJRCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0zNDUtXFx0ICAgICFXQVJOX09OKCEocS1cXHUwMDNlbWF0cml4X21kZXYgXFx1MDAyNlxcdTAwMjYgcS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSkpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM0Ni1cXHRcXHRrdm1fczM5MF9naXNjX3VucmVnaXN0ZXIocS1cXHUwMDNlbWF0cml4X21kZXYtXFx1MDAzZWt2bSwgcS1cXHUwMDNlc2F2ZWRfaXNjKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MzQ3OlxcdFxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTM0OC1cXHR9XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9NTU1PXN0YXRpYyBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHZmaW9fYXBfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19hcF9xdWV1ZSAqcSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01NjktXFx0aWYgKHZmaW9fYXBfdmFsaWRhdGVfbmliKHZjcHUsIFxcdTAwMjZuaWIpKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjU3MDpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogaW52YWxpZCBOSUIgYWRkcmVzczogbmliPSVwYWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU3MS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIFxcdTAwMjZuaWIsIHEtXFx1MDAzZWFwcW4pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTU4Ni1cXHRkZWZhdWx0OlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo1ODc6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IHZmaW9fcGluX3BhZ2VzIGZhaWxlZDogcmM9JWQsXFxcIlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy01ODgtXFx0XFx0XFx0XFx0IFxcXCJuaWI9JXBhZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy02MTMtXFx0aWYgKG5pc2MgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjYxNDpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogZ2lzYyByZWdpc3RyYXRpb24gZmFpbGVkOiBuaXNjPSVkLCBpc2M9JWQsIGFwcW49JSMwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTYxNS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIG5pc2MsIGlzYywgcS1cXHUwMDNlYXBxbik7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjU0LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NjU1OlxcdFxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBrdm1fczM5MF9naXNjX3VucmVnaXN0ZXI6IHJjPSVkIGlzYz0lZCwgYXBxbj0lIzA0eFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjU2LVxcdFxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgcmV0LCBpc2MsIHEtXFx1MDAzZWFwcW4pO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY2Ni1cXHRpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgIT0gQVBfUkVTUE9OU0VfTk9STUFMKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjY2NzpcXHRcXHRWRklPX0FQX0RCRl9XQVJOKFxcXCIlczogUFFBUChBUUlDKSBmYWlsZWQgd2l0aCBzdGF0dXM9JSMwMng6IFxcXCJcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjY4LVxcdFxcdFxcdFxcdCBcXFwiem9uZT0lI3gsIGlyPSUjeCwgZ2lzYz0lI3gsIGY9JSN4LFxcXCJcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz03NDc9c3RhdGljIGludCBoYW5kbGVfcHFhcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzYwLVxcdGlmICghKHZjcHUtXFx1MDAzZWFyY2guc2llX2Jsb2NrLVxcdTAwM2VlY2EgXFx1MDAyNiBFQ0FfQUlWKSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzo3NjE6XFx0XFx0VkZJT19BUF9EQkZfV0FSTihcXFwiJXM6IEFJViBmYWNpbGl0eSBub3QgaW5zdGFsbGVkOiBhcHFuPTB4JTA0eCwgZWNhPTB4JTA0eFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzYyLVxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgYXBxbiwgdmNwdS1cXHUwMDNlYXJjaC5zaWVfYmxvY2stXFx1MDAzZWVjYSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzcwLVxcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLmNyeXB0by5wcWFwX2hvb2spIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6NzcxOlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBQUUFQKEFRSUMpIGhvb2sgbm90IHJlZ2lzdGVyZWQgd2l0aCB0aGUgdmZpb19hcCBkcml2ZXI6IGFwcW49MHglMDR4XFxcXG5cXFwiLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03NzItXFx0XFx0XFx0XFx0IF9fZnVuY19fLCBhcHFuKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy03ODMtXFx0XFx0dmZpb19hcF9sZV9ndWlkX3RvX2JlX3V1aWQoXFx1MDAyNm1hdHJpeF9tZGV2LVxcdTAwM2VtZGV2LVxcdTAwM2V1dWlkLCB1dWlkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzg0OlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBtZGV2ICUwOGx4LSUwNGx4LSUwNGx4LSUwNGx4LSUwNGx4JTA4bHggbm90IGluIHVzZTogYXBxbj0weCUwNHhcXFxcblxcXCIsXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc4NS1cXHRcXHRcXHRcXHQgX19mdW5jX18sIHV1aWRbMF0sICB1dWlkWzFdLCB1dWlkWzJdLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTc5NC1cXHRpZiAoIXEpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6Nzk1OlxcdFxcdFZGSU9fQVBfREJGX1dBUk4oXFxcIiVzOiBRdWV1ZSAlMDJ4LiUwNHggbm90IGJvdW5kIHRvIHRoZSB2ZmlvX2FwIGRyaXZlclxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNzk2LVxcdFxcdFxcdFxcdCBfX2Z1bmNfXywgQVBfUUlEX0NBUkQoYXBxbiksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjE1Mj1zdGF0aWMgdm9pZCByZXBvcnRfYXFpY19yZXNvdXJjZV9sZWFrKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMTUzLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjE1NDpcXHRpZiAocS1cXHUwMDNlc2F2ZWRfaXNjICE9IFZGSU9fQVBfSVNDX0lOVkFMSUQgfHwgcS1cXHUwMDNlc2F2ZWRfaW92YSkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMTU1LVxcdFxcdGlmIChxLVxcdTAwM2VtYXRyaXhfbWRldikge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTIxOTU9c3RhdGljIHZvaWQgYXBxX3Jlc2V0X2ZpbmFsaXplKHN0cnVjdCB2ZmlvX2FwX3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTIyMDAtXFx0XFx0cS1cXHUwMDNlcmVzZXRfc3RhdHVzLnJlc3BvbnNlX2NvZGUgPSBBUF9SRVNQT05TRV9OT1JNQUw7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjIyMDE6XFx0aWYgKHEtXFx1MDAzZXNhdmVkX2lzYyAhPSBWRklPX0FQX0lTQ19JTlZBTElEKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yMjAyLVxcdFxcdHZmaW9fYXBfZnJlZV9hcWljX3Jlc291cmNlcyhxKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYz0yNDM0PXN0YXRpYyBpbnQgdmZpb19hcF9tZGV2X2dldF9kZXZpY2VfaW5mbyh1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDQ4LVxcdGluZm8ubnVtX3JlZ2lvbnMgPSAwO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDQ5OlxcdGluZm8ubnVtX2lycXMgPSBWRklPX0FQX05VTV9JUlFTO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDUwLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0NTQ9c3RhdGljIHNzaXplX3QgdmZpb19hcF9nZXRfaXJxX2luZm8odW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2My1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjQ2NDpcXHRpZiAoaW5mby5hcmdzeiBcXHUwMDNjIG1pbnN6IHx8IGluZm8uaW5kZXggXFx1MDAzZT0gVkZJT19BUF9OVU1fSVJRUylcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ2NS1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY3LVxcdHN3aXRjaCAoaW5mby5pbmRleCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDY4OlxcdGNhc2UgVkZJT19BUF9SRVFfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDY5LVxcdFxcdGluZm8uY291bnQgPSAxO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI0NzEtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI0NzI6XFx0Y2FzZSBWRklPX0FQX0NGR19DSEdfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDczLVxcdFxcdGluZm8uY291bnQgPSAxO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI0ODM9c3RhdGljIGludCB2ZmlvX2FwX2lycV9zZXRfaW5pdChzdHJ1Y3QgdmZpb19pcnFfc2V0ICppcnFfc2V0LCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNDkzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNDk0OlxcdHJldCA9IHZmaW9fc2V0X2lycXNfdmFsaWRhdGVfYW5kX3ByZXBhcmUoaXJxX3NldCwgMSwgVkZJT19BUF9OVU1fSVJRUyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtMjQ5NS1cXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmRhdGFfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM9MjU3Mj1zdGF0aWMgaW50IHZmaW9fYXBfc2V0X2lycXMoc3RydWN0IGFwX21hdHJpeF9tZGV2ICptYXRyaXhfbWRldixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg0LVxcdFxcdHN3aXRjaCAoaXJxX3NldC5pbmRleCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNTg1OlxcdFxcdGNhc2UgVkZJT19BUF9SRVFfSVJRX0lOREVYOlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNTg2LVxcdFxcdFxcdHJldHVybiB2ZmlvX2FwX3NldF9yZXF1ZXN0X2lycShtYXRyaXhfbWRldiwgYXJnKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmM6MjU4NzpcXHRcXHRjYXNlIFZGSU9fQVBfQ0ZHX0NIR19JUlFfSU5ERVg6XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI1ODgtXFx0XFx0XFx0cmV0dXJuIHZmaW9fYXBfc2V0X2NmZ19jaGFuZ2VfaXJxKG1hdHJpeF9tZGV2LCBhcmcpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NDI9aW50IHZmaW9fYXBfbWRldl9yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3NDktXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI3NTA6XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlLnN5c2ZzX25hbWUgPSBWRklPX0FQX01ERVZfVFlQRV9IV1ZJUlQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jOjI3NTE6XFx0bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlLnByZXR0eV9uYW1lID0gVkZJT19BUF9NREVWX05BTUVfSFdWSVJUO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzUyLVxcdG1hdHJpeF9kZXYtXFx1MDAzZW1kZXZfdHlwZXMgPSBcXHUwMDI2bWF0cml4X2Rldi1cXHUwMDNlbWRldl90eXBlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTI3NzE9aW50IHZmaW9fYXBfbWRldl9wcm9iZV9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcGRldilcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYy0yNzkxLVxcdHEtXFx1MDAzZWFwcW4gPSBhcHFuO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuYzoyNzkyOlxcdHEtXFx1MDAzZXNhdmVkX2lzYyA9IFZGSU9fQVBfSVNDX0lOVkFMSUQ7XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTI3OTMtXFx0SU5JVF9XT1JLKFxcdTAwMjZxLVxcdTAwM2VyZXNldF93b3JrLCBhcHFfcmVzZXRfY2hlY2spO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oOjEyOiNpZm5kZWYgX1ZGSU9fQVBfUFJJVkFURV9IX1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg6MTM6I2RlZmluZSBfVkZJT19BUF9QUklWQVRFX0hfXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNjojZGVmaW5lIFZGSU9fQVBfTU9EVUxFX05BTUUgXFxcInZmaW9fYXBcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoyNzojZGVmaW5lIFZGSU9fQVBfRFJWX05BTUUgXFxcInZmaW9fYXBcXFwiXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0yOC1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTQzPXN0cnVjdCB2ZmlvX2FwX3F1ZXVlIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmgtMTQ2LVxcdGludFxcdGFwcW47XFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNDc6I2RlZmluZSBWRklPX0FQX0lTQ19JTlZBTElEIDB4ZmZcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfcHJpdmF0ZS5oLTE0OC1cXHR1bnNpZ25lZCBjaGFyIHNhdmVkX2lzYztcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9wcml2YXRlLmg9MTY1PXZvaWQgdmZpb19hcF9vbl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBhcF9jb25maWdfaW5mbyAqbmV3X2NvbmZpZ19pbmZvLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaC0xNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX3ByaXZhdGUuaDoxNjg6I2VuZGlmIC8qIF9WRklPX0FQX1BSSVZBVEVfSF8gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MTEuOTY2MzExOTc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQzNjEzMTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDT05GSUdfVkZJT19BUCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgQ09ORklHX1ZGSU9fQVBgIG1pZ2h0IGhhdmUgc29tZSBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBzMzkwIGNyeXB0byBmcmFtZXdvcmsuIFNvLCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIGJ5IGxvb2tpbmcgZGlyZWN0bHkgaW50byB0aGUgYGRyaXZlcnMvczM5MC9jcnlwdG8vS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gc2VlIHdoYXQsIGlmIGFueSwgY3J5cHRvLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMgYXJlIHRpZWQgaW50byBgQ09ORklHX1ZGSU9fQVBgLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyBjcnVjaWFsOyBpdOKAmWxsIGhlbHAgbWUgYW50aWNpcGF0ZSBwb3RlbnRpYWwgY29uZmxpY3RzLCBidWlsZCBpc3N1ZXMsIG9yIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXQncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gZ2V0IGEgc29saWQgb3ZlcnZpZXcgYmVmb3JlIEkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVGhpcyBjaGVjayBvZiB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgYWN0IGFzIGEgZ29vZCBjaGVja3BvaW50IGJlZm9yZSBJIGdvIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MTQuNDAyNDQ2NjA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzA1NzIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3MzOTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjE0LjQ1Mjc2NDM4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTUyMDczMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBoYXZpbmcgaXQ6XG5cbioqVkZJT19BUCBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgY29uZmlnIFZGSU9fQVBgIGlzIGRlZmluZWQsIG9yIHVzZWQsIHdpdGhpbiB0aGUgZW50aXJlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSdtIGdvaW5nIHRvIGtpY2sgb2ZmIGEgc2VhcmNoIGZvciBpdC4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBnb2luZyB0byBiZSBhIGJyb2FkIHN3ZWVwIGFjcm9zcyB0aGUgd2hvbGUgcHJvamVjdCwgc28gSSBjYW4gc2VlIGV2ZXJ5IGNvbnRleHQgaW4gd2hpY2ggdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBleGlzdC4gR290dGEgZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQgZmlyc3QuIEl0J3MgdXN1YWxseSBmYXN0ZXIgdG8gc3RhcnQgYnJvYWQsIHRoZW4gcmVmaW5lLiBMZXQncyBnZXQgdGhlIHNlYXJjaCB1bmRlcndheS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgbW9kZXJhdGVseSBxdWljayBwcm9jZXNzLCBkZXBlbmRpbmcgb24gdGhlIHNwZWVkIG9mIG15IHNlYXJjaCB0b29sIGFuZCBob3cgZXhwYW5zaXZlIHRoZSBrZXJuZWwgcmVwbyBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzOTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoxNi4zMDc5NzU4MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMDcwMDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19BUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvS2NvbmZpZz04MzU9Y29uZmlnIFZGSU9fQ0NXXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04NDUtXFxuYXJjaC9zMzkwL0tjb25maWc6ODQ2OmNvbmZpZyBWRklPX0FQXFxuYXJjaC9zMzkwL0tjb25maWctODQ3LVxcdGRlZl90cmlzdGF0ZSBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjE4LjQyODY4Mjg0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTc5MTYwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIHMzOTAgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZGl2ZSBpbnRvIHRoZSBzMzkwIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBnb2FsIGhlcmUgaXMgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGFzcGVjdCBvZiBpdHMgYnVpbGQgcHJvY2Vzcywgc28gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGBhcmNoL3MzOTAvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDg0NiDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmaW5kIGEgcmVsZXZhbnQgc2VjdGlvbiwgZGVwZW5kaW5nIG9uIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpb24sIG9yIHBlcmhhcHMgYSBkZXBlbmRlbmN5IGRlY2xhcmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLiBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIGNvbmZpZyBsb2dpYyBhbmQgYW55IGFzc29jaWF0ZWQgZGVmaW5pdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjczLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MjAuNDg2NjAxNjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdGhlbHBcXG4gODQxOlxcdFxcdCAgVGhpcyBkcml2ZXIgYWxsb3dzIHVzYWdlIG9mIEkvTyBzdWJjaGFubmVscyB2aWEgVkZJTy1DQ1cuXFxuIDg0MjpcXHRcXG4gODQzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDg0NDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2ZmlvX2Njdy5cXG4gODQ1OlxcdFxcbiA4NDY6XFx0Y29uZmlnIFZGSU9fQVBcXG4gODQ3OlxcdFxcdGRlZl90cmlzdGF0ZSBuXFxuIDg0ODpcXHRcXHRwcm9tcHQgXFxcIlZGSU8gc3VwcG9ydCBmb3IgQVAgZGV2aWNlc1xcXCJcXG4gODQ5OlxcdFxcdGRlcGVuZHMgb24gS1ZNXFxuIDg1MDpcXHRcXHRkZXBlbmRzIG9uIFZGSU9cXG4gODUxOlxcdFxcdGRlcGVuZHMgb24gQVBcXG4gODUyOlxcdFxcdHNlbGVjdCBWRklPX01ERVZcXG4gODUzOlxcdFxcdGhlbHBcXG4gODU0OlxcdFxcdCAgVGhpcyBkcml2ZXIgZ3JhbnRzIGFjY2VzcyB0byBBZGp1bmN0IFByb2Nlc3NvciAoQVApIGRldmljZXNcXG4gODU1OlxcdFxcdCAgdmlhIHRoZSBWRklPIG1lZGlhdGVkIGRldmljZSBpbnRlcmZhY2UuXFxuIDg1NjpcXHRcXG4gODU3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiA4NTg6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCB2ZmlvX2FwLlxcbiA4NTk6XFx0XFxuIDg2MDpcXHRlbmRtZW51XFxuIDg2MTpcXHRcXG4gODYyOlxcdGNvbmZpZyBDQ1dcXG4gODYzOlxcdFxcdGRlZl9ib29sIHlcXG4gODY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoyMC40ODY2OTAyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjM3MDEyNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBDb2RlIFBhdGggQ29uZmxpY3RzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwb3RlbnRpYWwgaXNzdWUgcmVsYXRlZCB0byBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBwYXRocy4gVGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUsIHNwZWNpZmljYWxseSBgYXJjaC9zMzkwL0tjb25maWdgLCBpcyB3aGVyZSBJIHNlZSB0aGUgYFZGSU9fQVBgIG9wdGlvbiBkZWZpbmVkLiBJIGtub3cgdGhhdCBtdWNoLiBOb3csIHRoZSBvdmVyYXJjaGluZyBnb2FsIG9mIHRoaXMgY2hlY2sgaXMgdG8gc2VlIGlmIGFueSBjb2RlIHBhdGhzIGFyZSBhY2NpZGVudGFsbHkgZXhlY3V0ZWQgb24gYXJjaGl0ZWN0dXJlIHRoYXQgdGhleSBhcmUgbm90IHdyaXR0ZW4gZm9yLiBUaGlzLCBJIGtub3csIGNhbiBiZSBwcm9ibGVtYXRpYy4gVGhpcyBpcyBiZWluZyBmbGFnZ2VkIGJlY2F1c2UgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYGFtZDY0YCwgYW5kIHdlJ3JlIHNlZWluZyBzb21ldGhpbmcgczM5MC1yZWxhdGVkLlxuXG5UaGUgXCJORUdBVElWRSBDUklURVJJQVwiIHNlY3Rpb24gY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgY29kZSBleGNsdXNpdmVseSB0aWVkIHRvIGFuIGFyY2hpdGVjdHVyZSAqb3RoZXIgdGhhbiogdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYSBwcm9ibGVtLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGBkcml2ZXJzL3MzOTAvYCBkaXJlY3RvcnkgKGFuZCBpdHMgY29udGVudHMpIGFyZSBpbmFkdmVydGVudGx5IGJlaW5nIGJ1aWx0IG9uIGFyY2hpdGVjdHVyZXMgYmVzaWRlcyBzMzkwLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIuIE15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvTWFrZWZpbGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGljYXRpb25zIG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA4OjQ4OjI0LjEyMzcwNjIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0NjE5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiczM5MFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvTWFrZWZpbGU9MTk5PW9iai0kKENPTkZJR19ESUJTKVxcdFxcdCs9IGRpYnMvXFxuZHJpdmVycy9NYWtlZmlsZToyMDA6b2JqLSQoQ09ORklHX1MzOTApXFx0XFx0Kz0gczM5MC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDg6NDg6MjQuMjE1MTczODEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNzc3ODc0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzbid0IHN1aXRhYmxlIGZvciBmdXp6aW5nLCBhbmQgaGVyZSdzIHdoeS4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLlxuXG5JIHNlZSB0aGF0IHRoZSBtb2RpZmllZCBjb2RlLCBsb2NhdGVkIGluIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmNgLCBpcyBndWFyZGVkIGJ5IHRoZSBgQ09ORklHX1MzOTBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIGBDT05GSUdfUzM5MGAgaXMsIG9mIGNvdXJzZSwgb25seSBkZWZpbmVkIG9uIHRoZSBzMzkwIGFyY2hpdGVjdHVyZS4gQ3J1Y2lhbGx5LCB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBmb3IgdGhpcyBhbmFseXNpcyBpcyBhbWQ2NC4gVGhlcmVmb3JlLCBhbnkgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvczM5MC9jcnlwdG8vdmZpb19hcF9vcHMuY2AgYXJlLCBieSBkZWZpbml0aW9uLCB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4gVGhlIGNvZGUgd2lsbCBub3QgYmUgY29tcGlsZWQgb3IgZXhlY3V0ZWQgb24gdGhpcyBwbGF0Zm9ybS5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIGNvbmZpcm1lZCB0aGF0IHRoZSBkaWZmIG9ubHkgYWZmZWN0cyB0aGF0IHNpbmdsZSBmaWxlOiBgZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jYC5cblxuQmFzZWQgb24gdGhlIHJ1bGVzLCBzcGVjaWZpY2FsbHkgdGhlIFwiVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzXCIgbmVnYXRpdmUgY3JpdGVyaWEsIGl0J3MgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlIGNvZGUgbW9kaWZpZWQgaXMgZXhjbHVzaXZlIHRvIGFuIGFyY2hpdGVjdHVyZSBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLCBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGJlIGFuIGVtcHR5IGxpc3QgYFtdYCwgYW5kIGBGb2N1c1N5bWJvbHNgIHNob3VsZCBhbHNvIGJlIGBbXWAuIE15IHJlYXNvbmluZyBpcyBncm91bmRlZCBpbiB0aGUgYXJjaGl0ZWN0dXJhbCBleGNsdXNpdml0eSBvZiB0aGUgbW9kaWZpZWQgY29kZSDigJMgaXQncyBzaW1wbHkgbm90IHJlbGV2YW50IHRvIGZ1enppbmcgb24gYW1kNjQuIE5vdyBJJ2xsIHByZXBhcmUgdGhlIHRvb2wgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY0NSwiT3V0cHV0VG9rZW5zIjo5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoyOC4zOTI5NjQ5MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfUzM5MCAvIENPTkZJR19WRklPX0FQKSBhbmQgY2Fubm90IGJlIGJ1aWx0IG9yIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGNvZGUgaW4gZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLCB3aGljaCBpcyBleGNsdXNpdmUgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlIChDT05GSUdfUzM5MCAvIENPTkZJR19WRklPX0FQKSBhbmQgY2Fubm90IGJlIGJ1aWx0IG9yIGV4ZWN1dGVkIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwODo0ODoyOC4zOTMwMDc1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmwk5x[1] Phase: Running StartedAt: 2026-09-06 08:48:39 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmwk5x[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-06 08:48:39 +0000 UTC FinishedAt: 2026-09-06 08:48: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,}