Name: series-workflow5dns4 Phase: Failed StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 19:47:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dns4[0] Phase: Succeeded StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 19:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dns4[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 19:47:11 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI3MjA1NWNhOTlkNDQ5ZTNkMjgxYzE2MzA4OTIyZmZjYzY4MGRmYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xuaW5kZXggY2M0N2M0MzVlYjcwYS4uOTY1NDA5MTRmM2NmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jXG5AQCAtNDEzLDcgJiM0Mzs0MTMsMTAgQEAgYm9vbCBueHB3aWZpX2lzXzExYXhfdHd0X3N1cHBvcnRlZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0c3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICp1c2VyX2hlX2NhcDtcbiBcdHN0cnVjdCBueHB3aWZpX2llX3R5cGVzX2hlX2NhcCAqaHdfaGVfY2FwO1xuIFxuLVx0aWYgKGJzc19kZXNjIFx1MDAyNlx1MDAyNiAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkpIHtcbiYjNDM7XHRpZiAoIWJzc19kZXNjKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkge1xuIFx0XHRueHB3aWZpX2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRyxcbiBcdFx0XHQgICAgXCYjMzQ7QVAgZG9uJiMzOTt0IHN1cHBvcnQgdHd0IGZlYXR1cmVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuaW5kZXggZTQ2YzUwNTNkNTA5MC4uYzJhNTRkNzgxYjQyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuQEAgLTQ1MSw3ICYjNDM7NDUxLDcgQEAgdm9pZFxuIG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsKVxuIHtcbi1cdGlmICghdGJsIFx1MDAyNlx1MDAyNiBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSlcbiYjNDM7XHRpZiAoIXRibCB8fCBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnhwd2lmaV9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBJTkZPLFxuQEAgLTY5NCw3ICYjNDM7Njk0LDcgQEAgaW50IG54cHdpZmlfZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiAvKiBEZWxldGUgVHggQkEgc3RyZWFtIGVudHJ5IGJ5IFJBLiAqL1xuIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXG4ge1xuLVx0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsO1xuJiM0MztcdHN0cnVjdCBueHB3aWZpX3R4X2JhX3N0cmVhbV90YmwgKnRibCwgKnRtcDtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCFyYSlcbkBAIC03MDIsNyAmIzQzOzcwMiw4IEBAIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfTlVNX1RJRDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9sb2NrW2ldKTtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGJsLCBcdTAwMjZwcml2LVx1MDAzZXR4X2JhX3N0cmVhbV90YmxfcHRyW2ldLCBsaXN0KVxuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRibCwgdG1wLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXG4gXHRcdFx0aWYgKCFtZW1jbXAodGJsLVx1MDAzZXJhLCByYSwgRVRIX0FMRU4pKVxuIFx0XHRcdFx0bnhwd2lmaV8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkocHJpdiwgdGJsKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xuaW5kZXggYzgyMGYwOGQyODM1NS4uNWNjOGNkZjU5NGQzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbkBAIC03MTcsNiAmIzQzOzcxNyw3IEBAIG54cHdpZmlfaW5pdF9uZXdfcHJpdl9wYXJhbXMoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSlcbiB7XG4gXHRzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cdTAwM2VhZGFwdGVyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRueHB3aWZpX2luaXRfcHJpdihwcml2KTtcbiBcbkBAIC03NDAsNyAmIzQzOzc0MSwxNSBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdHByaXYtXHUwMDNlYnNzX251bSA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXHUwMDNlYnNzX3R5cGUpO1xuJiM0MztcdHJldCA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXHUwMDNlYnNzX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgXHUwMDI2cHJpdi1cdTAwM2Vic3NfbnVtKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDslczogbm8gdW51c2VkIGJzc19udW0gZm9yIHR5cGUgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBkZXYtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2Vic3NfdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdGZsdXNoX3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZXdvcmtxdWV1ZSk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNmFkYXB0ZXItXHUwMDNlaWZhY2VfY2hhbmdpbmcsIDApO1xuQEAgLTk0Myw3ICYjNDM7OTUyLDYgQEAgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbiBcdFx0XHRyZXR1cm4gbnhwd2lmaV9jaGFuZ2VfdmlmX3RvX3N0YShkZXYsIGN1cnJfaWZ0eXBlLFxuIFx0XHRcdFx0XHRcdFx0IHR5cGUsIHBhcmFtcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBlcnJub3RzdXBwO1xuIFx0XHR9XG5AQCAtOTUyLDggJiM0Mzs5NjAsNiBAQCBueHB3aWZpX2NmZzgwMjExX2NoYW5nZV92aXJ0dWFsX2ludGYoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0Z290byBlcnJub3RzdXBwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJybm90c3VwcDpcbiBcdG54cHdpZmlfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsXG4gXHRcdCAgICBcJiMzNDt1bnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSB0cmFuc2l0aW9uOiAlZCB0byAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbmluZGV4IDRlMDFmNDVmM2EwMGYuLmI0YzYzODI5MDI0YTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xuQEAgLTIwNCw3ICYjNDM7MjA0LDcgQEAgc3RhdGljIGJvb2wgbnhwd2lmaV9kcmFpbl90eChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxuIFx0XHRcdFx0XHQgIE5YUFdJRklfQVNZTkNfQ01EKTtcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZWhzX2FjdGl2YXRlZF9tYW51YWxseSA9IGZhbHNlO1xuIFx0XHR9XG4tXHRcdFx0bnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTtcbiYjNDM7XHRcdG54cHdpZmlfcHJvY2Vzc19ieXBhc3NfdHgoYWRhcHRlcik7XG4gXHRcdGlmIChhZGFwdGVyLVx1MDAzZWhzX2FjdGl2YXRlZCkge1xuIFx0XHRcdGNsZWFyX2JpdChOWFBXSUZJX0lTX0hTX0NPTkZJR1VSRUQsXG4gXHRcdFx0XHQgIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXG5pbmRleCAzNDlkZmE0ZDNmODU4Li5iMjVhNmE0ZjI5MzY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmhcbkBAIC0xMTY2LDggJiM0MzsxMTY2LDkgQEAgbnhwd2lmaV9nZXRfcHJpdihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuIH1cbiBcbiAvKiBmaW5kIHVudXNlZCBCU1MgbnVtYmVyIGZvciBuZXcgaW50ZXJmYWNlICovXG4tc3RhdGljIGlubGluZSB1OFxuLW54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCB1OCBic3NfdHlwZSxcbiYjNDM7XHRcdFx0ICAgdTggKmJzc19udW0pXG4ge1xuIFx0dTggaSwgajtcbiBcdGludCBpbmRleFtOWFBXSUZJX01BWF9CU1NfTlVNXTtcbkBAIC0xMTc5LDkgJiM0MzsxMTgwLDE0IEBAIG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlKVxuIFx0XHQgICAgICBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkpIHtcbiBcdFx0XHRpbmRleFthZGFwdGVyLVx1MDAzZXByaXZbaV0tXHUwMDNlYnNzX251bV0gPSAxO1xuIFx0XHR9XG4tXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOWFBXSUZJX01BWF9CU1NfTlVNOyBqJiM0MzsmIzQzOylcbi1cdFx0aWYgKCFpbmRleFtqXSlcbi1cdFx0XHRyZXR1cm4gajtcbiYjNDM7XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlhQV0lGSV9NQVhfQlNTX05VTTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghaW5kZXhbal0pIHtcbiYjNDM7XHRcdFx0KmJzc19udW0gPSBqO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIFxuQEAgLTExOTUsOCAmIzQzOzEyMDEsOSBAQCBueHB3aWZpX2dldF91bnVzZWRfcHJpdl9ieV9ic3NfdHlwZShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2Vwcml2X251bTsgaSYjNDM7JiM0MzspXG4gXHRcdGlmIChhZGFwdGVyLVx1MDAzZXByaXZbaV0tXHUwMDNlYnNzX21vZGUgPT1cbiBcdFx0ICAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpIHtcbi1cdFx0XHRhZGFwdGVyLVx1MDAzZXByaXZbaV0tXHUwMDNlYnNzX251bSA9XG4tXHRcdFx0XHRueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSk7XG4mIzQzO1x0XHRcdGlmIChueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xuaW5kZXggZDg1MzYzNTRmMDkzYS4uOGVmMGY2ZWI0OWUyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jXG5AQCAtMTM0Nyw3ICYjNDM7MTM0Nyw4IEBAIHN0YXRpYyBpbnQgbnhwd2lmaV9wcm9jZXNzX2ludF9zdGF0dXMoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggc2Rpb19pXG4gXHRcdFx0ICAgICAoKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKSBcdTAwM2VcbiBcdFx0XHQgICAgICBjYXJkLVx1MDAzZW1wYV9yeC5idWZfc2l6ZSkpKSB7XG4gXHRcdFx0XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUiwgXCYjMzQ7aW52YWxpZCByeF9sZW49JWRcXG5cJiMzNDssIHJ4X2xlbik7XG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gdGVybV9jbWQ7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHJ4X2xlbiA9ICh1MTYpKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguY1xuaW5kZXggZjNkMjRiZjg2MWNhOS4uODQwZGRkZmM0ZjVhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbkBAIC0yNDYsOCAmIzQzOzI0Niw4IEBAIGludCBueHB3aWZpX2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBjb3B5IHNrYiBmb3IgdUFQXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdCAgICBwcml2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuLVx0XHRcdFx0ICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG5pbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmNcbkBAIC03OTksMzQgJiM0Mzs3OTksMzMgQEAgaW50IG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWYoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdFx0X19sZTE2IGFjY19sZTtcbiBcdFx0dTggZmxhZ3MgPSAwO1xuIFxuLVx0XHRpZiAoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcdTAwM2M9IDE1KSB7XG4tXHRcdFx0aGRyLVx1MDAzZWl0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTtcbi1cdFx0XHRvZmYgPSBBTElHTihvZmYsIDgpO1xuLVxuLVx0XHRcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFx1MDAyNiAweDAxKSB7XG4tXHRcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfMzJCSVQ7XG4tXHRcdFx0XHR0cyA9ICh1MzIpZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfNjRCSVQ7XG4tXHRcdFx0XHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcbi1cdFx0XHR9XG4mIzQzO1x0XHRoZHItXHUwMDNlaXRfcHJlc2VudCB8PVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMihCSVQoSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUCkpO1xuJiM0MztcdFx0b2ZmID0gQUxJR04ob2ZmLCA4KTtcbiBcbi1cdFx0XHR0c19sZSA9IGNwdV90b19sZTY0KHRzKTtcbi1cdFx0XHRtZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCBcdTAwMjZ0c19sZSwgc2l6ZW9mKHRzX2xlKSk7XG4tXHRcdFx0b2ZmICYjNDM7PSBzaXplb2YodHNfbGUpO1xuJiM0MztcdFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXHUwMDI2IDB4MDEpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzMyQklUO1xuJiM0MztcdFx0XHR0cyA9ICh1MzIpZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzY0QklUO1xuJiM0MztcdFx0XHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0XHRpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyBcdTAwMjYgMHgwMikge1xuLVx0XHRcdFx0YWNjdXJhY3kgPSBleHQudGltZXN0YW1wLmFjY3VyYWN5O1xuLVx0XHRcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHX0FDQ1VSQUNZO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHRzX2xlID0gY3B1X3RvX2xlNjQodHMpO1xuJiM0MztcdFx0bWVtY3B5KHJ0aGRyICYjNDM7IG9mZiwgXHUwMDI2dHNfbGUsIHNpemVvZih0c19sZSkpO1xuJiM0MztcdFx0b2ZmICYjNDM7PSBzaXplb2YodHNfbGUpO1xuIFxuLVx0XHRcdGFjY19sZSA9IGNwdV90b19sZTE2KGFjY3VyYWN5KTtcbi1cdFx0XHRtZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCBcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcbi1cdFx0XHRvZmYgJiM0Mzs9IHNpemVvZihhY2NfbGUpO1xuLVx0XHRcdHJ0aGRyW29mZiYjNDM7JiM0MztdID0gKGV4dC50aW1lc3RhbXAudW5pdCBcdTAwMjYgMHgwZikgfFxuLVx0XHRcdFx0XHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXHUwMDI2IDB4MGYpIFx1MDAzY1x1MDAzYyA0KTtcbi1cdFx0XHRydGhkcltvZmYmIzQzOyYjNDM7XSA9IGZsYWdzO1xuJiM0MztcdFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXHUwMDI2IDB4MDIpIHtcbiYjNDM7XHRcdFx0YWNjdXJhY3kgPSBleHQudGltZXN0YW1wLmFjY3VyYWN5O1xuJiM0MztcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRhY2NfbGUgPSBjcHVfdG9fbGUxNihhY2N1cmFjeSk7XG4mIzQzO1x0XHRtZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCBcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcbiYjNDM7XHRcdG9mZiAmIzQzOz0gc2l6ZW9mKGFjY19sZSk7XG4mIzQzO1x0XHRydGhkcltvZmYmIzQzOyYjNDM7XSA9IChleHQudGltZXN0YW1wLnVuaXQgXHUwMDI2IDB4MGYpIHxcbiYjNDM7XHRcdFx0XHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXHUwMDI2IDB4MGYpIFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRcdHJ0aGRyW29mZiYjNDM7JiM0MztdID0gZmxhZ3M7XG4gXHR9XG4gXG4gXHRpZiAoZm9ybWF0ID09IE5YUFdJRklfUkFURV9GT1JNQVRfSEUgXHUwMDI2XHUwMDI2IGhhc19leHQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5YUCBXaUZpIGRyaXZlciAobnhwd2lmaSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNESU8gZHJpdmVyIGZvciBOWFAgSVc2MXggaGFyZHdhcmUuIFNpbmNlIHRoaXMgcmVxdWlyZXMgcGh5c2ljYWwgU0RJTyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlIGFuZCBpdHMgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjcyMDU1Y2E5OWQ0NDllM2QyODFjMTYzMDg5MjJmZmNjNjgwZGZhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTk6NDU6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmMKaW5kZXggY2M0N2M0MzVlYjcwYS4uOTY1NDA5MTRmM2NmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguYwpAQCAtNDEzLDcgJiM0Mzs0MTMsMTAgQEAgYm9vbCBueHB3aWZpX2lzXzExYXhfdHd0X3N1cHBvcnRlZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LAogCXN0cnVjdCBueHB3aWZpX2llX3R5cGVzX2hlX2NhcCAqdXNlcl9oZV9jYXA7CiAJc3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICpod19oZV9jYXA7CiAKLQlpZiAoYnNzX2Rlc2MgJmFtcDsmYW1wOyAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkpIHsKJiM0MzsJaWYgKCFic3NfZGVzYykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFueHB3aWZpX2lzX2FwXzExYXhfdHd0X3N1cHBvcnRlZChic3NfZGVzYykpIHsKIAkJbnhwd2lmaV9kYmcocHJpdi0mZ3Q7YWRhcHRlciwgTVNHLAogCQkJICAgICYjMzQ7QVAgZG9uJiMzOTt0IHN1cHBvcnQgdHd0IGZlYXR1cmVcbiYjMzQ7KTsKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYwppbmRleCBlNDZjNTA1M2Q1MDkwLi5jMmE1NGQ3ODFiNDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYwpAQCAtNDUxLDcgJiM0Mzs0NTEsNyBAQCB2b2lkCiBueHB3aWZpXzExbl9kZWxldGVfdHhfYmFfc3RyZWFtX3RibF9lbnRyeShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LAogCQkJCQkgIHN0cnVjdCBueHB3aWZpX3R4X2JhX3N0cmVhbV90YmwgKnRibCkKIHsKLQlpZiAoIXRibCAmYW1wOyZhbXA7IG54cHdpZmlfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChwcml2LCB0YmwpKQomIzQzOwlpZiAoIXRibCB8fCBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSkKIAkJcmV0dXJuOwogCiAJbnhwd2lmaV9kYmcocHJpdi0mZ3Q7YWRhcHRlciwgSU5GTywKQEAgLTY5NCw3ICYjNDM7Njk0LDcgQEAgaW50IG54cHdpZmlfZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwKIC8qIERlbGV0ZSBUeCBCQSBzdHJlYW0gZW50cnkgYnkgUkEuICovCiB2b2lkIG54cHdpZmlfZGVsX3R4X2JhX3N0cmVhbV90YmxfYnlfcmEoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwgdTggKnJhKQogewotCXN0cnVjdCBueHB3aWZpX3R4X2JhX3N0cmVhbV90YmwgKnRibDsKJiM0MzsJc3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsLCAqdG1wOwogCWludCBpOwogCiAJaWYgKCFyYSkKQEAgLTcwMiw3ICYjNDM7NzAyLDggQEAgdm9pZCBueHB3aWZpX2RlbF90eF9iYV9zdHJlYW1fdGJsX2J5X3JhKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsIHU4ICpyYSkKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfTlVNX1RJRDsgaSYjNDM7JiM0MzspIHsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7cHJpdi0mZ3Q7dHhfYmFfc3RyZWFtX3RibF9sb2NrW2ldKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGJsLCAmYW1wO3ByaXYtJmd0O3R4X2JhX3N0cmVhbV90YmxfcHRyW2ldLCBsaXN0KQomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRibCwgdG1wLAomIzQzOwkJCQkJICZhbXA7cHJpdi0mZ3Q7dHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpCiAJCQlpZiAoIW1lbWNtcCh0YmwtJmd0O3JhLCByYSwgRVRIX0FMRU4pKQogCQkJCW54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIHRibCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jCmluZGV4IGM4MjBmMDhkMjgzNTUuLjVjYzhjZGY1OTRkM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYwpAQCAtNzE3LDYgJiM0Mzs3MTcsNyBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKIHsKIAlzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0mZ3Q7YWRhcHRlcjsKJiM0MzsJaW50IHJldDsKIAogCW54cHdpZmlfaW5pdF9wcml2KHByaXYpOwogCkBAIC03NDAsNyAmIzQzOzc0MSwxNSBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlwcml2LSZndDtic3NfbnVtID0gbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgcHJpdi0mZ3Q7YnNzX3R5cGUpOwomIzQzOwlyZXQgPSBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBwcml2LSZndDtic3NfdHlwZSwKJiM0MzsJCQkJCSAmYW1wO3ByaXYtJmd0O2Jzc19udW0pOwomIzQzOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUiwKJiM0MzsJCQkgICAgJiMzNDslczogbm8gdW51c2VkIGJzc19udW0gZm9yIHR5cGUgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICBkZXYtJmd0O25hbWUsIHByaXYtJmd0O2Jzc190eXBlKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCWZsdXNoX3dvcmtxdWV1ZShhZGFwdGVyLSZndDt3b3JrcXVldWUpOwogCWF0b21pY19zZXQoJmFtcDthZGFwdGVyLSZndDtpZmFjZV9jaGFuZ2luZywgMCk7CkBAIC05NDMsNyAmIzQzOzk1Miw2IEBAIG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCQlyZXR1cm4gbnhwd2lmaV9jaGFuZ2VfdmlmX3RvX3N0YShkZXYsIGN1cnJfaWZ0eXBlLAogCQkJCQkJCSB0eXBlLCBwYXJhbXMpOwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGVycm5vdHN1cHA7CiAJCX0KQEAgLTk1Miw4ICYjNDM7OTYwLDYgQEAgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCWdvdG8gZXJybm90c3VwcDsKIAl9CiAKLQlyZXR1cm4gMDsKLQogZXJybm90c3VwcDoKIAlueHB3aWZpX2RiZyhwcml2LSZndDthZGFwdGVyLCBFUlJPUiwKIAkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGUgdHJhbnNpdGlvbjogJWQgdG8gJWRcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jCmluZGV4IDRlMDFmNDVmM2EwMGYuLmI0YzYzODI5MDI0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMKQEAgLTIwNCw3ICYjNDM7MjA0LDcgQEAgc3RhdGljIGJvb2wgbnhwd2lmaV9kcmFpbl90eChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKQogCQkJCQkgIE5YUFdJRklfQVNZTkNfQ01EKTsKIAkJCWFkYXB0ZXItJmd0O2hzX2FjdGl2YXRlZF9tYW51YWxseSA9IGZhbHNlOwogCQl9Ci0JCQlueHB3aWZpX3Byb2Nlc3NfYnlwYXNzX3R4KGFkYXB0ZXIpOwomIzQzOwkJbnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTsKIAkJaWYgKGFkYXB0ZXItJmd0O2hzX2FjdGl2YXRlZCkgewogCQkJY2xlYXJfYml0KE5YUFdJRklfSVNfSFNfQ09ORklHVVJFRCwKIAkJCQkgICZhbXA7YWRhcHRlci0mZ3Q7d29ya19mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmgKaW5kZXggMzQ5ZGZhNGQzZjg1OC4uYjI1YTZhNGYyOTM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaApAQCAtMTE2Niw4ICYjNDM7MTE2Niw5IEBAIG54cHdpZmlfZ2V0X3ByaXYoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwKIH0KIAogLyogZmluZCB1bnVzZWQgQlNTIG51bWJlciBmb3IgbmV3IGludGVyZmFjZSAqLwotc3RhdGljIGlubGluZSB1OAotbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0MztueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCB1OCBic3NfdHlwZSwKJiM0MzsJCQkgICB1OCAqYnNzX251bSkKIHsKIAl1OCBpLCBqOwogCWludCBpbmRleFtOWFBXSUZJX01BWF9CU1NfTlVNXTsKQEAgLTExNzksOSAmIzQzOzExODAsMTQgQEAgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpCiAJCSAgICAgIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkgewogCQkJaW5kZXhbYWRhcHRlci0mZ3Q7cHJpdltpXS0mZ3Q7YnNzX251bV0gPSAxOwogCQl9Ci0JZm9yIChqID0gMDsgaiAmbHQ7IE5YUFdJRklfTUFYX0JTU19OVU07IGomIzQzOyYjNDM7KQotCQlpZiAoIWluZGV4W2pdKQotCQkJcmV0dXJuIGo7CiYjNDM7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBOWFBXSUZJX01BWF9CU1NfTlVNOyBqJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFpbmRleFtqXSkgewomIzQzOwkJCSpic3NfbnVtID0gajsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCXJldHVybiAtRU5PRU5UOwogfQogCkBAIC0xMTk1LDggJiM0MzsxMjAxLDkgQEAgbnhwd2lmaV9nZXRfdW51c2VkX3ByaXZfYnlfYnNzX3R5cGUoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwKIAlmb3IgKGkgPSAwOyBpICZsdDsgYWRhcHRlci0mZ3Q7cHJpdl9udW07IGkmIzQzOyYjNDM7KQogCQlpZiAoYWRhcHRlci0mZ3Q7cHJpdltpXS0mZ3Q7YnNzX21vZGUgPT0KIAkJICAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpIHsKLQkJCWFkYXB0ZXItJmd0O3ByaXZbaV0tJmd0O2Jzc19udW0gPQotCQkJCW54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIGJzc190eXBlKTsKJiM0MzsJCQlpZiAobnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgYnNzX3R5cGUsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7YWRhcHRlci0mZ3Q7cHJpdltpXS0mZ3Q7YnNzX251bSkpCiYjNDM7CQkJCXJldHVybiBOVUxMOwogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jCmluZGV4IGQ4NTM2MzU0ZjA5M2EuLjhlZjBmNmViNDllMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMKQEAgLTEzNDcsNyAmIzQzOzEzNDcsOCBAQCBzdGF0aWMgaW50IG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHNkaW9faQogCQkJICAgICAoKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKSAmZ3Q7CiAJCQkgICAgICBjYXJkLSZndDttcGFfcnguYnVmX3NpemUpKSkgewogCQkJCW54cHdpZmlfZGJnKGFkYXB0ZXIsIEVSUk9SLCAmIzM0O2ludmFsaWQgcnhfbGVuPSVkXG4mIzM0OywgcnhfbGVuKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byB0ZXJtX2NtZDsKIAkJCX0KIAogCQkJcnhfbGVuID0gKHUxNikocnhfYmxvY2tzICogTlhQV0lGSV9TRElPX0JMT0NLX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmMKaW5kZXggZjNkMjRiZjg2MWNhOS4uODQwZGRkZmM0ZjVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jCkBAIC0yNDYsOCAmIzQzOzI0Niw4IEBAIGludCBueHB3aWZpX2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LAogCQl9IGVsc2UgewogCQkJbnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsCiAJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGNvcHkgc2tiIGZvciB1QVBcbiYjMzQ7KTsKLQkJCQkgICAgcHJpdi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7Ci0JCQkJICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQkJcHJpdi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuYwppbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jCkBAIC03OTksMzQgJiM0Mzs3OTksMzMgQEAgaW50IG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWYoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwKIAkJX19sZTE2IGFjY19sZTsKIAkJdTggZmxhZ3MgPSAwOwogCi0JCWlmIChleHQudGltZXN0YW1wLnBvc2l0aW9uICZsdDs9IDE1KSB7Ci0JCQloZHItJmd0O2l0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTsKLQkJCW9mZiA9IEFMSUdOKG9mZiwgOCk7Ci0KLQkJCWlmIChleHQudGltZXN0YW1wLmZsYWdzICZhbXA7IDB4MDEpIHsKLQkJCQlmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfMzJCSVQ7Ci0JCQkJdHMgPSAodTMyKWV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDsKLQkJCX0gZWxzZSB7Ci0JCQkJZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzY0QklUOwotCQkJCXRzID0gZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wOwotCQkJfQomIzQzOwkJaGRyLSZndDtpdF9wcmVzZW50IHw9CiYjNDM7CQkJY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTsKJiM0MzsJCW9mZiA9IEFMSUdOKG9mZiwgOCk7CiAKLQkJCXRzX2xlID0gY3B1X3RvX2xlNjQodHMpOwotCQkJbWVtY3B5KHJ0aGRyICYjNDM7IG9mZiwgJmFtcDt0c19sZSwgc2l6ZW9mKHRzX2xlKSk7Ci0JCQlvZmYgJiM0Mzs9IHNpemVvZih0c19sZSk7CiYjNDM7CQlpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyAmYW1wOyAweDAxKSB7CiYjNDM7CQkJZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzMyQklUOwomIzQzOwkJCXRzID0gKHUzMilleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDsKJiM0MzsJCQl0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDsKJiM0MzsJCX0KIAotCQkJaWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgJmFtcDsgMHgwMikgewotCQkJCWFjY3VyYWN5ID0gZXh0LnRpbWVzdGFtcC5hY2N1cmFjeTsKLQkJCQlmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7Ci0JCQl9CiYjNDM7CQl0c19sZSA9IGNwdV90b19sZTY0KHRzKTsKJiM0MzsJCW1lbWNweShydGhkciAmIzQzOyBvZmYsICZhbXA7dHNfbGUsIHNpemVvZih0c19sZSkpOwomIzQzOwkJb2ZmICYjNDM7PSBzaXplb2YodHNfbGUpOwogCi0JCQlhY2NfbGUgPSBjcHVfdG9fbGUxNihhY2N1cmFjeSk7Ci0JCQltZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCAmYW1wO2FjY19sZSwgc2l6ZW9mKGFjY19sZSkpOwotCQkJb2ZmICYjNDM7PSBzaXplb2YoYWNjX2xlKTsKLQkJCXJ0aGRyW29mZiYjNDM7JiM0MztdID0gKGV4dC50aW1lc3RhbXAudW5pdCAmYW1wOyAweDBmKSB8Ci0JCQkJCSgoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiAmYW1wOyAweDBmKSAmbHQ7Jmx0OyA0KTsKLQkJCXJ0aGRyW29mZiYjNDM7JiM0MztdID0gZmxhZ3M7CiYjNDM7CQlpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyAmYW1wOyAweDAyKSB7CiYjNDM7CQkJYWNjdXJhY3kgPSBleHQudGltZXN0YW1wLmFjY3VyYWN5OwomIzQzOwkJCWZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR19BQ0NVUkFDWTsKIAkJfQomIzQzOwomIzQzOwkJYWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpOwomIzQzOwkJbWVtY3B5KHJ0aGRyICYjNDM7IG9mZiwgJmFtcDthY2NfbGUsIHNpemVvZihhY2NfbGUpKTsKJiM0MzsJCW9mZiAmIzQzOz0gc2l6ZW9mKGFjY19sZSk7CiYjNDM7CQlydGhkcltvZmYmIzQzOyYjNDM7XSA9IChleHQudGltZXN0YW1wLnVuaXQgJmFtcDsgMHgwZikgfAomIzQzOwkJCQkoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gJmFtcDsgMHgwZikgJmx0OyZsdDsgNCk7CiYjNDM7CQlydGhkcltvZmYmIzQzOyYjNDM7XSA9IGZsYWdzOwogCX0KIAogCWlmIChmb3JtYXQgPT0gTlhQV0lGSV9SQVRFX0ZPUk1BVF9IRSAmYW1wOyZhbXA7IGhhc19leHQpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG54cHdpZmkgRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIGBueHB3aWZpYCBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBtb3N0bHkgcmVmaW5lbWVudHMsIHRvdWNoaW5nIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgZHJpdmVyLgoKRmlyc3QsIGluIGAxMWF4LmNgLCB0aGUgYG54cHdpZmlfaXNfMTFheF90d3Rfc3VwcG9ydGVkYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYSBudWxsIGBic3NfZGVzY2AsIHdoaWNoIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLgoKVGhlbiwgYDExbi5jYCBzZWVzIGEgbWlub3IgY2hhbmdlIGluIGBueHB3aWZpXzExbl9kZWxldGVfdHhfYmFfc3RyZWFtX3RibF9lbnRyeWAsIHdpdGggdGhlIGNvbmRpdGlvbiBjaGVjayBmb3IgYHRibGAgdXBkYXRlZC4gVGhlIGBueHB3aWZpX2RlbF90eF9iYV9zdHJlYW1fdGJsX2J5X3JhYCBmdW5jdGlvbiBpcyBhbHNvIHVwZGF0ZWQgd2l0aCBhIHNhZmVyIGxpc3QgaXRlcmF0aW9uIG1ldGhvZC4KCk1vdmluZyBvbiB0byBgY2ZnODAyMTEuY2AsIGBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zYCBoYXMgYmVlbiBtb2RpZmllZCBzbyB0aGF0IGBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bWAgbm93IHByb3Blcmx5IHJldHVybnMgYW4gZXJyb3IgY29kZSBhbmQgYWNjZXB0cyBhIHBvaW50ZXIgZm9yIGBic3NfbnVtYC4gVGhlIGRlYWQgY29kZSBpbiBgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmYCBzZWVtcyB0byBoYXZlIGJlZW4gcmVtb3ZlZC4KCmBtYWluLmNgIGFuZCBgdWFwX3R4cnguY2AgYXJlIGp1c3QgZ2V0dGluZyBzb21lIGluZGVudGF0aW9uIGZpeGVzLCBub3RoaW5nIG1ham9yIHRoZXJlLgoKVGhlIGNoYW5nZXMgaW4gYG1haW4uaGAgaW5jbHVkZSB1cGRhdGluZyB0aGUgcmV0dXJuIHR5cGUgYW5kIHBhcmFtZXRlciBvZiBgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW1gIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGBueHB3aWZpX2dldF91bnVzZWRfcHJpdl9ieV9ic3NfdHlwZWAgcHJvcGVybHkgaGFuZGxlcyBlcnJvciBoYW5kbGluZy4KCmBzZGlvLmNgIGhhcyBhIHNtYWxsIGNoYW5nZSBpbiBgbnhwd2lmaV9wcm9jZXNzX2ludF9zdGF0dXNgLCBjaGFuZ2luZyBhIGRpcmVjdCBgcmV0dXJuYCB0byBhIGBnb3RvYCBmb3IgY2xlYXJlciBlcnJvciBoYW5kbGluZy4KCkZpbmFsbHksIGluIGB1dGlsLmNgLCB0aGUgYG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWZgIGZ1bmN0aW9uIHJlbW92ZXMgYW4gdW5uZWNlc3NhcnkgdGltZXN0YW1wIGNoZWNrLCB3aGljaCBwcm9iYWJseSBvcHRpbWl6ZXMgcGVyZm9ybWFuY2UuCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIHNldmVyYWwgbWlub3IgaW1wcm92ZW1lbnRzIHRvIGVycm9yIGhhbmRsaW5nLCBjb2RlIGNsYXJpdHksIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6YXRpb24uCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uIElzIHRoaXMgYG54cHdpZmlgIGRyaXZlciBldmVuIHBhcnQgb2YgdGhlIG1haW5saW5lIGtlcm5lbD8gSSYjMzk7bGwgcXVpY2tseSB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IG1ha2luZyBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IG51bGwsCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7bnhwd2lmaSYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG54cHdpZmlgKioKCkFscmlnaHQsIHNvIGBueHB3aWZpYC4uLiBpdCBleGlzdHMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGh1cmRsZSwgYW5kIGEgZ29vZCBzdGFydC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZmlsZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgcHJlc2VudC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBXaXRob3V0IGxvb2tpbmcgYXQgdGhlIGZpbGVzLCBJIGNhbiYjMzk7dCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgdXRpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDsxMWFjLmMmIzM0OywKICAgICYjMzQ7MTFhYy5oJiMzNDssCiAgICAmIzM0OzExYXguYyYjMzQ7LAogICAgJiMzNDsxMWF4LmgmIzM0OywKICAgICYjMzQ7MTFoLmMmIzM0OywKICAgICYjMzQ7MTFuLmMmIzM0OywKICAgICYjMzQ7MTFuLmgmIzM0OywKICAgICYjMzQ7MTFuX2FnZ3IuYyYjMzQ7LAogICAgJiMzNDsxMW5fYWdnci5oJiMzNDssCiAgICAmIzM0OzExbl9yeHJlb3JkZXIuYyYjMzQ7LAogICAgJiMzNDsxMW5fcnhyZW9yZGVyLmgmIzM0OywKICAgICYjMzQ7Y2ZnLmgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTEuYyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMS5oJiMzNDssCiAgICAmIzM0O2NmcC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5oJiMzNDssCiAgICAmIzM0O2RlYnVnZnMuYyYjMzQ7LAogICAgJiMzNDtldGh0b29sLmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpZS5jJiMzNDssCiAgICAmIzM0O2luaXQuYyYjMzQ7LAogICAgJiMzNDtqb2luLmMmIzM0OywKICAgICYjMzQ7bWFpbi5jJiMzNDssCiAgICAmIzM0O21haW4uaCYjMzQ7LAogICAgJiMzNDtzY2FuLmMmIzM0OywKICAgICYjMzQ7c2Rpby5jJiMzNDssCiAgICAmIzM0O3NkaW8uaCYjMzQ7LAogICAgJiMzNDtzdGFfY2ZnLmMmIzM0OywKICAgICYjMzQ7c3RhX2NtZC5jJiMzNDssCiAgICAmIzM0O3N0YV9ldmVudC5jJiMzNDssCiAgICAmIzM0O3N0YV9yeC5jJiMzNDssCiAgICAmIzM0O3N0YV90eC5jJiMzNDssCiAgICAmIzM0O3R4cnguYyYjMzQ7LAogICAgJiMzNDt1YXBfY21kLmMmIzM0OywKICAgICYjMzQ7dWFwX2V2ZW50LmMmIzM0OywKICAgICYjMzQ7dWFwX3R4cnguYyYjMzQ7LAogICAgJiMzNDt1dGlsLmMmIzM0OywKICAgICYjMzQ7dXRpbC5oJiMzNDssCiAgICAmIzM0O3dtbS5jJiMzNDssCiAgICAmIzM0O3dtbS5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkNoZWNraW5nIERyaXZlciBSZWFjaGFiaWxpdHkgaW4gUUVNVSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcnVjaWFsLiBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbiBTRElPIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBzZGlvLmNgLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcC4gTGV0IG1lIGNyb3NzLXJlZmVyZW5jZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYG54cHdpZmlgIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIHdoZXRoZXIgdGhpcyBkcml2ZXIgY2FuIGV2ZW4gKmJlKiBwYXJ0IG9mIHRoZSBidWlsZCBpbiB0aGlzIGVtdWxhdGVkIGVudmlyb25tZW50LiBUaGlzIHdpbGwgc2F2ZSBtZSBhIGxvdCBvZiB3YXN0ZWQgdGltZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlhQV0lGSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnOjI6Y29uZmlnIE5YUFdJRklcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05YUCBXaUZpIERyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnOjEyOmNvbmZpZyBOWFBXSUZJX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBOWFBXSUZJX1NESU8qKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5YUFdJRklfU0RJT2AuIFJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeWluZyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHRyb3VibGVzaG9vdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGNvbXBvbmVudHMgYE5YUFdJRklfU0RJT2AgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBjb3VsZCBpbnZvbHZlIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpYyBkcml2ZXJzLCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBtYXliZSBldmVuIGZpcm13YXJlLiBLbm93aW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgd2lsbCBiZSBjcml0aWNhbC4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHBpY3R1cmUgZm9yIHRoaXMgd2lyZWxlc3MgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlhQV0lGSVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlhQIFdpRmkgRHJpdmVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBOWFBcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbnhwd2lmaS5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTlhQV0lGSV9TRElPXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XCYjMzQ7XG4gIDE0Olx0XHRkZXBlbmRzIG9uIE5YUFdJRkkgXHUwMDI2XHUwMDI2IE1NQ1xuICAxNTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAxNjpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBOWFBcbiAgMTk6XHRcdCAgSVc2MXggaW50ZXJmYWNlLlxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxuICAyMjpcdFx0ICBueHB3aWZpX3NkaW8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4KioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBoaW5nZXMgb24gYE1NQ2AuIElzIHRoaXMgYSBwaHlzaWNhbCBkcml2ZXIgZm9yIGEgaGFyZHdhcmUgY29tcG9uZW50PyBTcGVjaWZpY2FsbHksIHRoaXMgJiMzNDtOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4JiMzNDsgaXMgY29ubmVjdGVkIHZpYSBTRElPLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBTRElPIGlzIHR5cGljYWxseSBwaHlzaWNhbCBoYXJkd2FyZS4gQ2FuIFNESU8gZGV2aWNlcyBldmVuIGJlIGVtdWxhdGVkIGluIFFFTVU/IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyBub3Qgc3RhbmRhcmQuCgpMZXQmIzM5O3Mgc2Vl4oCmIGRvZXMgU3l6a2FsbGVyIHVzdWFsbHkgZnV6eiBTRElPIGhhcmR3YXJlIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciBpdCB0YXJnZXRzIHNvbWUgZ2VuZXJpYyBzdWJzeXN0ZW0/IFdhaXQsIGRpZCBTeXprYWxsZXIgcGljayB1cCBhbnkgc3VwcG9ydCBmb3IgU0RJTyBmdXp6aW5nIHJlY2VudGx5PyBOb3BlLCBubyBTRElPIGVtdWxhdGlvbiBpbiBTeXprYWxsZXIuCgpIb2xkIG9uLCBjb3VsZCBJIHJlYWNoIHRoaXMgZHJpdmVyIHZpYSBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhhdCYjMzk7cyBhIHNvZnR3YXJlIHNpbXVsYXRvciBmb3IgYG1hYzgwMjExYC4gVGhpcyBpcyBhIGZ1bGxtYWMgZHJpdmVyIHVzaW5nIGBDRkc4MDIxMWAgZGlyZWN0bHksIHNvIGl0IHJlZ2lzdGVycyB3aXRoIGBjZmc4MDIxMWAuIEJ1dCB0byBnZXQgcmVnaXN0ZXJlZCB3aXRoIGBjZmc4MDIxMWAsIHRoZSBkcml2ZXIgbmVlZHMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgYmVjYXVzZSBpdCYjMzk7cyBhbiBTRElPIGRyaXZlciwgaXQgbmVlZHMgYW4gU0RJTyBkZXZpY2UgZm9yIHRoZSBwcm9iZS4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFsdGVybmF0ZSBpbnRlcmZhY2VzIGxpa2UgVVNCIG9yIFBDSWUgYXZhaWxhYmxlLiBUaGUgS2NvbmZpZyBvbmx5IG1lbnRpb25zIGBOWFBXSUZJX1NESU9gLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSYjMzk7cyBhIFVTQiBvciBQQ0kgZHJpdmVyIGZsb2F0aW5nIGFyb3VuZCBzb21ld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYz0xNjYwPW54cHdpZmlfY2xlYW51cF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMtMTY2Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYzoxNjY3Om1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jLTE2NjgtbW9kdWxlX2V4aXQobnhwd2lmaV9jbGVhbnVwX21vZHVsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhpcyBkb21haW46CgoqKkFuYWx5emluZyBgbnhwd2lmaV9pbml0X21vZHVsZWAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbnhwd2lmaV9pbml0X21vZHVsZWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGlzIGRvaW5nLCBob3cgaXQgaW5pdGlhbGl6ZXMsIGFuZCB3aGF0IGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSBzeXN0ZW0gaXMuIElzIGl0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGZvcm1pbmcgaHlwb3RoZXNlcyDigJMgd2hhdCBrZXkgZnVuY3Rpb25zIHdpbGwgaXQgbGlrZWx5IGNhbGw/IFdoYXQgcmVzb3VyY2VzIGlzIGl0IHByb2JhYmx5IG1hbmFnaW5nPyBUaGlzIGlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLCB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGRlZXBseSB1bmRlcnN0YW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjQwOlx0XHRcdGRldl9pbmZvKGFkYXB0ZXItXHUwMDNlZGV2LCBcJiMzNDslcFZcJiMzNDssIFx1MDAyNnZhZik7XG4xNjQxOlx0XHRlbHNlXG4xNjQyOlx0XHRcdHByX2luZm8oXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuMTY0MzpcdFxuMTY0NDpcdFx0dmFfZW5kKGFyZ3MpO1xuMTY0NTpcdH1cbjE2NDY6XHRFWFBPUlRfU1lNQk9MX0dQTChfbnhwd2lmaV9kYmcpO1xuMTY0NzpcdFxuMTY0ODpcdC8qIE1vZHVsZSBpbml0OiBpbml0IGRlYnVnZnMgaWYgZW5hYmxlZC4gKi9cbjE2NDk6XHRzdGF0aWMgaW50XG4xNjUwOlx0bnhwd2lmaV9pbml0X21vZHVsZSh2b2lkKVxuMTY1MTpcdHtcbjE2NTI6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG4xNjUzOlx0XHRueHB3aWZpX2RlYnVnZnNfaW5pdCgpO1xuMTY1NDpcdCNlbmRpZlxuMTY1NTpcdFx0cmV0dXJuIDA7XG4xNjU2Olx0fVxuMTY1NzpcdFxuMTY1ODpcdC8qIE1vZHVsZSBleGl0OiByZW1vdmUgZGVidWdmcyBpZiBlbmFibGVkLiAqL1xuMTY1OTpcdHN0YXRpYyB2b2lkXG4xNjYwOlx0bnhwd2lmaV9jbGVhbnVwX21vZHVsZSh2b2lkKVxuMTY2MTpcdHtcbjE2NjI6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG4xNjYzOlx0XHRueHB3aWZpX2RlYnVnZnNfcmVtb3ZlKCk7XG4xNjY0Olx0I2VuZGlmXG4xNjY1Olx0fVxuMTY2NjpcdFxuMTY2NzpcdG1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xuMTY2ODpcdG1vZHVsZV9leGl0KG54cHdpZmlfY2xlYW51cF9tb2R1bGUpO1xuMTY2OTpcdFxuMTY3MDpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7TlhQIEludGVybmF0aW9uYWwgTHRkLlwmIzM0Oyk7XG4xNjcxOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O05YUCBXaUZpIERyaXZlciB2ZXJzaW9uIFwmIzM0OyBWRVJTSU9OKTtcbjE2NzI6XHRNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTtcbjE2NzM6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi4KCioqRHJpdmVyIEluaXRpYWxpemF0aW9uIEh1bnQqKgoKSG1tLCBzbyBgbnhwd2lmaV9pbml0X21vZHVsZWAgcHJpbWFyaWx5IHNldHMgdXAgZGVidWdmcywgcmlnaHQ/IFRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB3aGVyZSB0aGUgY29yZSBkcml2ZXIgcmVnaXN0cmF0aW9uIGhhcHBlbnMuIFRoYXQmIzM5O3MgYSBiaXQgdG9vIHNpbXBsZSBmb3IgdGhlIG1haW4gZHJpdmVyIGVudHJ5IHBvaW50LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGVyZSYjMzk7cyB0aGUgYG1vZHVsZV9pbml0YCBmb3IgdGhlICpyZWFsKiBkcml2ZXI/IE15IGd1dCBzYXlzIGl0JiMzOTtzIGluIGEgZmlsZSByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGludGVyZmFjZS4gU2luY2UgdGhpcyBpcyBXaS1GaSwgYW5kIHRoZSBtb2R1bGUgbmFtZSBzdWdnZXN0cyBTRElPLCBgc2Rpby5jYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rLiBJdCBsaWtlbHkgaGFzIGl0cyBvd24gYG1vZHVsZV9pbml0YCB0aGF0IGNvbm5lY3RzIHRoZSBkb3RzIGJldHdlZW4gdGhlIFNESU8gaW50ZXJmYWNlIGFuZCB0aGUgV2ktRmkgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgYmV0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBkcml2ZXIgcmVnaXN0cmF0aW9uLCBwcm9iZSwgYW5kIGV2ZXJ5dGhpbmcgaGFwcGVucy4gVGltZSB0byBjb25maXJtIGFuZCBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFNESU8gZHJpdmVyIGlzIHJlZ2lzdGVyZWQsIGFuZCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgc2Rpby5jYC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIFNESU8tc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIGBzZGlvX3JlZ2lzdGVyX2RyaXZlcmAgZnVuY3Rpb24sIGFzIHRoYXQmIzM5O3MgY2xlYXJseSB0aGUga2V5IGZ1bmN0aW9uIGZvciB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGFuZCBhdHRhY2htZW50IHRvIHRoZSBTRElPIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGRyaXZlciBzdHJ1Y3R1cmUgaXMgcGFzc2VkLCB3aGF0IHRoZSBkZXZpY2UgbWF0Y2hpbmcgcHJvY2VzcyBsb29rcyBsaWtlLCBhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIG1hbmFnZWQgYXQgdGhpcyBzdGFnZS4gSSBleHBlY3QgdG8gZmluZCBpbmZvcm1hdGlvbiBvbiBwcm9iZSBhbmQgcmVtb3ZlIGZ1bmN0aW9ucyBoZXJlLCBhbmQgaWRlYWxseSwgaG9va3MgZm9yIGludGVycnVwdCBoYW5kbGluZyBhcyB3ZWxsLiBGaW5kaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBpbnRvIHRoZSBkcml2ZXImIzM5O3MgbGlmZWN5Y2xlIGFuZCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Rpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKioKCkhtbSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgU0RJTyBkcml2ZXIgaXMgZ2V0dGluZyByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLCByaWdodD8gQWxyaWdodCwgbGV0JiMzOTtzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2Ug4oCTIG5vIG5lZWQgdG8gYmVhdCBhcm91bmQgdGhlIGJ1c2guIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgc2Rpby5jYCBmaWxlLiBUaGUgZmFzdGVzdCB3YXkgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBpcyB0byBsb29rIGZvciB0aGUga2V5IGZ1bmN0aW9uczogSSYjMzk7bSBsb29raW5nIGZvciBlaXRoZXIgYSBgbW9kdWxlX2luaXRgIG1hY3JvLCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gc2V0IHVwIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsLCBvciBhIGRpcmVjdCBjYWxsIHRvIGEgYHJlZ2lzdGVyYCBmdW5jdGlvbi4gSSBleHBlY3Qgb25lIG9mIHRob3NlIGlzIGdvaW5nIHRvIHRlbGwgbWUgZXhhY3RseSBob3cgYW5kIHdoZW4gdGhpcyB0aGluZyBpcyBob29rZWQgaW50byB0aGUgc3lzdGVtLiBJdCBzaG91bGQgYmUgcHJldHR5IG9idmlvdXMsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHRyYWNlIHRoZSBjYWxsIGZsb3cgaWYgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9NTEwPXN0YXRpYyBpbnQgbnhwd2lmaV9pbml0X3NkaW9fbmV3X21vZGUoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjUyNzpcdC8qIENvbmZpZ3VyZSBjbWQgcG9ydCBhbmQgZW5hYmxlIHJlYWRpbmcgcnggbGVuZ3RoIGZyb20gdGhlIHJlZ2lzdGVyICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI4LVx0cmV0ID0gbnhwd2lmaV9yZWFkX3JlZyhhZGFwdGVyLCBjYXJkLVx1MDAzZXJlZy1cdTAwM2VjbWRfY2ZnXzAsIFx1MDAyNnJlZyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTczMD1zdGF0aWMgaW50IG54cHdpZmlfc2Rpb19lbmFibGVfaG9zdF9pbnQoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNzQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjc0NTpcdC8qIFNpbXBseSB3cml0ZSB0aGUgbWFzayB0byB0aGUgcmVnaXN0ZXIgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy03NDYtXHRyZXQgPSBueHB3aWZpX3dyaXRlX3JlZ19sb2NrZWQoZnVuYywgY2FyZC1cdTAwM2VyZWctXHUwMDNlaG9zdF9pbnRfbWFza19yZWcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTc5Mj1zdGF0aWMgaW50IG54cHdpZmlfcHJvZ19md193X2hlbHBlcihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NDMtXHRcdFx0XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzo4NDQ6XHRcdFx0XHRcdCAgICBcJiMzNDtkZXYgQkFTRTAgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6XFx0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtODQ1LVx0XHRcdFx0XHQgICAgXCYjMzQ7YmFzZTA9JSMwNFgoJWQpLiBUZXJtaW5hdGluZyBkbmxkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NTItXHRcdFx0XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzo4NTM6XHRcdFx0XHRcdCAgICBcJiMzNDtkZXYgQkFTRTEgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6XFx0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtODU0LVx0XHRcdFx0XHQgICAgXCYjMzQ7YmFzZTE9JSMwNFgoJWQpLiBUZXJtaW5hdGluZyBkbmxkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYz0xNjI1PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTYyNjpueHB3aWZpX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYyNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2MzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTYzODpzdGF0aWMgaW50IG54cHdpZmlfcmVnaXN0ZXJfZGV2KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYzOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTE2ODM9c3RhdGljIGludCBueHB3aWZpX2luaXRfc2RpbyhzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0xNjk0LVx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJiMzOTt0IGRvIHRoaXMgd2UgZ2V0IGEgaW50ZXJydXB0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTY5NTpcdCAqIGFzIHNvb24gYXMgd2UgcmVnaXN0ZXIgdGhlIGlycS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0xNjk2LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIxNTY9c3RhdGljIHZvaWQgbnhwd2lmaV9zZGlvX2RldmljZV9kdW1wKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjE2NTovKiBEdW1wIFNESU8gZnVuY3Rpb24gYW5kIHNjcmF0Y2ggcmVnaXN0ZXJzIGludG8gZHJ2X2J1Zi4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTY2LXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYz0yMTY3PW54cHdpZmlfc2Rpb19yZWdfZHVtcChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCBjaGFyICpkcnZfYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIxNzk6XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBNU0csIFwmIzM0O1NESU8gcmVnaXN0ZXIgZHVtcCBzdGFydFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE4MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE5MC1cdFx0Y2FzZSAwOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIxOTE6XHRcdFx0LyogUmVhZCB0aGUgcmVnaXN0ZXJzIG9mIFNESU8gZnVuY3Rpb24wICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE5Mi1cdFx0XHRmdW5jID0gY291bnQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTYtXHRcdGNhc2UgMTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTk3Olx0XHRcdC8qIFJlYWQgdGhlIHJlZ2lzdGVycyBvZiBTRElPIGZ1bmN0aW9uMSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTgtXHRcdFx0ZnVuYyA9IGNvdW50O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjA5LVx0XHRkZWZhdWx0OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIyMTA6XHRcdFx0LyogUmVhZCB0aGUgc2NyYXRjaCByZWdpc3RlcnMgb2YgU0RJTyBmdW5jdGlvbjEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjExLVx0XHRcdGlmIChjb3VudCA9PSA0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIyNTM6XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBNU0csIFwmIzM0O1NESU8gcmVnaXN0ZXIgZHVtcCBlbmRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyNTQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIyNTg9c3RhdGljIHZvaWQgbnhwd2lmaV9zZGlvX3VwX2RldihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjg1LVx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJiMzOTt0IGRvIHRoaXMgd2UgZ2V0IGEgaW50ZXJydXB0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjI4NjpcdCAqIGFzIHNvb24gYXMgd2UgcmVnaXN0ZXIgdGhlIGlycS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjg3LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIyOTQ9c3RhdGljIHN0cnVjdCBueHB3aWZpX2lmX29wcyBzZGlvX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjI5OS1cdC5wcm9nX2Z3ID0gbnhwd2lmaV9wcm9nX2Z3X3dfaGVscGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIzMDA6XHQucmVnaXN0ZXJfZGV2ID0gbnhwd2lmaV9yZWdpc3Rlcl9kZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjMwMTpcdC51bnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfdW5yZWdpc3Rlcl9kZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjMwMi1cdC5lbmFibGVfaW50ID0gbnhwd2lmaV9zZGlvX2VuYWJsZV9ob3N0X2ludCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFNESU8gRHJpdmVyIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU0RJTyBzaXR1YXRpb24gYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgZXNzZW50aWFsIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gSSBzZWUgYHNkaW9fb3BzYCBpbiB0aGUgbWl4LCBhbmQgaXQgaGFzIGByZWdpc3Rlcl9kZXZgIGFuZCBgdW5yZWdpc3Rlcl9kZXZgIG1ldGhvZHMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHVuZGVyc3RhbmQgdGhhdCBhbnkgZHJpdmVyIHJlZ2lzdGVyaW5nIHdpdGggU0RJTyBpcyBsaWtlbHkgdXRpbGl6aW5nIHRoZXNlLgoKTm93LCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXRzZWxmLCB0aGVuIEkgc2hvdWxkIGludmVzdGlnYXRlIGBzZGlvLmNgLiBLbm93aW5nIGhvdyB0aGUgU0RJTyBmcmFtZXdvcmsgd29ya3MsIG15IG5leHQgbW92ZSB3b3VsZCBiZSB0byBsb29rIGZvciBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBjZW50cmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGhvdyBhIG5ldyBTRElPIGRyaXZlciBnZXRzIGludGVncmF0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIGhhcHBlbmluZyB0aGVyZS4gQW5kIGxpa2VseSB1bnJlZ2lzdHJhdGlvbiB0aGVyZSBhcyB3ZWxsLCBidXQgYHVucmVnaXN0ZXJfZGV2YCBvZiBgc2Rpb19vcHNgIG1heSBiZSB0aGUgY29yZSBvZiB0aGF0IHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Rpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFNESU8gRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgKmhvdyogdGhpcyBTRElPIGRyaXZlciBpcyBiZWluZyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGNoZWNrIHRoZSBlbmQgb2YgdGhlIGBzZGlvLmNgIHNvdXJjZSBmaWxlLiBPZnRlbiwgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gcm91dGluZXMgYXJlIHBsYWNlZCB0aGVyZSwgbG9naWNhbGx5IHR5aW5nIHRoZSBmaWxlJiMzOTtzIHByaW1hcnkgZnVuY3Rpb25hbGl0eSB0byB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gZGlnZ2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBzZGlvLmNgJiMzOTtzIHRhaWwgaGFzIHRvIHRlbGwgdXMuIEkmIzM5O2xsIGJldCBpdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMDA6XHRcdC5yZWdpc3Rlcl9kZXYgPSBueHB3aWZpX3JlZ2lzdGVyX2RldixcbjIzMDE6XHRcdC51bnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfdW5yZWdpc3Rlcl9kZXYsXG4yMzAyOlx0XHQuZW5hYmxlX2ludCA9IG54cHdpZmlfc2Rpb19lbmFibGVfaG9zdF9pbnQsXG4yMzAzOlx0XHQuZGlzYWJsZV9pbnQgPSBueHB3aWZpX3NkaW9fZGlzYWJsZV9ob3N0X2ludCxcbjIzMDQ6XHRcdC5wcm9jZXNzX2ludF9zdGF0dXMgPSBueHB3aWZpX3Byb2Nlc3NfaW50X3N0YXR1cyxcbjIzMDU6XHRcdC5ob3N0X3RvX2NhcmQgPSBueHB3aWZpX3NkaW9faG9zdF90b19jYXJkLFxuMjMwNjpcdFx0Lndha2V1cCA9IG54cHdpZmlfcG1fd2FrZXVwX2NhcmQsXG4yMzA3Olx0XHQud2FrZXVwX2NvbXBsZXRlID0gbnhwd2lmaV9wbV93YWtldXBfY2FyZF9jb21wbGV0ZSxcbjIzMDg6XHRcbjIzMDk6XHRcdC8qIFNESU8gc3BlY2lmaWMgKi9cbjIzMTA6XHRcdC51cGRhdGVfbXBfZW5kX3BvcnQgPSBueHB3aWZpX3VwZGF0ZV9tcF9lbmRfcG9ydCxcbjIzMTE6XHRcdC5jbGVhbnVwX21wYV9idWYgPSBueHB3aWZpX2NsZWFudXBfbXBhX2J1ZixcbjIzMTI6XHRcdC5jbWRyc3BfY29tcGxldGUgPSBueHB3aWZpX3NkaW9fY21kcnNwX2NvbXBsZXRlLFxuMjMxMzpcdFx0LmV2ZW50X2NvbXBsZXRlID0gbnhwd2lmaV9zZGlvX2V2ZW50X2NvbXBsZXRlLFxuMjMxNDpcdFx0LmRubGRfZncgPSBueHB3aWZpX3NkaW9fZG5sZF9mdyxcbjIzMTU6XHRcdC5jYXJkX3Jlc2V0ID0gbnhwd2lmaV9zZGlvX2NhcmRfcmVzZXQsXG4yMzE2Olx0XHQucmVnX2R1bXAgPSBueHB3aWZpX3NkaW9fcmVnX2R1bXAsXG4yMzE3Olx0XHQuZGV2aWNlX2R1bXAgPSBueHB3aWZpX3NkaW9fZGV2aWNlX2R1bXAsXG4yMzE4Olx0XHQuZGVhZ2dyX3BrdCA9IG54cHdpZmlfZGVhZ2dyX3NkaW9fcGt0LFxuMjMxOTpcdFx0LnVwX2RldiA9IG54cHdpZmlfc2Rpb191cF9kZXYsXG4yMzIwOlx0fTtcbjIzMjE6XHRcbjIzMjI6XHRtb2R1bGVfc2Rpb19kcml2ZXIobnhwd2lmaV9zZGlvKTtcbjIzMjM6XHRcbjIzMjQ6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O05YUCBJbnRlcm5hdGlvbmFsIEx0ZC5cJiMzNDspO1xuMjMyNTpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOWFAgV2lGaSBTRElPIERyaXZlciB2ZXJzaW9uIFwmIzM0OyBTRElPX1ZFUlNJT04pO1xuMjMyNjpcdE1PRFVMRV9WRVJTSU9OKFNESU9fVkVSU0lPTik7XG4yMzI3Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbjIzMjg6XHRNT0RVTEVfRklSTVdBUkUoSVc2MVhfU0RJT19GV19OQU1FKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0RJTyBEcml2ZXIgQW5hbHlzaXMqKgoKT2theSwgc28gSSBzZWUgdGhpcyBgbW9kdWxlX3NkaW9fZHJpdmVyKG54cHdpZmlfc2Rpbyk7YCBjYWxsLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGNvZGUgcmVnaXN0ZXJzIGFuIFNESU8gZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiAqZnV6eiogU0RJTyBkcml2ZXJzPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsb29rZWQgY2xvc2VseSBhdCBpdHMgY2FwYWJpbGl0aWVzLiBOb3csIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgc3l6a2FsbGVyIGhhcyBhIGdvb2QgVVNCIGVtdWxhdGlvbiB1c2luZyBgZHVtbXlfaGNkYCwgYW5kIGl0IGhhcyBzb21lIGxpbWl0ZWQgUENJIHN1cHBvcnQsIHRob3VnaCB1c3VhbGx5IG5vdCB0YXJnZXRlZCBhdCBzcGVjaWZpYyBkZXZpY2VzLiBCdXQgSSBkb24mIzM5O3QgdGhpbmsgaXQgaGFzIHByb3BlciBTRElPIGVtdWxhdGlvbiDigJMgaW4gZmFjdCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCAqZG9lc24mIzM5O3QqLiBTbywgdGhhdCBwYXRoIGxvb2tzIGJsb2NrZWQuCgpIb2xkIG9uLCBiZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJiMzOTt0IGluc3RhbnRpYXRlZCB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIElzIHRoZXJlICphbnkqIGNoYW5jZSB0aGF0IHRoaXMgYG54cHdpZmlgIGRldmljZSBpcyBzb21laG93IGFsc28gc3VwcG9ydGVkIHRocm91Z2ggYSBQQ0kgb3IgVVNCIGludGVyZmFjZT8gVGhhdCYjMzk7cyB0aGUgb25seSBvdGhlciB3YXkgSSBjYW4gdGhpbmsgb2YgdGhhdCBtaWdodCBvZmZlciBhIHN5emthbGxlciBlbnRyeXBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV91c2JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRElPIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgYW5kIGl0JiMzOTtzIGNvbmZpcm1lZCwgaXQmIzM5O3MganVzdCBhbiBTRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gU0RJTyBkZXZpY2VzIGJlIGZ1enplZCBlZmZlY3RpdmVseT8gSSYjMzk7bSBpbW1lZGlhdGVseSByZW1pbmRlZCBvZiB0aGUgZGlmZmljdWx0aWVzIGluIGZ1enppbmcgZHJpdmVycyB0aGF0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMsIG9yIFNtYXJ0TklDcywgb3IgR1BVcy4gVGhvc2UgdXN1YWxseSByZXF1aXJlIGFjdHVhbCBQQ0llIGNhcmRzLCB3aGljaCBRRU1VIGRvZXNuJiMzOTt0IGZ1bGx5IGVtdWxhdGUuIFRoZSBzYW1lIHdvdWxkIGFwcGx5IHRvIFNESU8sIHdoaWNoIGFsc28gZGVtYW5kcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkb3VibGUtY2hlY2sgaWYgUUVNVSBldmVuIHByb3ZpZGVzIGFueSBTRElPIGVtdWxhdGlvbiB0aGF0IHN5emthbGxlciBjb3VsZCBsZXZlcmFnZS4KCkkga25vdyBRRU1VICpkb2VzKiBoYXZlIFNEIGNhcmQgZW11bGF0aW9uLCBidXQgU0RJTyBpcyBkaXN0aW5jdC4gRXZlbiBpZiB0aGVyZSYjMzk7cyBzb21lIFNESU8gc3VwcG9ydCwgSSBkb3VidCBzeXprYWxsZXIgaGFzIGEgbWVjaGFuaXNtIHRvIGluamVjdCBTRElPIGRldmljZXMgYW5kIGZ1enogdGhlbSBsaWtlIGl0IGRvZXMgd2l0aCBVU0IgdXNpbmcgcmF3LWdhZGdldCBvciBkdW1teV9oY2QuCgpOb3csIGEgcG9zc2liaWxpdHkgcG9wcyBpbnRvIG15IGhlYWQuIENvdWxkIHRoaXMgZHJpdmVyIGJlIGFjY2Vzc2VkIHZpYSBgbWFjODAyMTFfaHdzaW1gPyBCdXQgbm8sIGBtYWM4MDIxMV9od3NpbWAgaXMgYSBzb2Z0d2FyZSBzaW11bGF0b3IgZm9yIGBtYWM4MDIxMWAsIGFuZCB0aGlzIGRyaXZlciB1dGlsaXplcyBgQ0ZHODAyMTFgIGRpcmVjdGx5LCBzbyBpdCYjMzk7cyBhICYjMzQ7ZnVsbG1hYyYjMzQ7IGRyaXZlci4gSXQgcmVnaXN0ZXJzIGRpcmVjdGx5IHdpdGggY2ZnODAyMTEuIEJ1dCB0aGF0IHJlcXVpcmVzIGl0IHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBmaXJzdC4gQW5kIGJlaW5nIGFuIFNESU8gZHJpdmVyLCBwcm9iaW5nIHJlcXVpcmVzIGFuIFNESU8gZGV2aWNlLgoKSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGludGVyZmFjZXMgSSBtaWdodCBoYXZlIG1pc3NlZCAoVVNCLCBQQ0llKS4gVGhlIEtjb25maWcgb25seSBtZW50aW9ucyBgTlhQV0lGSV9TRElPYC4gUmlnaHQuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIFBDSSBvciBVU0IgZHJpdmVycywganVzdCB0byBiZSB0aG9yb3VnaC4gV2FpdCwgSSBhbHJlYWR5IGNoZWNrZWQgZm9yIFBDSSBhbmQgVVNCIGRyaXZlcnMgdXNpbmcgYG1vZHVsZV9wY2lfZHJpdmVyYCBhbmQgYG1vZHVsZV91c2JfZHJpdmVyYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIHRoZSBvdGhlciBmaWxlcyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDsxMWFjLmMmIzM0OywKICAgICYjMzQ7MTFhYy5oJiMzNDssCiAgICAmIzM0OzExYXguYyYjMzQ7LAogICAgJiMzNDsxMWF4LmgmIzM0OywKICAgICYjMzQ7MTFoLmMmIzM0OywKICAgICYjMzQ7MTFuLmMmIzM0OywKICAgICYjMzQ7MTFuLmgmIzM0OywKICAgICYjMzQ7MTFuX2FnZ3IuYyYjMzQ7LAogICAgJiMzNDsxMW5fYWdnci5oJiMzNDssCiAgICAmIzM0OzExbl9yeHJlb3JkZXIuYyYjMzQ7LAogICAgJiMzNDsxMW5fcnhyZW9yZGVyLmgmIzM0OywKICAgICYjMzQ7Y2ZnLmgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTEuYyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMS5oJiMzNDssCiAgICAmIzM0O2NmcC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5oJiMzNDssCiAgICAmIzM0O2RlYnVnZnMuYyYjMzQ7LAogICAgJiMzNDtldGh0b29sLmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpZS5jJiMzNDssCiAgICAmIzM0O2luaXQuYyYjMzQ7LAogICAgJiMzNDtqb2luLmMmIzM0OywKICAgICYjMzQ7bWFpbi5jJiMzNDssCiAgICAmIzM0O21haW4uaCYjMzQ7LAogICAgJiMzNDtzY2FuLmMmIzM0OywKICAgICYjMzQ7c2Rpby5jJiMzNDssCiAgICAmIzM0O3NkaW8uaCYjMzQ7LAogICAgJiMzNDtzdGFfY2ZnLmMmIzM0OywKICAgICYjMzQ7c3RhX2NtZC5jJiMzNDssCiAgICAmIzM0O3N0YV9ldmVudC5jJiMzNDssCiAgICAmIzM0O3N0YV9yeC5jJiMzNDssCiAgICAmIzM0O3N0YV90eC5jJiMzNDssCiAgICAmIzM0O3R4cnguYyYjMzQ7LAogICAgJiMzNDt1YXBfY21kLmMmIzM0OywKICAgICYjMzQ7dWFwX2V2ZW50LmMmIzM0OywKICAgICYjMzQ7dWFwX3R4cnguYyYjMzQ7LAogICAgJiMzNDt1dGlsLmMmIzM0OywKICAgICYjMzQ7dXRpbC5oJiMzNDssCiAgICAmIzM0O3dtbS5jJiMzNDssCiAgICAmIzM0O3dtbS5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTIKCQkJCQkJCW91dHB1dDogOTgKCQkJCQkJCXRob3VnaHRzOiA2MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgY29uY2x1c2lvbi4gRmlyc3Qgb2ZmLCB0aGUgZmlsZSBsaXN0IGltbWVkaWF0ZWx5IGNsdWVzIG1lIGluLiBUaGlzIHBhdGNoIGlzIHNvbGVseSB0b3VjaGluZyB0aGUgYHNkaW8uY2AgZmlsZSB3aXRoaW4gdGhlIE5YUCBXaS1GaSBkcml2ZXIsIGFuZCByZWxhdGVkIGZpbGVzLiBUaGVyZSYjMzk7cyBubyBtZW50aW9uIG9mIGFueSBnZW5lcmljIFVTQiwgUENJZSwgb3Igb3RoZXIgY29yZSBrZXJuZWwgY29tcG9uZW50cywganVzdCB0aGUgTlhQIHNwZWNpZmljIFNESU8gaW1wbGVtZW50YXRpb24uCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBkcml2ZXIgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIE5YUCBJVzYxeCBoYXJkd2FyZS4gIFRoaXMgaXNuJiMzOTt0IGFuIFNESU8gZ2VuZXJpYyBkcml2ZXI7IGl0JiMzOTtzIGEgKnZlbmRvci1zcGVjaWZpYyogZHJpdmVyLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoaXMga2luZCBvZiBoYXJkd2FyZSBwcm9wZXJseSwgd2hpY2ggbWVhbnMgdGhlIGNvZGUgcGF0aHMgd2l0aGluIHRoaXMgZHJpdmVyIGFyZSBzaW1wbHkgdW5yZWFjaGFibGUgaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHRoZSB2ZXJ5IGtpbmQgZnV6emluZyB3b3VsZCBiZSBkb25lIG9uLgoKSSBhbHNvIGRvdWJsZS1jaGVja2VkIHdpdGggbXkga25vd2xlZGdlIG9mIFN5emthbGxlciYjMzk7cyBjYXBhYmlsaXRpZXMuIEkga25vdyBpdCBjYW4gZnV6eiBVU0IgdmlhIGBkdW1teV9oY2RgLCBQQ0kgdG8gYSBsaW1pdGVkIGV4dGVudCwgYW5kIHZoY2kgZm9yIGJsdWV0b290aCwgYnV0IEkmIzM5O20gY2VydGFpbiB0aGVyZSYjMzk7cyBubyBrbm93biBzdXBwb3J0IGZvciBTRElPLiAgVGhlIGRvY3VtZW50YXRpb24gYWxzbyBjb25maXJtcyBteSBhc3Nlc3NtZW50LiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGNvZGUgcGF0aHMgdGhhdCBhcmUgb25seSByZWFjaGFibGUgd2l0aCBwaHlzaWNhbCBoYXJkd2FyZSB1bmF2YWlsYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgc2hvdWxkbiYjMzk7dCBiZSBjb25zaWRlcmVkIGZvciBmdXp6aW5nLCBhbmQgdGhpcyBjbGVhcmx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4KCkZpbmFsbHksIEkgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBwYXRjaCBmaWxlcyB0aGVtc2VsdmVzOiBgMTFheC5jYCwgYDExbi5jYCwgYGNmZzgwMjExLmNgLCBgbWFpbi5jYCwgYG1haW4uaGAsIGBzZGlvLmNgLCBgdWFwX3R4cnguY2AsIGFuZCBgdXRpbC5jYCwgYWxsIGluIHRoZSBgbnhwd2lmaWAgZGlyZWN0b3J5LiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIE5YUCBXaUZpIGRyaXZlciwgYW5kIHRoZXkgcmVxdWlyZSBhIHBoeXNpY2FsIFNESU8gaW50ZXJmYWNlLiBJIGNhbiBjb25maXJtIHRoaXMgcGF0Y2ggb25seSBhZmZlY3RzIHRoZSBOWFAgV2lGaSBkcml2ZXIsIGFuZCB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AgZGlyZWN0b3J5LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIGlzIGhhcmR3YXJlLXNwZWNpZmljLCBhbmQgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlhQIFdpRmkgZHJpdmVyIChueHB3aWZpKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU0RJTyBkcml2ZXIgZm9yIE5YUCBJVzYxeCBoYXJkd2FyZS4gU2luY2UgdGhpcyByZXF1aXJlcyBwaHlzaWNhbCBTRElPIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjUwLjkzOTY2OTgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNTY0MzQ1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTAuOTM5Njg3MjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTQ1NTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI3MjA1NWNhOTlkNDQ5ZTNkMjgxYzE2MzA4OTIyZmZjYzY4MGRmYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxOTo0NTo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmNcXG5pbmRleCBjYzQ3YzQzNWViNzBhLi45NjU0MDkxNGYzY2Y2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xcbkBAIC00MTMsNyArNDEzLDEwIEBAIGJvb2wgbnhwd2lmaV9pc18xMWF4X3R3dF9zdXBwb3J0ZWQoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcXG4gXFx0c3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICp1c2VyX2hlX2NhcDtcXG4gXFx0c3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICpod19oZV9jYXA7XFxuIFxcbi1cXHRpZiAoYnNzX2Rlc2MgXFx1MDAyNlxcdTAwMjYgKCFueHB3aWZpX2lzX2FwXzExYXhfdHd0X3N1cHBvcnRlZChic3NfZGVzYykpKSB7XFxuK1xcdGlmICghYnNzX2Rlc2MpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghbnhwd2lmaV9pc19hcF8xMWF4X3R3dF9zdXBwb3J0ZWQoYnNzX2Rlc2MpKSB7XFxuIFxcdFxcdG54cHdpZmlfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG4gXFx0XFx0XFx0ICAgIFxcXCJBUCBkb24ndCBzdXBwb3J0IHR3dCBmZWF0dXJlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXFxuaW5kZXggZTQ2YzUwNTNkNTA5MC4uYzJhNTRkNzgxYjQyYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXFxuQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkXFxuIG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsKVxcbiB7XFxuLVxcdGlmICghdGJsIFxcdTAwMjZcXHUwMDI2IG54cHdpZmlfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChwcml2LCB0YmwpKVxcbitcXHRpZiAoIXRibCB8fCBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bnhwd2lmaV9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgSU5GTyxcXG5AQCAtNjk0LDcgKzY5NCw3IEBAIGludCBueHB3aWZpX2dldF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXFxuIC8qIERlbGV0ZSBUeCBCQSBzdHJlYW0gZW50cnkgYnkgUkEuICovXFxuIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXFxuIHtcXG4tXFx0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsO1xcbitcXHRzdHJ1Y3Qgbnhwd2lmaV90eF9iYV9zdHJlYW1fdGJsICp0YmwsICp0bXA7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0aWYgKCFyYSlcXG5AQCAtNzAyLDcgKzcwMiw4IEBAIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX05VTV9USUQ7IGkrKykge1xcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2JhX3N0cmVhbV90YmxfbG9ja1tpXSk7XFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRibCwgXFx1MDAyNnByaXYtXFx1MDAzZXR4X2JhX3N0cmVhbV90YmxfcHRyW2ldLCBsaXN0KVxcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGJsLCB0bXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cHJpdi1cXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXFxuIFxcdFxcdFxcdGlmICghbWVtY21wKHRibC1cXHUwMDNlcmEsIHJhLCBFVEhfQUxFTikpXFxuIFxcdFxcdFxcdFxcdG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIHRibCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbmluZGV4IGM4MjBmMDhkMjgzNTUuLjVjYzhjZGY1OTRkM2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcXG5AQCAtNzE3LDYgKzcxNyw3IEBAIG54cHdpZmlfaW5pdF9uZXdfcHJpdl9wYXJhbXMoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpXFxuIHtcXG4gXFx0c3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXFx1MDAzZWFkYXB0ZXI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRueHB3aWZpX2luaXRfcHJpdihwcml2KTtcXG4gXFxuQEAgLTc0MCw3ICs3NDEsMTUgQEAgbnhwd2lmaV9pbml0X25ld19wcml2X3BhcmFtcyhzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuLVxcdHByaXYtXFx1MDAzZWJzc19udW0gPSBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBwcml2LVxcdTAwM2Vic3NfdHlwZSk7XFxuK1xcdHJldCA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXFx1MDAzZWJzc190eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnByaXYtXFx1MDAzZWJzc19udW0pO1xcbitcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcXG4rXFx0XFx0XFx0ICAgIFxcXCIlczogbm8gdW51c2VkIGJzc19udW0gZm9yIHR5cGUgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBkZXYtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZWJzc190eXBlKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKGFkYXB0ZXItXFx1MDAzZXdvcmtxdWV1ZSk7XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWlmYWNlX2NoYW5naW5nLCAwKTtcXG5AQCAtOTQzLDcgKzk1Miw2IEBAIG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuIFxcdFxcdFxcdHJldHVybiBueHB3aWZpX2NoYW5nZV92aWZfdG9fc3RhKGRldiwgY3Vycl9pZnR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0eXBlLCBwYXJhbXMpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byBlcnJub3RzdXBwO1xcbiBcXHRcXHR9XFxuQEAgLTk1Miw4ICs5NjAsNiBAQCBueHB3aWZpX2NmZzgwMjExX2NoYW5nZV92aXJ0dWFsX2ludGYoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0Z290byBlcnJub3RzdXBwO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuIGVycm5vdHN1cHA6XFxuIFxcdG54cHdpZmlfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbiBcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlIHRyYW5zaXRpb246ICVkIHRvICVkXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcXG5pbmRleCA0ZTAxZjQ1ZjNhMDBmLi5iNGM2MzgyOTAyNGEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xcbkBAIC0yMDQsNyArMjA0LDcgQEAgc3RhdGljIGJvb2wgbnhwd2lmaV9kcmFpbl90eChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRcXHRcXHRcXHRcXHQgIE5YUFdJRklfQVNZTkNfQ01EKTtcXG4gXFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlaHNfYWN0aXZhdGVkX21hbnVhbGx5ID0gZmFsc2U7XFxuIFxcdFxcdH1cXG4tXFx0XFx0XFx0bnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTtcXG4rXFx0XFx0bnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTtcXG4gXFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWhzX2FjdGl2YXRlZCkge1xcbiBcXHRcXHRcXHRjbGVhcl9iaXQoTlhQV0lGSV9JU19IU19DT05GSUdVUkVELFxcbiBcXHRcXHRcXHRcXHQgIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V3b3JrX2ZsYWdzKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXFxuaW5kZXggMzQ5ZGZhNGQzZjg1OC4uYjI1YTZhNGYyOTM2NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmhcXG5AQCAtMTE2Niw4ICsxMTY2LDkgQEAgbnhwd2lmaV9nZXRfcHJpdihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxcbiB9XFxuIFxcbiAvKiBmaW5kIHVudXNlZCBCU1MgbnVtYmVyIGZvciBuZXcgaW50ZXJmYWNlICovXFxuLXN0YXRpYyBpbmxpbmUgdThcXG4tbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK254cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlLFxcbitcXHRcXHRcXHQgICB1OCAqYnNzX251bSlcXG4ge1xcbiBcXHR1OCBpLCBqO1xcbiBcXHRpbnQgaW5kZXhbTlhQV0lGSV9NQVhfQlNTX05VTV07XFxuQEAgLTExNzksOSArMTE4MCwxNCBAQCBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCB1OCBic3NfdHlwZSlcXG4gXFx0XFx0ICAgICAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpKSB7XFxuIFxcdFxcdFxcdGluZGV4W2FkYXB0ZXItXFx1MDAzZXByaXZbaV0tXFx1MDAzZWJzc19udW1dID0gMTtcXG4gXFx0XFx0fVxcbi1cXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlhQV0lGSV9NQVhfQlNTX05VTTsgaisrKVxcbi1cXHRcXHRpZiAoIWluZGV4W2pdKVxcbi1cXHRcXHRcXHRyZXR1cm4gajtcXG4rXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBOWFBXSUZJX01BWF9CU1NfTlVNOyBqKyspIHtcXG4rXFx0XFx0aWYgKCFpbmRleFtqXSkge1xcbitcXHRcXHRcXHQqYnNzX251bSA9IGo7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAtRU5PRU5UO1xcbiB9XFxuIFxcbkBAIC0xMTk1LDggKzEyMDEsOSBAQCBueHB3aWZpX2dldF91bnVzZWRfcHJpdl9ieV9ic3NfdHlwZShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWRhcHRlci1cXHUwMDNlcHJpdl9udW07IGkrKylcXG4gXFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXByaXZbaV0tXFx1MDAzZWJzc19tb2RlID09XFxuIFxcdFxcdCAgIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSB7XFxuLVxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXByaXZbaV0tXFx1MDAzZWJzc19udW0gPVxcbi1cXHRcXHRcXHRcXHRueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSk7XFxuK1xcdFxcdFxcdGlmIChueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwcml2W2ldLVxcdTAwM2Vic3NfbnVtKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcXG5pbmRleCBkODUzNjM1NGYwOTNhLi44ZWYwZjZlYjQ5ZTI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xcbkBAIC0xMzQ3LDcgKzEzNDcsOCBAQCBzdGF0aWMgaW50IG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHNkaW9faVxcbiBcXHRcXHRcXHQgICAgICgocnhfYmxvY2tzICogTlhQV0lGSV9TRElPX0JMT0NLX1NJWkUpIFxcdTAwM2VcXG4gXFx0XFx0XFx0ICAgICAgY2FyZC1cXHUwMDNlbXBhX3J4LmJ1Zl9zaXplKSkpIHtcXG4gXFx0XFx0XFx0XFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsIFxcXCJpbnZhbGlkIHJ4X2xlbj0lZFxcXFxuXFxcIiwgcnhfbGVuKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gdGVybV9jbWQ7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdHJ4X2xlbiA9ICh1MTYpKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcXG5pbmRleCBmM2QyNGJmODYxY2E5Li44NDBkZGRmYzRmNWFlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jXFxuQEAgLTI0Niw4ICsyNDYsOCBAQCBpbnQgbnhwd2lmaV9oYW5kbGVfdWFwX3J4X2ZvcndhcmQoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXFxuIFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGNvcHkgc2tiIGZvciB1QVBcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbi1cXHRcXHRcXHRcXHQgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmNcXG5pbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuY1xcbkBAIC03OTksMzQgKzc5OSwzMyBAQCBpbnQgbnhwd2lmaV9yZWN2X3BhY2tldF90b19tb25pZihzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxcbiBcXHRcXHRfX2xlMTYgYWNjX2xlO1xcbiBcXHRcXHR1OCBmbGFncyA9IDA7XFxuIFxcbi1cXHRcXHRpZiAoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcXHUwMDNjPSAxNSkge1xcbi1cXHRcXHRcXHRoZHItXFx1MDAzZWl0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTtcXG4tXFx0XFx0XFx0b2ZmID0gQUxJR04ob2ZmLCA4KTtcXG4tXFxuLVxcdFxcdFxcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFxcdTAwMjYgMHgwMSkge1xcbi1cXHRcXHRcXHRcXHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfMzJCSVQ7XFxuLVxcdFxcdFxcdFxcdHRzID0gKHUzMilleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDtcXG4tXFx0XFx0XFx0XFx0dHMgPSBleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0aGRyLVxcdTAwM2VpdF9wcmVzZW50IHw9XFxuK1xcdFxcdFxcdGNwdV90b19sZTMyKEJJVChJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QKSk7XFxuK1xcdFxcdG9mZiA9IEFMSUdOKG9mZiwgOCk7XFxuIFxcbi1cXHRcXHRcXHR0c19sZSA9IGNwdV90b19sZTY0KHRzKTtcXG4tXFx0XFx0XFx0bWVtY3B5KHJ0aGRyICsgb2ZmLCBcXHUwMDI2dHNfbGUsIHNpemVvZih0c19sZSkpO1xcbi1cXHRcXHRcXHRvZmYgKz0gc2l6ZW9mKHRzX2xlKTtcXG4rXFx0XFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXFx1MDAyNiAweDAxKSB7XFxuK1xcdFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR18zMkJJVDtcXG4rXFx0XFx0XFx0dHMgPSAodTMyKWV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzY0QklUO1xcbitcXHRcXHRcXHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXFx1MDAyNiAweDAyKSB7XFxuLVxcdFxcdFxcdFxcdGFjY3VyYWN5ID0gZXh0LnRpbWVzdGFtcC5hY2N1cmFjeTtcXG4tXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHX0FDQ1VSQUNZO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdHRzX2xlID0gY3B1X3RvX2xlNjQodHMpO1xcbitcXHRcXHRtZW1jcHkocnRoZHIgKyBvZmYsIFxcdTAwMjZ0c19sZSwgc2l6ZW9mKHRzX2xlKSk7XFxuK1xcdFxcdG9mZiArPSBzaXplb2YodHNfbGUpO1xcbiBcXG4tXFx0XFx0XFx0YWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpO1xcbi1cXHRcXHRcXHRtZW1jcHkocnRoZHIgKyBvZmYsIFxcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcXG4tXFx0XFx0XFx0b2ZmICs9IHNpemVvZihhY2NfbGUpO1xcbi1cXHRcXHRcXHRydGhkcltvZmYrK10gPSAoZXh0LnRpbWVzdGFtcC51bml0IFxcdTAwMjYgMHgwZikgfFxcbi1cXHRcXHRcXHRcXHRcXHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXFx1MDAyNiAweDBmKSBcXHUwMDNjXFx1MDAzYyA0KTtcXG4tXFx0XFx0XFx0cnRoZHJbb2ZmKytdID0gZmxhZ3M7XFxuK1xcdFxcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFxcdTAwMjYgMHgwMikge1xcbitcXHRcXHRcXHRhY2N1cmFjeSA9IGV4dC50aW1lc3RhbXAuYWNjdXJhY3k7XFxuK1xcdFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR19BQ0NVUkFDWTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0YWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpO1xcbitcXHRcXHRtZW1jcHkocnRoZHIgKyBvZmYsIFxcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcXG4rXFx0XFx0b2ZmICs9IHNpemVvZihhY2NfbGUpO1xcbitcXHRcXHRydGhkcltvZmYrK10gPSAoZXh0LnRpbWVzdGFtcC51bml0IFxcdTAwMjYgMHgwZikgfFxcbitcXHRcXHRcXHRcXHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXFx1MDAyNiAweDBmKSBcXHUwMDNjXFx1MDAzYyA0KTtcXG4rXFx0XFx0cnRoZHJbb2ZmKytdID0gZmxhZ3M7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmb3JtYXQgPT0gTlhQV0lGSV9SQVRFX0ZPUk1BVF9IRSBcXHUwMDI2XFx1MDAyNiBoYXNfZXh0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjUxLjI4OTk1MTk1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4ODA2MTQyMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlhQIFdpRmkgZHJpdmVyIChueHB3aWZpKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU0RJTyBkcml2ZXIgZm9yIE5YUCBJVzYxeCBoYXJkd2FyZS4gU2luY2UgdGhpcyByZXF1aXJlcyBwaHlzaWNhbCBTRElPIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MjA1NWNhOTlkNDQ5ZTNkMjgxYzE2MzA4OTIyZmZjYzY4MGRmYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jXG5pbmRleCBjYzQ3YzQzNWViNzBhLi45NjU0MDkxNGYzY2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmNcbkBAIC00MTMsNyArNDEzLDEwIEBAIGJvb2wgbnhwd2lmaV9pc18xMWF4X3R3dF9zdXBwb3J0ZWQoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdHN0cnVjdCBueHB3aWZpX2llX3R5cGVzX2hlX2NhcCAqdXNlcl9oZV9jYXA7XG4gXHRzdHJ1Y3Qgbnhwd2lmaV9pZV90eXBlc19oZV9jYXAgKmh3X2hlX2NhcDtcbiBcbi1cdGlmIChic3NfZGVzYyBcdTAwMjZcdTAwMjYgKCFueHB3aWZpX2lzX2FwXzExYXhfdHd0X3N1cHBvcnRlZChic3NfZGVzYykpKSB7XG4rXHRpZiAoIWJzc19kZXNjKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkge1xuIFx0XHRueHB3aWZpX2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRyxcbiBcdFx0XHQgICAgXCJBUCBkb24ndCBzdXBwb3J0IHR3dCBmZWF0dXJlXFxuXCIpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuaW5kZXggZTQ2YzUwNTNkNTA5MC4uYzJhNTRkNzgxYjQyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkXG4gbnhwd2lmaV8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgbnhwd2lmaV90eF9iYV9zdHJlYW1fdGJsICp0YmwpXG4ge1xuLVx0aWYgKCF0YmwgXHUwMDI2XHUwMDI2IG54cHdpZmlfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChwcml2LCB0YmwpKVxuK1x0aWYgKCF0YmwgfHwgbnhwd2lmaV9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHByaXYsIHRibCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG54cHdpZmlfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgSU5GTyxcbkBAIC02OTQsNyArNjk0LDcgQEAgaW50IG54cHdpZmlfZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiAvKiBEZWxldGUgVHggQkEgc3RyZWFtIGVudHJ5IGJ5IFJBLiAqL1xuIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXG4ge1xuLVx0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsO1xuK1x0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsLCAqdG1wO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoIXJhKVxuQEAgLTcwMiw3ICs3MDIsOCBAQCB2b2lkIG54cHdpZmlfZGVsX3R4X2JhX3N0cmVhbV90YmxfYnlfcmEoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwgdTggKnJhKVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX05VTV9USUQ7IGkrKykge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eF9iYV9zdHJlYW1fdGJsX2xvY2tbaV0pO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YmwsIFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YmwsIHRtcCxcbitcdFx0XHRcdFx0IFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXG4gXHRcdFx0aWYgKCFtZW1jbXAodGJsLVx1MDAzZXJhLCByYSwgRVRIX0FMRU4pKVxuIFx0XHRcdFx0bnhwd2lmaV8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkocHJpdiwgdGJsKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xuaW5kZXggYzgyMGYwOGQyODM1NS4uNWNjOGNkZjU5NGQzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbkBAIC03MTcsNiArNzE3LDcgQEAgbnhwd2lmaV9pbml0X25ld19wcml2X3BhcmFtcyhzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0XHRcdCAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVx1MDAzZWFkYXB0ZXI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0bnhwd2lmaV9pbml0X3ByaXYocHJpdik7XG4gXG5AQCAtNzQwLDcgKzc0MSwxNSBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdHByaXYtXHUwMDNlYnNzX251bSA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXHUwMDNlYnNzX3R5cGUpO1xuK1x0cmV0ID0gbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgcHJpdi1cdTAwM2Vic3NfdHlwZSxcbitcdFx0XHRcdFx0IFx1MDAyNnByaXYtXHUwMDNlYnNzX251bSk7XG4rXG4rXHRpZiAocmV0KSB7XG4rXHRcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuK1x0XHRcdCAgICBcIiVzOiBubyB1bnVzZWQgYnNzX251bSBmb3IgdHlwZSAlZFxcblwiLFxuK1x0XHRcdCAgICBkZXYtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2Vic3NfdHlwZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHRmbHVzaF93b3JrcXVldWUoYWRhcHRlci1cdTAwM2V3b3JrcXVldWUpO1xuIFx0YXRvbWljX3NldChcdTAwMjZhZGFwdGVyLVx1MDAzZWlmYWNlX2NoYW5naW5nLCAwKTtcbkBAIC05NDMsNyArOTUyLDYgQEAgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbiBcdFx0XHRyZXR1cm4gbnhwd2lmaV9jaGFuZ2VfdmlmX3RvX3N0YShkZXYsIGN1cnJfaWZ0eXBlLFxuIFx0XHRcdFx0XHRcdFx0IHR5cGUsIHBhcmFtcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBlcnJub3RzdXBwO1xuIFx0XHR9XG5AQCAtOTUyLDggKzk2MCw2IEBAIG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRnb3RvIGVycm5vdHN1cHA7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbi1cbiBlcnJub3RzdXBwOlxuIFx0bnhwd2lmaV9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbiBcdFx0ICAgIFwidW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGUgdHJhbnNpdGlvbjogJWQgdG8gJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbmluZGV4IDRlMDFmNDVmM2EwMGYuLmI0YzYzODI5MDI0YTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xuQEAgLTIwNCw3ICsyMDQsNyBAQCBzdGF0aWMgYm9vbCBueHB3aWZpX2RyYWluX3R4KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRcdFx0XHRcdCAgTlhQV0lGSV9BU1lOQ19DTUQpO1xuIFx0XHRcdGFkYXB0ZXItXHUwMDNlaHNfYWN0aXZhdGVkX21hbnVhbGx5ID0gZmFsc2U7XG4gXHRcdH1cbi1cdFx0XHRueHB3aWZpX3Byb2Nlc3NfYnlwYXNzX3R4KGFkYXB0ZXIpO1xuK1x0XHRueHB3aWZpX3Byb2Nlc3NfYnlwYXNzX3R4KGFkYXB0ZXIpO1xuIFx0XHRpZiAoYWRhcHRlci1cdTAwM2Voc19hY3RpdmF0ZWQpIHtcbiBcdFx0XHRjbGVhcl9iaXQoTlhQV0lGSV9JU19IU19DT05GSUdVUkVELFxuIFx0XHRcdFx0ICBcdTAwMjZhZGFwdGVyLVx1MDAzZXdvcmtfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaFxuaW5kZXggMzQ5ZGZhNGQzZjg1OC4uYjI1YTZhNGYyOTM2NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXG5AQCAtMTE2Niw4ICsxMTY2LDkgQEAgbnhwd2lmaV9nZXRfcHJpdihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuIH1cbiBcbiAvKiBmaW5kIHVudXNlZCBCU1MgbnVtYmVyIGZvciBuZXcgaW50ZXJmYWNlICovXG4tc3RhdGljIGlubGluZSB1OFxuLW54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlKVxuK3N0YXRpYyBpbmxpbmUgaW50XG4rbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUsXG4rXHRcdFx0ICAgdTggKmJzc19udW0pXG4ge1xuIFx0dTggaSwgajtcbiBcdGludCBpbmRleFtOWFBXSUZJX01BWF9CU1NfTlVNXTtcbkBAIC0xMTc5LDkgKzExODAsMTQgQEAgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpXG4gXHRcdCAgICAgIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkge1xuIFx0XHRcdGluZGV4W2FkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtXSA9IDE7XG4gXHRcdH1cbi1cdGZvciAoaiA9IDA7IGogXHUwMDNjIE5YUFdJRklfTUFYX0JTU19OVU07IGorKylcbi1cdFx0aWYgKCFpbmRleFtqXSlcbi1cdFx0XHRyZXR1cm4gajtcbitcbitcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5YUFdJRklfTUFYX0JTU19OVU07IGorKykge1xuK1x0XHRpZiAoIWluZGV4W2pdKSB7XG4rXHRcdFx0KmJzc19udW0gPSBqO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyZXR1cm4gLUVOT0VOVDtcbiB9XG4gXG5AQCAtMTE5NSw4ICsxMjAxLDkgQEAgbnhwd2lmaV9nZXRfdW51c2VkX3ByaXZfYnlfYnNzX3R5cGUoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcixcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlcHJpdl9udW07IGkrKylcbiBcdFx0aWYgKGFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbW9kZSA9PVxuIFx0XHQgICBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkge1xuLVx0XHRcdGFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtID1cbi1cdFx0XHRcdG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIGJzc190eXBlKTtcbitcdFx0XHRpZiAobnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgYnNzX3R5cGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtKSlcbitcdFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jXG5pbmRleCBkODUzNjM1NGYwOTNhLi44ZWYwZjZlYjQ5ZTI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcbkBAIC0xMzQ3LDcgKzEzNDcsOCBAQCBzdGF0aWMgaW50IG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHNkaW9faVxuIFx0XHRcdCAgICAgKChyeF9ibG9ja3MgKiBOWFBXSUZJX1NESU9fQkxPQ0tfU0laRSkgXHUwMDNlXG4gXHRcdFx0ICAgICAgY2FyZC1cdTAwM2VtcGFfcnguYnVmX3NpemUpKSkge1xuIFx0XHRcdFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsIFwiaW52YWxpZCByeF9sZW49JWRcXG5cIiwgcnhfbGVuKTtcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gdGVybV9jbWQ7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHJ4X2xlbiA9ICh1MTYpKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguY1xuaW5kZXggZjNkMjRiZjg2MWNhOS4uODQwZGRkZmM0ZjVhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbkBAIC0yNDYsOCArMjQ2LDggQEAgaW50IG54cHdpZmlfaGFuZGxlX3VhcF9yeF9mb3J3YXJkKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXG4gXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gY29weSBza2IgZm9yIHVBUFxcblwiKTtcbi1cdFx0XHRcdCAgICBwcml2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbi1cdFx0XHRcdCAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRcdHByaXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xuK1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG5pbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmNcbkBAIC03OTksMzQgKzc5OSwzMyBAQCBpbnQgbnhwd2lmaV9yZWN2X3BhY2tldF90b19tb25pZihzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0XHRfX2xlMTYgYWNjX2xlO1xuIFx0XHR1OCBmbGFncyA9IDA7XG4gXG4tXHRcdGlmIChleHQudGltZXN0YW1wLnBvc2l0aW9uIFx1MDAzYz0gMTUpIHtcbi1cdFx0XHRoZHItXHUwMDNlaXRfcHJlc2VudCB8PSBjcHVfdG9fbGUzMihCSVQoSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUCkpO1xuLVx0XHRcdG9mZiA9IEFMSUdOKG9mZiwgOCk7XG4tXG4tXHRcdFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXHUwMDI2IDB4MDEpIHtcbi1cdFx0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR18zMkJJVDtcbi1cdFx0XHRcdHRzID0gKHUzMilleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDtcbi1cdFx0XHRcdHRzID0gZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuLVx0XHRcdH1cbitcdFx0aGRyLVx1MDAzZWl0X3ByZXNlbnQgfD1cbitcdFx0XHRjcHVfdG9fbGUzMihCSVQoSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUCkpO1xuK1x0XHRvZmYgPSBBTElHTihvZmYsIDgpO1xuIFxuLVx0XHRcdHRzX2xlID0gY3B1X3RvX2xlNjQodHMpO1xuLVx0XHRcdG1lbWNweShydGhkciArIG9mZiwgXHUwMDI2dHNfbGUsIHNpemVvZih0c19sZSkpO1xuLVx0XHRcdG9mZiArPSBzaXplb2YodHNfbGUpO1xuK1x0XHRpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyBcdTAwMjYgMHgwMSkge1xuK1x0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR18zMkJJVDtcbitcdFx0XHR0cyA9ICh1MzIpZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDtcbitcdFx0XHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcbitcdFx0fVxuIFxuLVx0XHRcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFx1MDAyNiAweDAyKSB7XG4tXHRcdFx0XHRhY2N1cmFjeSA9IGV4dC50aW1lc3RhbXAuYWNjdXJhY3k7XG4tXHRcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7XG4tXHRcdFx0fVxuK1x0XHR0c19sZSA9IGNwdV90b19sZTY0KHRzKTtcbitcdFx0bWVtY3B5KHJ0aGRyICsgb2ZmLCBcdTAwMjZ0c19sZSwgc2l6ZW9mKHRzX2xlKSk7XG4rXHRcdG9mZiArPSBzaXplb2YodHNfbGUpO1xuIFxuLVx0XHRcdGFjY19sZSA9IGNwdV90b19sZTE2KGFjY3VyYWN5KTtcbi1cdFx0XHRtZW1jcHkocnRoZHIgKyBvZmYsIFx1MDAyNmFjY19sZSwgc2l6ZW9mKGFjY19sZSkpO1xuLVx0XHRcdG9mZiArPSBzaXplb2YoYWNjX2xlKTtcbi1cdFx0XHRydGhkcltvZmYrK10gPSAoZXh0LnRpbWVzdGFtcC51bml0IFx1MDAyNiAweDBmKSB8XG4tXHRcdFx0XHRcdCgoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcdTAwMjYgMHgwZikgXHUwMDNjXHUwMDNjIDQpO1xuLVx0XHRcdHJ0aGRyW29mZisrXSA9IGZsYWdzO1xuK1x0XHRpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyBcdTAwMjYgMHgwMikge1xuK1x0XHRcdGFjY3VyYWN5ID0gZXh0LnRpbWVzdGFtcC5hY2N1cmFjeTtcbitcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7XG4gXHRcdH1cbitcbitcdFx0YWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpO1xuK1x0XHRtZW1jcHkocnRoZHIgKyBvZmYsIFx1MDAyNmFjY19sZSwgc2l6ZW9mKGFjY19sZSkpO1xuK1x0XHRvZmYgKz0gc2l6ZW9mKGFjY19sZSk7XG4rXHRcdHJ0aGRyW29mZisrXSA9IChleHQudGltZXN0YW1wLnVuaXQgXHUwMDI2IDB4MGYpIHxcbitcdFx0XHRcdCgoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcdTAwMjYgMHgwZikgXHUwMDNjXHUwMDNjIDQpO1xuK1x0XHRydGhkcltvZmYrK10gPSBmbGFncztcbiBcdH1cbiBcbiBcdGlmIChmb3JtYXQgPT0gTlhQV0lGSV9SQVRFX0ZPUk1BVF9IRSBcdTAwMjZcdTAwMjYgaGFzX2V4dCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTEuMjg5OTUzODE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyNDY3NDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG54cHdpZmkgRHJpdmVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgbW9kaWZ5aW5nIHRoZSBgbnhwd2lmaWAgZHJpdmVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbW9zdGx5IHJlZmluZW1lbnRzLCB0b3VjaGluZyB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIGRyaXZlci5cblxuRmlyc3QsIGluIGAxMWF4LmNgLCB0aGUgYG54cHdpZmlfaXNfMTFheF90d3Rfc3VwcG9ydGVkYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYSBudWxsIGBic3NfZGVzY2AsIHdoaWNoIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5UaGVuLCBgMTFuLmNgIHNlZXMgYSBtaW5vciBjaGFuZ2UgaW4gYG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5YCwgd2l0aCB0aGUgY29uZGl0aW9uIGNoZWNrIGZvciBgdGJsYCB1cGRhdGVkLiBUaGUgYG54cHdpZmlfZGVsX3R4X2JhX3N0cmVhbV90YmxfYnlfcmFgIGZ1bmN0aW9uIGlzIGFsc28gdXBkYXRlZCB3aXRoIGEgc2FmZXIgbGlzdCBpdGVyYXRpb24gbWV0aG9kLlxuXG5Nb3Zpbmcgb24gdG8gYGNmZzgwMjExLmNgLCBgbnhwd2lmaV9pbml0X25ld19wcml2X3BhcmFtc2AgaGFzIGJlZW4gbW9kaWZpZWQgc28gdGhhdCBgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW1gIG5vdyBwcm9wZXJseSByZXR1cm5zIGFuIGVycm9yIGNvZGUgYW5kIGFjY2VwdHMgYSBwb2ludGVyIGZvciBgYnNzX251bWAuIFRoZSBkZWFkIGNvZGUgaW4gYG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZmAgc2VlbXMgdG8gaGF2ZSBiZWVuIHJlbW92ZWQuXG5cbmBtYWluLmNgIGFuZCBgdWFwX3R4cnguY2AgYXJlIGp1c3QgZ2V0dGluZyBzb21lIGluZGVudGF0aW9uIGZpeGVzLCBub3RoaW5nIG1ham9yIHRoZXJlLlxuXG5UaGUgY2hhbmdlcyBpbiBgbWFpbi5oYCBpbmNsdWRlIHVwZGF0aW5nIHRoZSByZXR1cm4gdHlwZSBhbmQgcGFyYW1ldGVyIG9mIGBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bWAgYW5kIG1ha2luZyBzdXJlIHRoYXQgYG54cHdpZmlfZ2V0X3VudXNlZF9wcml2X2J5X2Jzc190eXBlYCBwcm9wZXJseSBoYW5kbGVzIGVycm9yIGhhbmRsaW5nLlxuXG5gc2Rpby5jYCBoYXMgYSBzbWFsbCBjaGFuZ2UgaW4gYG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzYCwgY2hhbmdpbmcgYSBkaXJlY3QgYHJldHVybmAgdG8gYSBgZ290b2AgZm9yIGNsZWFyZXIgZXJyb3IgaGFuZGxpbmcuXG5cbkZpbmFsbHksIGluIGB1dGlsLmNgLCB0aGUgYG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWZgIGZ1bmN0aW9uIHJlbW92ZXMgYW4gdW5uZWNlc3NhcnkgdGltZXN0YW1wIGNoZWNrLCB3aGljaCBwcm9iYWJseSBvcHRpbWl6ZXMgcGVyZm9ybWFuY2UuXG5cbk92ZXJhbGwsIGl0IGxvb2tzIGxpa2Ugc2V2ZXJhbCBtaW5vciBpbXByb3ZlbWVudHMgdG8gZXJyb3IgaGFuZGxpbmcsIGNvZGUgY2xhcml0eSwgYW5kIHBvdGVudGlhbGx5IG9wdGltaXphdGlvbi5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4uLiBJcyB0aGlzIGBueHB3aWZpYCBkcml2ZXIgZXZlbiBwYXJ0IG9mIHRoZSBtYWlubGluZSBrZXJuZWw/IEknbGwgcXVpY2tseSB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AuIEl0J3MgYWx3YXlzIGdvb2QgdG8gbWFrZSBzdXJlIHdlIGFyZSBub3QgbWFraW5nIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTguMjE0NjMyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBudWxsLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwibnhwd2lmaVwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjU4LjIxNDY4NjMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NDIxNjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgbnhwd2lmaWAqKlxuXG5BbHJpZ2h0LCBzbyBgbnhwd2lmaWAuLi4gaXQgZXhpc3RzLiBUaGF0J3MgdGhlIGZpcnN0IGh1cmRsZSwgYW5kIGEgZ29vZCBzdGFydC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZmlsZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBwcmVzZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFdpdGhvdXQgbG9va2luZyBhdCB0aGUgZmlsZXMsIEkgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHV0aWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MDAuODA4OTA3ODY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiMTFhYy5jXCIsXG4gICAgXCIxMWFjLmhcIixcbiAgICBcIjExYXguY1wiLFxuICAgIFwiMTFheC5oXCIsXG4gICAgXCIxMWguY1wiLFxuICAgIFwiMTFuLmNcIixcbiAgICBcIjExbi5oXCIsXG4gICAgXCIxMW5fYWdnci5jXCIsXG4gICAgXCIxMW5fYWdnci5oXCIsXG4gICAgXCIxMW5fcnhyZW9yZGVyLmNcIixcbiAgICBcIjExbl9yeHJlb3JkZXIuaFwiLFxuICAgIFwiY2ZnLmhcIixcbiAgICBcImNmZzgwMjExLmNcIixcbiAgICBcImNmZzgwMjExLmhcIixcbiAgICBcImNmcC5jXCIsXG4gICAgXCJjbWRldnQuY1wiLFxuICAgIFwiY21kZXZ0LmhcIixcbiAgICBcImRlYnVnZnMuY1wiLFxuICAgIFwiZXRodG9vbC5jXCIsXG4gICAgXCJmdy5oXCIsXG4gICAgXCJpZS5jXCIsXG4gICAgXCJpbml0LmNcIixcbiAgICBcImpvaW4uY1wiLFxuICAgIFwibWFpbi5jXCIsXG4gICAgXCJtYWluLmhcIixcbiAgICBcInNjYW4uY1wiLFxuICAgIFwic2Rpby5jXCIsXG4gICAgXCJzZGlvLmhcIixcbiAgICBcInN0YV9jZmcuY1wiLFxuICAgIFwic3RhX2NtZC5jXCIsXG4gICAgXCJzdGFfZXZlbnQuY1wiLFxuICAgIFwic3RhX3J4LmNcIixcbiAgICBcInN0YV90eC5jXCIsXG4gICAgXCJ0eHJ4LmNcIixcbiAgICBcInVhcF9jbWQuY1wiLFxuICAgIFwidWFwX2V2ZW50LmNcIixcbiAgICBcInVhcF90eHJ4LmNcIixcbiAgICBcInV0aWwuY1wiLFxuICAgIFwidXRpbC5oXCIsXG4gICAgXCJ3bW0uY1wiLFxuICAgIFwid21tLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MDAuODA5MDE4MzI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MDEyNTA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipDaGVja2luZyBEcml2ZXIgUmVhY2hhYmlsaXR5IGluIFFFTVUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcnVjaWFsLiBJJ20gd29ya2luZyB3aXRoIGFuIFNESU8gZHJpdmVyLCBzcGVjaWZpY2FsbHkgYHNkaW8uY2AsIGFuZCBJIG5lZWQgdG8gY29uZmlybSBpdHMgYWNjZXNzaWJpbGl0eSB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgYSBzdGFuZGFyZCBmaXJzdCBzdGVwLiBMZXQgbWUgY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMg4oCTIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBgbnhwd2lmaWAgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUgd2hldGhlciB0aGlzIGRyaXZlciBjYW4gZXZlbiAqYmUqIHBhcnQgb2YgdGhlIGJ1aWxkIGluIHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBzYXZlIG1lIGEgbG90IG9mIHdhc3RlZCB0aW1lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA0LjI3OTE0NTkxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODAwMTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlhQV0lGSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWc6Mjpjb25maWcgTlhQV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlhQIFdpRmkgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnOjEyOmNvbmZpZyBOWFBXSUZJX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjowNC4zMzcxNTM2NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2NzU5NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTlhQV0lGSV9TRElPKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5YUFdJRklfU0RJT2AuIFJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnlpbmcgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB0cm91Ymxlc2hvb3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzIGBOWFBXSUZJX1NESU9gIHJlbGllcyBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgY291bGQgaW52b2x2ZSBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWMgZHJpdmVycywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBzaGFyZWQgbGlicmFyaWVzLCBhbmQgbWF5YmUgZXZlbiBmaXJtd2FyZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jeSB0cmVlIHdpbGwgYmUgY3JpdGljYWwuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wbGV0ZSBwaWN0dXJlIGZvciB0aGlzIHdpcmVsZXNzIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgyOSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA3LjQ4MzkyMDk3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5YUFdJRklcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgV2lGaSBEcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBOWFBcXG4gICA3OlxcdFxcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cXG4gICA4OlxcdFxcbiAgIDk6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgMTA6XFx0XFx0ICBueHB3aWZpLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgTlhQV0lGSV9TRElPXFxuICAxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlhQIFdpRmkgRHJpdmVyIGZvciBJVzYxeFxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTlhQV0lGSSBcXHUwMDI2XFx1MDAyNiBNTUNcXG4gIDE1OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDE2OlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTlhQXFxuICAxOTpcXHRcXHQgIElXNjF4IGludGVyZmFjZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgMjI6XFx0XFx0ICBueHB3aWZpX3NkaW8uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA3LjQ4NDA0Nzc0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQ5Mjg3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlhQIFdpRmkgRHJpdmVyIGZvciBJVzYxeCoqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBoaW5nZXMgb24gYE1NQ2AuIElzIHRoaXMgYSBwaHlzaWNhbCBkcml2ZXIgZm9yIGEgaGFyZHdhcmUgY29tcG9uZW50PyBTcGVjaWZpY2FsbHksIHRoaXMgXCJOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XCIgaXMgY29ubmVjdGVkIHZpYSBTRElPLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBTRElPIGlzIHR5cGljYWxseSBwaHlzaWNhbCBoYXJkd2FyZS4gQ2FuIFNESU8gZGV2aWNlcyBldmVuIGJlIGVtdWxhdGVkIGluIFFFTVU/IEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mgbm90IHN0YW5kYXJkLlxuXG5MZXQncyBzZWXigKYgZG9lcyBTeXprYWxsZXIgdXN1YWxseSBmdXp6IFNESU8gaGFyZHdhcmUgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3Igb3IgaXQgdGFyZ2V0cyBzb21lIGdlbmVyaWMgc3Vic3lzdGVtPyBXYWl0LCBkaWQgU3l6a2FsbGVyIHBpY2sgdXAgYW55IHN1cHBvcnQgZm9yIFNESU8gZnV6emluZyByZWNlbnRseT8gTm9wZSwgbm8gU0RJTyBlbXVsYXRpb24gaW4gU3l6a2FsbGVyLlxuXG5Ib2xkIG9uLCBjb3VsZCBJIHJlYWNoIHRoaXMgZHJpdmVyIHZpYSBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhhdCdzIGEgc29mdHdhcmUgc2ltdWxhdG9yIGZvciBgbWFjODAyMTFgLiBUaGlzIGlzIGEgZnVsbG1hYyBkcml2ZXIgdXNpbmcgYENGRzgwMjExYCBkaXJlY3RseSwgc28gaXQgcmVnaXN0ZXJzIHdpdGggYGNmZzgwMjExYC4gQnV0IHRvIGdldCByZWdpc3RlcmVkIHdpdGggYGNmZzgwMjExYCwgdGhlIGRyaXZlciBuZWVkcyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEFuZCBiZWNhdXNlIGl0J3MgYW4gU0RJTyBkcml2ZXIsIGl0IG5lZWRzIGFuIFNESU8gZGV2aWNlIGZvciB0aGUgcHJvYmUuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRlIGludGVyZmFjZXMgbGlrZSBVU0Igb3IgUENJZSBhdmFpbGFibGUuIFRoZSBLY29uZmlnIG9ubHkgbWVudGlvbnMgYE5YUFdJRklfU0RJT2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYSBVU0Igb3IgUENJIGRyaXZlciBmbG9hdGluZyBhcm91bmQgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzMxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MTMuNTMzMzU0NTc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4MzE1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYz0xNjYwPW54cHdpZmlfY2xlYW51cF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYy0xNjY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYzoxNjY3Om1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYy0xNjY4LW1vZHVsZV9leGl0KG54cHdpZmlfY2xlYW51cF9tb2R1bGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxMy43MzExOTE0NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MzI3MDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhpcyBkb21haW46XG5cbioqQW5hbHl6aW5nIGBueHB3aWZpX2luaXRfbW9kdWxlYCoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG54cHdpZmlfaW5pdF9tb2R1bGVgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGlzIGRvaW5nLCBob3cgaXQgaW5pdGlhbGl6ZXMsIGFuZCB3aGF0IGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSBzeXN0ZW0gaXMuIElzIGl0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSdtIGFscmVhZHkgbWVudGFsbHkgZm9ybWluZyBoeXBvdGhlc2VzIOKAkyB3aGF0IGtleSBmdW5jdGlvbnMgd2lsbCBpdCBsaWtlbHkgY2FsbD8gV2hhdCByZXNvdXJjZXMgaXMgaXQgcHJvYmFibHkgbWFuYWdpbmc/IFRoaXMgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMsIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZGVlcGx5IHVuZGVyc3RhbmQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDc2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MTcuMTA0NDY1MzUyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0MDpcXHRcXHRcXHRkZXZfaW5mbyhhZGFwdGVyLVxcdTAwM2VkZXYsIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4xNjQxOlxcdFxcdGVsc2VcXG4xNjQyOlxcdFxcdFxcdHByX2luZm8oXFxcIiVwVlxcXCIsIFxcdTAwMjZ2YWYpO1xcbjE2NDM6XFx0XFxuMTY0NDpcXHRcXHR2YV9lbmQoYXJncyk7XFxuMTY0NTpcXHR9XFxuMTY0NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChfbnhwd2lmaV9kYmcpO1xcbjE2NDc6XFx0XFxuMTY0ODpcXHQvKiBNb2R1bGUgaW5pdDogaW5pdCBkZWJ1Z2ZzIGlmIGVuYWJsZWQuICovXFxuMTY0OTpcXHRzdGF0aWMgaW50XFxuMTY1MDpcXHRueHB3aWZpX2luaXRfbW9kdWxlKHZvaWQpXFxuMTY1MTpcXHR7XFxuMTY1MjpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxuMTY1MzpcXHRcXHRueHB3aWZpX2RlYnVnZnNfaW5pdCgpO1xcbjE2NTQ6XFx0I2VuZGlmXFxuMTY1NTpcXHRcXHRyZXR1cm4gMDtcXG4xNjU2OlxcdH1cXG4xNjU3OlxcdFxcbjE2NTg6XFx0LyogTW9kdWxlIGV4aXQ6IHJlbW92ZSBkZWJ1Z2ZzIGlmIGVuYWJsZWQuICovXFxuMTY1OTpcXHRzdGF0aWMgdm9pZFxcbjE2NjA6XFx0bnhwd2lmaV9jbGVhbnVwX21vZHVsZSh2b2lkKVxcbjE2NjE6XFx0e1xcbjE2NjI6XFx0I2lmZGVmIENPTkZJR19ERUJVR19GU1xcbjE2NjM6XFx0XFx0bnhwd2lmaV9kZWJ1Z2ZzX3JlbW92ZSgpO1xcbjE2NjQ6XFx0I2VuZGlmXFxuMTY2NTpcXHR9XFxuMTY2NjpcXHRcXG4xNjY3OlxcdG1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xcbjE2Njg6XFx0bW9kdWxlX2V4aXQobnhwd2lmaV9jbGVhbnVwX21vZHVsZSk7XFxuMTY2OTpcXHRcXG4xNjcwOlxcdE1PRFVMRV9BVVRIT1IoXFxcIk5YUCBJbnRlcm5hdGlvbmFsIEx0ZC5cXFwiKTtcXG4xNjcxOlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiTlhQIFdpRmkgRHJpdmVyIHZlcnNpb24gXFxcIiBWRVJTSU9OKTtcXG4xNjcyOlxcdE1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xcbjE2NzM6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxNy4xMDQ2MjE4OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1ODcxMjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLlxuXG4qKkRyaXZlciBJbml0aWFsaXphdGlvbiBIdW50KipcblxuSG1tLCBzbyBgbnhwd2lmaV9pbml0X21vZHVsZWAgcHJpbWFyaWx5IHNldHMgdXAgZGVidWdmcywgcmlnaHQ/IFRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGRyaXZlciByZWdpc3RyYXRpb24gaGFwcGVucy4gVGhhdCdzIGEgYml0IHRvbyBzaW1wbGUgZm9yIHRoZSBtYWluIGRyaXZlciBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gV2hlcmUncyB0aGUgYG1vZHVsZV9pbml0YCBmb3IgdGhlICpyZWFsKiBkcml2ZXI/IE15IGd1dCBzYXlzIGl0J3MgaW4gYSBmaWxlIHJlbGF0ZWQgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaW50ZXJmYWNlLiBTaW5jZSB0aGlzIGlzIFdpLUZpLCBhbmQgdGhlIG1vZHVsZSBuYW1lIHN1Z2dlc3RzIFNESU8sIGBzZGlvLmNgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2suIEl0IGxpa2VseSBoYXMgaXRzIG93biBgbW9kdWxlX2luaXRgIHRoYXQgY29ubmVjdHMgdGhlIGRvdHMgYmV0d2VlbiB0aGUgU0RJTyBpbnRlcmZhY2UgYW5kIHRoZSBXaS1GaSBmdW5jdGlvbmFsaXR5LiBJJ2xsIGJldCB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBkcml2ZXIgcmVnaXN0cmF0aW9uLCBwcm9iZSwgYW5kIGV2ZXJ5dGhpbmcgaGFwcGVucy4gVGltZSB0byBjb25maXJtIGFuZCBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoyMi4zNjMzNjY2MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTE1MTIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjIyLjQxMzUwMDI2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5ODAxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgU0RJTyBkcml2ZXIgaXMgcmVnaXN0ZXJlZCwgYW5kIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBzZGlvLmNgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgU0RJTy1zcGVjaWZpYyBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgIGZ1bmN0aW9uLCBhcyB0aGF0J3MgY2xlYXJseSB0aGUga2V5IGZ1bmN0aW9uIGZvciB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIGF0dGFjaG1lbnQgdG8gdGhlIFNESU8gc3Vic3lzdGVtLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHN0cnVjdHVyZSBpcyBwYXNzZWQsIHdoYXQgdGhlIGRldmljZSBtYXRjaGluZyBwcm9jZXNzIGxvb2tzIGxpa2UsIGFuZCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgbWFuYWdlZCBhdCB0aGlzIHN0YWdlLiBJIGV4cGVjdCB0byBmaW5kIGluZm9ybWF0aW9uIG9uIHByb2JlIGFuZCByZW1vdmUgZnVuY3Rpb25zIGhlcmUsIGFuZCBpZGVhbGx5LCBob29rcyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nIGFzIHdlbGwuIEZpbmRpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGludG8gdGhlIGRyaXZlcidzIGxpZmVjeWNsZSBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjI1LjcxMzMwNDkzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5OTE0MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW9fcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjUuNzU3MzA3ODcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mzk1NDgzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuSG1tLCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBTRElPIGRyaXZlciBpcyBnZXR0aW5nIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLiBUaGF0J3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcCwgcmlnaHQ/IEFscmlnaHQsIGxldCdzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2Ug4oCTIG5vIG5lZWQgdG8gYmVhdCBhcm91bmQgdGhlIGJ1c2guIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBzZGlvLmNgIGZpbGUuIFRoZSBmYXN0ZXN0IHdheSB0byBzZWUgaG93IGl0J3MgaW5pdGlhbGl6ZWQgaXMgdG8gbG9vayBmb3IgdGhlIGtleSBmdW5jdGlvbnM6IEknbSBsb29raW5nIGZvciBlaXRoZXIgYSBgbW9kdWxlX2luaXRgIG1hY3JvLCBiZWNhdXNlIGl0J3MgdGhlIHN0YW5kYXJkIHdheSB0byBzZXQgdXAgZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwsIG9yIGEgZGlyZWN0IGNhbGwgdG8gYSBgcmVnaXN0ZXJgIGZ1bmN0aW9uLiBJIGV4cGVjdCBvbmUgb2YgdGhvc2UgaXMgZ29pbmcgdG8gdGVsbCBtZSBleGFjdGx5IGhvdyBhbmQgd2hlbiB0aGlzIHRoaW5nIGlzIGhvb2tlZCBpbnRvIHRoZSBzeXN0ZW0uIEl0IHNob3VsZCBiZSBwcmV0dHkgb2J2aW91cywgYW5kIGZyb20gdGhlcmUgSSBjYW4gdHJhY2UgdGhlIGNhbGwgZmxvdyBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjkuMTk2ODU5NjY4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAxNTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTUxMD1zdGF0aWMgaW50IG54cHdpZmlfaW5pdF9zZGlvX25ld19tb2RlKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzo1Mjc6XFx0LyogQ29uZmlndXJlIGNtZCBwb3J0IGFuZCBlbmFibGUgcmVhZGluZyByeCBsZW5ndGggZnJvbSB0aGUgcmVnaXN0ZXIgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI4LVxcdHJldCA9IG54cHdpZmlfcmVhZF9yZWcoYWRhcHRlciwgY2FyZC1cXHUwMDNlcmVnLVxcdTAwM2VjbWRfY2ZnXzAsIFxcdTAwMjZyZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTczMD1zdGF0aWMgaW50IG54cHdpZmlfc2Rpb19lbmFibGVfaG9zdF9pbnQoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy03NDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjc0NTpcXHQvKiBTaW1wbHkgd3JpdGUgdGhlIG1hc2sgdG8gdGhlIHJlZ2lzdGVyICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTc0Ni1cXHRyZXQgPSBueHB3aWZpX3dyaXRlX3JlZ19sb2NrZWQoZnVuYywgY2FyZC1cXHUwMDNlcmVnLVxcdTAwM2Vob3N0X2ludF9tYXNrX3JlZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYz03OTI9c3RhdGljIGludCBueHB3aWZpX3Byb2dfZndfd19oZWxwZXIoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NDMtXFx0XFx0XFx0XFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjg0NDpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImRldiBCQVNFMCByZWdpc3RlciByZWFkIGZhaWxlZDpcXFxcdFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtODQ1LVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiYmFzZTA9JSMwNFgoJWQpLiBUZXJtaW5hdGluZyBkbmxkXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTg1Mi1cXHRcXHRcXHRcXHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6ODUzOlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZGV2IEJBU0UxIHJlZ2lzdGVyIHJlYWQgZmFpbGVkOlxcXFx0XFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NTQtXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJiYXNlMT0lIzA0WCglZCkuIFRlcm1pbmF0aW5nIGRubGRcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MTYyNT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoxNjI2Om54cHdpZmlfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYyNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTYzODpzdGF0aWMgaW50IG54cHdpZmlfcmVnaXN0ZXJfZGV2KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTE2ODM9c3RhdGljIGludCBueHB3aWZpX2luaXRfc2RpbyhzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2OTQtXFx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJ3QgZG8gdGhpcyB3ZSBnZXQgYSBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTY5NTpcXHQgKiBhcyBzb29uIGFzIHdlIHJlZ2lzdGVyIHRoZSBpcnEuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2OTYtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MjE1Nj1zdGF0aWMgdm9pZCBueHB3aWZpX3NkaW9fZGV2aWNlX2R1bXAoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTY1Oi8qIER1bXAgU0RJTyBmdW5jdGlvbiBhbmQgc2NyYXRjaCByZWdpc3RlcnMgaW50byBkcnZfYnVmLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTY2LXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MjE2Nz1ueHB3aWZpX3NkaW9fcmVnX2R1bXAoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqZHJ2X2J1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTc5OlxcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIE1TRywgXFxcIlNESU8gcmVnaXN0ZXIgZHVtcCBzdGFydFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxODAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE5MC1cXHRcXHRjYXNlIDA6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIxOTE6XFx0XFx0XFx0LyogUmVhZCB0aGUgcmVnaXN0ZXJzIG9mIFNESU8gZnVuY3Rpb24wICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTItXFx0XFx0XFx0ZnVuYyA9IGNvdW50O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTYtXFx0XFx0Y2FzZSAxOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTk3OlxcdFxcdFxcdC8qIFJlYWQgdGhlIHJlZ2lzdGVycyBvZiBTRElPIGZ1bmN0aW9uMSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTk4LVxcdFxcdFxcdGZ1bmMgPSBjb3VudDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjA5LVxcdFxcdGRlZmF1bHQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIyMTA6XFx0XFx0XFx0LyogUmVhZCB0aGUgc2NyYXRjaCByZWdpc3RlcnMgb2YgU0RJTyBmdW5jdGlvbjEgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjIxMS1cXHRcXHRcXHRpZiAoY291bnQgPT0gNClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMjUzOlxcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIE1TRywgXFxcIlNESU8gcmVnaXN0ZXIgZHVtcCBlbmRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjU0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIyNTg9c3RhdGljIHZvaWQgbnhwd2lmaV9zZGlvX3VwX2RldihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyODUtXFx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJ3QgZG8gdGhpcyB3ZSBnZXQgYSBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjI4NjpcXHQgKiBhcyBzb29uIGFzIHdlIHJlZ2lzdGVyIHRoZSBpcnEuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyODctXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MjI5ND1zdGF0aWMgc3RydWN0IG54cHdpZmlfaWZfb3BzIHNkaW9fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyOTktXFx0LnByb2dfZncgPSBueHB3aWZpX3Byb2dfZndfd19oZWxwZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIzMDA6XFx0LnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfcmVnaXN0ZXJfZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMzAxOlxcdC51bnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfdW5yZWdpc3Rlcl9kZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIzMDItXFx0LmVuYWJsZV9pbnQgPSBueHB3aWZpX3NkaW9fZW5hYmxlX2hvc3RfaW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoyOS4yNDQ4ODU1NzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDc3ODQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTRElPIERyaXZlciBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTRElPIHNpdHVhdGlvbiBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBlc3NlbnRpYWwgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBJIHNlZSBgc2Rpb19vcHNgIGluIHRoZSBtaXgsIGFuZCBpdCBoYXMgYHJlZ2lzdGVyX2RldmAgYW5kIGB1bnJlZ2lzdGVyX2RldmAgbWV0aG9kcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB1bmRlcnN0YW5kIHRoYXQgYW55IGRyaXZlciByZWdpc3RlcmluZyB3aXRoIFNESU8gaXMgbGlrZWx5IHV0aWxpemluZyB0aGVzZS5cblxuTm93LCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXRzZWxmLCB0aGVuIEkgc2hvdWxkIGludmVzdGlnYXRlIGBzZGlvLmNgLiBLbm93aW5nIGhvdyB0aGUgU0RJTyBmcmFtZXdvcmsgd29ya3MsIG15IG5leHQgbW92ZSB3b3VsZCBiZSB0byBsb29rIGZvciBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBjZW50cmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGhvdyBhIG5ldyBTRElPIGRyaXZlciBnZXRzIGludGVncmF0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIGhhcHBlbmluZyB0aGVyZS4gQW5kIGxpa2VseSB1bnJlZ2lzdHJhdGlvbiB0aGVyZSBhcyB3ZWxsLCBidXQgYHVucmVnaXN0ZXJfZGV2YCBvZiBgc2Rpb19vcHNgIG1heSBiZSB0aGUgY29yZSBvZiB0aGF0IHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDk1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzIuODc5NjY3MTgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg4MTcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb19yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjozMi45Mjc1NTUxOTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjkyMjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5ICpob3cqIHRoaXMgU0RJTyBkcml2ZXIgaXMgYmVpbmcgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBjaGVjayB0aGUgZW5kIG9mIHRoZSBgc2Rpby5jYCBzb3VyY2UgZmlsZS4gT2Z0ZW4sIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHJvdXRpbmVzIGFyZSBwbGFjZWQgdGhlcmUsIGxvZ2ljYWxseSB0eWluZyB0aGUgZmlsZSdzIHByaW1hcnkgZnVuY3Rpb25hbGl0eSB0byB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nLiBMZXQncyBzZWUgd2hhdCBgc2Rpby5jYCdzIHRhaWwgaGFzIHRvIHRlbGwgdXMuIEknbGwgYmV0IGl0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzYuNDAwNDgwNjI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMwMDpcXHRcXHQucmVnaXN0ZXJfZGV2ID0gbnhwd2lmaV9yZWdpc3Rlcl9kZXYsXFxuMjMwMTpcXHRcXHQudW5yZWdpc3Rlcl9kZXYgPSBueHB3aWZpX3VucmVnaXN0ZXJfZGV2LFxcbjIzMDI6XFx0XFx0LmVuYWJsZV9pbnQgPSBueHB3aWZpX3NkaW9fZW5hYmxlX2hvc3RfaW50LFxcbjIzMDM6XFx0XFx0LmRpc2FibGVfaW50ID0gbnhwd2lmaV9zZGlvX2Rpc2FibGVfaG9zdF9pbnQsXFxuMjMwNDpcXHRcXHQucHJvY2Vzc19pbnRfc3RhdHVzID0gbnhwd2lmaV9wcm9jZXNzX2ludF9zdGF0dXMsXFxuMjMwNTpcXHRcXHQuaG9zdF90b19jYXJkID0gbnhwd2lmaV9zZGlvX2hvc3RfdG9fY2FyZCxcXG4yMzA2OlxcdFxcdC53YWtldXAgPSBueHB3aWZpX3BtX3dha2V1cF9jYXJkLFxcbjIzMDc6XFx0XFx0Lndha2V1cF9jb21wbGV0ZSA9IG54cHdpZmlfcG1fd2FrZXVwX2NhcmRfY29tcGxldGUsXFxuMjMwODpcXHRcXG4yMzA5OlxcdFxcdC8qIFNESU8gc3BlY2lmaWMgKi9cXG4yMzEwOlxcdFxcdC51cGRhdGVfbXBfZW5kX3BvcnQgPSBueHB3aWZpX3VwZGF0ZV9tcF9lbmRfcG9ydCxcXG4yMzExOlxcdFxcdC5jbGVhbnVwX21wYV9idWYgPSBueHB3aWZpX2NsZWFudXBfbXBhX2J1ZixcXG4yMzEyOlxcdFxcdC5jbWRyc3BfY29tcGxldGUgPSBueHB3aWZpX3NkaW9fY21kcnNwX2NvbXBsZXRlLFxcbjIzMTM6XFx0XFx0LmV2ZW50X2NvbXBsZXRlID0gbnhwd2lmaV9zZGlvX2V2ZW50X2NvbXBsZXRlLFxcbjIzMTQ6XFx0XFx0LmRubGRfZncgPSBueHB3aWZpX3NkaW9fZG5sZF9mdyxcXG4yMzE1OlxcdFxcdC5jYXJkX3Jlc2V0ID0gbnhwd2lmaV9zZGlvX2NhcmRfcmVzZXQsXFxuMjMxNjpcXHRcXHQucmVnX2R1bXAgPSBueHB3aWZpX3NkaW9fcmVnX2R1bXAsXFxuMjMxNzpcXHRcXHQuZGV2aWNlX2R1bXAgPSBueHB3aWZpX3NkaW9fZGV2aWNlX2R1bXAsXFxuMjMxODpcXHRcXHQuZGVhZ2dyX3BrdCA9IG54cHdpZmlfZGVhZ2dyX3NkaW9fcGt0LFxcbjIzMTk6XFx0XFx0LnVwX2RldiA9IG54cHdpZmlfc2Rpb191cF9kZXYsXFxuMjMyMDpcXHR9O1xcbjIzMjE6XFx0XFxuMjMyMjpcXHRtb2R1bGVfc2Rpb19kcml2ZXIobnhwd2lmaV9zZGlvKTtcXG4yMzIzOlxcdFxcbjIzMjQ6XFx0TU9EVUxFX0FVVEhPUihcXFwiTlhQIEludGVybmF0aW9uYWwgTHRkLlxcXCIpO1xcbjIzMjU6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJOWFAgV2lGaSBTRElPIERyaXZlciB2ZXJzaW9uIFxcXCIgU0RJT19WRVJTSU9OKTtcXG4yMzI2OlxcdE1PRFVMRV9WRVJTSU9OKFNESU9fVkVSU0lPTik7XFxuMjMyNzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuMjMyODpcXHRNT0RVTEVfRklSTVdBUkUoSVc2MVhfU0RJT19GV19OQU1FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzYuNDAwNjQ2NTI5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDQ5ODk2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0RJTyBEcml2ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBtb2R1bGVfc2Rpb19kcml2ZXIobnhwd2lmaV9zZGlvKTtgIGNhbGwsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgY29kZSByZWdpc3RlcnMgYW4gU0RJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuICpmdXp6KiBTRElPIGRyaXZlcnM/IEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbG9va2VkIGNsb3NlbHkgYXQgaXRzIGNhcGFiaWxpdGllcy4gTm93LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIHN5emthbGxlciBoYXMgYSBnb29kIFVTQiBlbXVsYXRpb24gdXNpbmcgYGR1bW15X2hjZGAsIGFuZCBpdCBoYXMgc29tZSBsaW1pdGVkIFBDSSBzdXBwb3J0LCB0aG91Z2ggdXN1YWxseSBub3QgdGFyZ2V0ZWQgYXQgc3BlY2lmaWMgZGV2aWNlcy4gQnV0IEkgZG9uJ3QgdGhpbmsgaXQgaGFzIHByb3BlciBTRElPIGVtdWxhdGlvbiDigJMgaW4gZmFjdCwgSSdtIHByZXR0eSBzdXJlIGl0ICpkb2Vzbid0Ki4gU28sIHRoYXQgcGF0aCBsb29rcyBibG9ja2VkLlxuXG5Ib2xkIG9uLCBiZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJ3QgaW5zdGFudGlhdGVkIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gSXMgdGhlcmUgKmFueSogY2hhbmNlIHRoYXQgdGhpcyBgbnhwd2lmaWAgZGV2aWNlIGlzIHNvbWVob3cgYWxzbyBzdXBwb3J0ZWQgdGhyb3VnaCBhIFBDSSBvciBVU0IgaW50ZXJmYWNlPyBUaGF0J3MgdGhlIG9ubHkgb3RoZXIgd2F5IEkgY2FuIHRoaW5rIG9mIHRoYXQgbWlnaHQgb2ZmZXIgYSBzeXprYWxsZXIgZW50cnlwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0Njo0MS4xNDU2MzkyMDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc5Nzg5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0Njo0MS4yNjQ0NDUzNDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA1NjIwNDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE0MDE1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0Njo0My4zMjA2NTI5NDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzU0MjA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfdXNiX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjQzLjM2NjQxODQwM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTY1ODY1MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0RJTyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBhbmQgaXQncyBjb25maXJtZWQsIGl0J3MganVzdCBhbiBTRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gU0RJTyBkZXZpY2VzIGJlIGZ1enplZCBlZmZlY3RpdmVseT8gSSdtIGltbWVkaWF0ZWx5IHJlbWluZGVkIG9mIHRoZSBkaWZmaWN1bHRpZXMgaW4gZnV6emluZyBkcml2ZXJzIHRoYXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycywgb3IgU21hcnROSUNzLCBvciBHUFVzLiBUaG9zZSB1c3VhbGx5IHJlcXVpcmUgYWN0dWFsIFBDSWUgY2FyZHMsIHdoaWNoIFFFTVUgZG9lc24ndCBmdWxseSBlbXVsYXRlLiBUaGUgc2FtZSB3b3VsZCBhcHBseSB0byBTRElPLCB3aGljaCBhbHNvIGRlbWFuZHMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCByaWdodD8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZG91YmxlLWNoZWNrIGlmIFFFTVUgZXZlbiBwcm92aWRlcyBhbnkgU0RJTyBlbXVsYXRpb24gdGhhdCBzeXprYWxsZXIgY291bGQgbGV2ZXJhZ2UuXG5cbkkga25vdyBRRU1VICpkb2VzKiBoYXZlIFNEIGNhcmQgZW11bGF0aW9uLCBidXQgU0RJTyBpcyBkaXN0aW5jdC4gRXZlbiBpZiB0aGVyZSdzIHNvbWUgU0RJTyBzdXBwb3J0LCBJIGRvdWJ0IHN5emthbGxlciBoYXMgYSBtZWNoYW5pc20gdG8gaW5qZWN0IFNESU8gZGV2aWNlcyBhbmQgZnV6eiB0aGVtIGxpa2UgaXQgZG9lcyB3aXRoIFVTQiB1c2luZyByYXctZ2FkZ2V0IG9yIGR1bW15X2hjZC5cblxuTm93LCBhIHBvc3NpYmlsaXR5IHBvcHMgaW50byBteSBoZWFkLiBDb3VsZCB0aGlzIGRyaXZlciBiZSBhY2Nlc3NlZCB2aWEgYG1hYzgwMjExX2h3c2ltYD8gQnV0IG5vLCBgbWFjODAyMTFfaHdzaW1gIGlzIGEgc29mdHdhcmUgc2ltdWxhdG9yIGZvciBgbWFjODAyMTFgLCBhbmQgdGhpcyBkcml2ZXIgdXRpbGl6ZXMgYENGRzgwMjExYCBkaXJlY3RseSwgc28gaXQncyBhIFwiZnVsbG1hY1wiIGRyaXZlci4gSXQgcmVnaXN0ZXJzIGRpcmVjdGx5IHdpdGggY2ZnODAyMTEuIEJ1dCB0aGF0IHJlcXVpcmVzIGl0IHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBmaXJzdC4gQW5kIGJlaW5nIGFuIFNESU8gZHJpdmVyLCBwcm9iaW5nIHJlcXVpcmVzIGFuIFNESU8gZGV2aWNlLlxuXG5JIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgaW50ZXJmYWNlcyBJIG1pZ2h0IGhhdmUgbWlzc2VkIChVU0IsIFBDSWUpLiBUaGUgS2NvbmZpZyBvbmx5IG1lbnRpb25zIGBOWFBXSUZJX1NESU9gLiBSaWdodC4gTGV0IG1lIGRvdWJsZS1jaGVjayBmb3IgUENJIG9yIFVTQiBkcml2ZXJzLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBXYWl0LCBJIGFscmVhZHkgY2hlY2tlZCBmb3IgUENJIGFuZCBVU0IgZHJpdmVycyB1c2luZyBgbW9kdWxlX3BjaV9kcml2ZXJgIGFuZCBgbW9kdWxlX3VzYl9kcml2ZXJgLiBTbywgSSdsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCB0aGUgb3RoZXIgZmlsZXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6NTAuNTMyMjg4Njc0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcIjExYWMuY1wiLFxuICAgIFwiMTFhYy5oXCIsXG4gICAgXCIxMWF4LmNcIixcbiAgICBcIjExYXguaFwiLFxuICAgIFwiMTFoLmNcIixcbiAgICBcIjExbi5jXCIsXG4gICAgXCIxMW4uaFwiLFxuICAgIFwiMTFuX2FnZ3IuY1wiLFxuICAgIFwiMTFuX2FnZ3IuaFwiLFxuICAgIFwiMTFuX3J4cmVvcmRlci5jXCIsXG4gICAgXCIxMW5fcnhyZW9yZGVyLmhcIixcbiAgICBcImNmZy5oXCIsXG4gICAgXCJjZmc4MDIxMS5jXCIsXG4gICAgXCJjZmc4MDIxMS5oXCIsXG4gICAgXCJjZnAuY1wiLFxuICAgIFwiY21kZXZ0LmNcIixcbiAgICBcImNtZGV2dC5oXCIsXG4gICAgXCJkZWJ1Z2ZzLmNcIixcbiAgICBcImV0aHRvb2wuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaWUuY1wiLFxuICAgIFwiaW5pdC5jXCIsXG4gICAgXCJqb2luLmNcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWFpbi5oXCIsXG4gICAgXCJzY2FuLmNcIixcbiAgICBcInNkaW8uY1wiLFxuICAgIFwic2Rpby5oXCIsXG4gICAgXCJzdGFfY2ZnLmNcIixcbiAgICBcInN0YV9jbWQuY1wiLFxuICAgIFwic3RhX2V2ZW50LmNcIixcbiAgICBcInN0YV9yeC5jXCIsXG4gICAgXCJzdGFfdHguY1wiLFxuICAgIFwidHhyeC5jXCIsXG4gICAgXCJ1YXBfY21kLmNcIixcbiAgICBcInVhcF9ldmVudC5jXCIsXG4gICAgXCJ1YXBfdHhyeC5jXCIsXG4gICAgXCJ1dGlsLmNcIixcbiAgICBcInV0aWwuaFwiLFxuICAgIFwid21tLmNcIixcbiAgICBcIndtbS5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjUwLjUzMjQwODA4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTYzNjI3MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IGNvbmNsdXNpb24uIEZpcnN0IG9mZiwgdGhlIGZpbGUgbGlzdCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbi4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgdG91Y2hpbmcgdGhlIGBzZGlvLmNgIGZpbGUgd2l0aGluIHRoZSBOWFAgV2ktRmkgZHJpdmVyLCBhbmQgcmVsYXRlZCBmaWxlcy4gVGhlcmUncyBubyBtZW50aW9uIG9mIGFueSBnZW5lcmljIFVTQiwgUENJZSwgb3Igb3RoZXIgY29yZSBrZXJuZWwgY29tcG9uZW50cywganVzdCB0aGUgTlhQIHNwZWNpZmljIFNESU8gaW1wbGVtZW50YXRpb24uXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGRyaXZlciBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgTlhQIElXNjF4IGhhcmR3YXJlLiAgVGhpcyBpc24ndCBhbiBTRElPIGdlbmVyaWMgZHJpdmVyOyBpdCdzIGEgKnZlbmRvci1zcGVjaWZpYyogZHJpdmVyLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhpcyBraW5kIG9mIGhhcmR3YXJlIHByb3Blcmx5LCB3aGljaCBtZWFucyB0aGUgY29kZSBwYXRocyB3aXRoaW4gdGhpcyBkcml2ZXIgYXJlIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIHZlcnkga2luZCBmdXp6aW5nIHdvdWxkIGJlIGRvbmUgb24uXG5cbkkgYWxzbyBkb3VibGUtY2hlY2tlZCB3aXRoIG15IGtub3dsZWRnZSBvZiBTeXprYWxsZXIncyBjYXBhYmlsaXRpZXMuIEkga25vdyBpdCBjYW4gZnV6eiBVU0IgdmlhIGBkdW1teV9oY2RgLCBQQ0kgdG8gYSBsaW1pdGVkIGV4dGVudCwgYW5kIHZoY2kgZm9yIGJsdWV0b290aCwgYnV0IEknbSBjZXJ0YWluIHRoZXJlJ3Mgbm8ga25vd24gc3VwcG9ydCBmb3IgU0RJTy4gIFRoZSBkb2N1bWVudGF0aW9uIGFsc28gY29uZmlybXMgbXkgYXNzZXNzbWVudC4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBjb2RlIHBhdGhzIHRoYXQgYXJlIG9ubHkgcmVhY2hhYmxlIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUgdW5hdmFpbGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHNob3VsZG4ndCBiZSBjb25zaWRlcmVkIGZvciBmdXp6aW5nLCBhbmQgdGhpcyBjbGVhcmx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS5cblxuRmluYWxseSwgSSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlIHBhdGNoIGZpbGVzIHRoZW1zZWx2ZXM6IGAxMWF4LmNgLCBgMTFuLmNgLCBgY2ZnODAyMTEuY2AsIGBtYWluLmNgLCBgbWFpbi5oYCwgYHNkaW8uY2AsIGB1YXBfdHhyeC5jYCwgYW5kIGB1dGlsLmNgLCBhbGwgaW4gdGhlIGBueHB3aWZpYCBkaXJlY3RvcnkuIFRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgTlhQIFdpRmkgZHJpdmVyLCBhbmQgdGhleSByZXF1aXJlIGEgcGh5c2ljYWwgU0RJTyBpbnRlcmZhY2UuIEkgY2FuIGNvbmZpcm0gdGhpcyBwYXRjaCBvbmx5IGFmZmVjdHMgdGhlIE5YUCBXaUZpIGRyaXZlciwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvYCBkaXJlY3RvcnkuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciBpcyBoYXJkd2FyZS1zcGVjaWZpYywgYW5kIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cywgSSBoYXZlIHRvIGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjUyLCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIyLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NzowMC4wOTYwNDE2OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlhQIFdpRmkgZHJpdmVyIChueHB3aWZpKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU0RJTyBkcml2ZXIgZm9yIE5YUCBJVzYxeCBoYXJkd2FyZS4gU2luY2UgdGhpcyByZXF1aXJlcyBwaHlzaWNhbCBTRElPIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5dns4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 19:44:01 +0000 UTC FinishedAt: 2026-08-03 19:47:02 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI3MjA1NWNhOTlkNDQ5ZTNkMjgxYzE2MzA4OTIyZmZjYzY4MGRmYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xuaW5kZXggY2M0N2M0MzVlYjcwYS4uOTY1NDA5MTRmM2NmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jXG5AQCAtNDEzLDcgJiM0Mzs0MTMsMTAgQEAgYm9vbCBueHB3aWZpX2lzXzExYXhfdHd0X3N1cHBvcnRlZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0c3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICp1c2VyX2hlX2NhcDtcbiBcdHN0cnVjdCBueHB3aWZpX2llX3R5cGVzX2hlX2NhcCAqaHdfaGVfY2FwO1xuIFxuLVx0aWYgKGJzc19kZXNjIFx1MDAyNlx1MDAyNiAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkpIHtcbiYjNDM7XHRpZiAoIWJzc19kZXNjKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkge1xuIFx0XHRueHB3aWZpX2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRyxcbiBcdFx0XHQgICAgXCYjMzQ7QVAgZG9uJiMzOTt0IHN1cHBvcnQgdHd0IGZlYXR1cmVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuaW5kZXggZTQ2YzUwNTNkNTA5MC4uYzJhNTRkNzgxYjQyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuQEAgLTQ1MSw3ICYjNDM7NDUxLDcgQEAgdm9pZFxuIG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsKVxuIHtcbi1cdGlmICghdGJsIFx1MDAyNlx1MDAyNiBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSlcbiYjNDM7XHRpZiAoIXRibCB8fCBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bnhwd2lmaV9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBJTkZPLFxuQEAgLTY5NCw3ICYjNDM7Njk0LDcgQEAgaW50IG54cHdpZmlfZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiAvKiBEZWxldGUgVHggQkEgc3RyZWFtIGVudHJ5IGJ5IFJBLiAqL1xuIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXG4ge1xuLVx0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsO1xuJiM0MztcdHN0cnVjdCBueHB3aWZpX3R4X2JhX3N0cmVhbV90YmwgKnRibCwgKnRtcDtcbiBcdGludCBpO1xuIFxuIFx0aWYgKCFyYSlcbkBAIC03MDIsNyAmIzQzOzcwMiw4IEBAIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNQVhfTlVNX1RJRDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9sb2NrW2ldKTtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGJsLCBcdTAwMjZwcml2LVx1MDAzZXR4X2JhX3N0cmVhbV90YmxfcHRyW2ldLCBsaXN0KVxuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRibCwgdG1wLFxuJiM0MztcdFx0XHRcdFx0IFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXG4gXHRcdFx0aWYgKCFtZW1jbXAodGJsLVx1MDAzZXJhLCByYSwgRVRIX0FMRU4pKVxuIFx0XHRcdFx0bnhwd2lmaV8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkocHJpdiwgdGJsKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xuaW5kZXggYzgyMGYwOGQyODM1NS4uNWNjOGNkZjU5NGQzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbkBAIC03MTcsNiAmIzQzOzcxNyw3IEBAIG54cHdpZmlfaW5pdF9uZXdfcHJpdl9wYXJhbXMoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHQgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSlcbiB7XG4gXHRzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyID0gcHJpdi1cdTAwM2VhZGFwdGVyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRueHB3aWZpX2luaXRfcHJpdihwcml2KTtcbiBcbkBAIC03NDAsNyAmIzQzOzc0MSwxNSBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdHByaXYtXHUwMDNlYnNzX251bSA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXHUwMDNlYnNzX3R5cGUpO1xuJiM0MztcdHJldCA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXHUwMDNlYnNzX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgXHUwMDI2cHJpdi1cdTAwM2Vic3NfbnVtKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDslczogbm8gdW51c2VkIGJzc19udW0gZm9yIHR5cGUgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBkZXYtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2Vic3NfdHlwZSk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdGZsdXNoX3dvcmtxdWV1ZShhZGFwdGVyLVx1MDAzZXdvcmtxdWV1ZSk7XG4gXHRhdG9taWNfc2V0KFx1MDAyNmFkYXB0ZXItXHUwMDNlaWZhY2VfY2hhbmdpbmcsIDApO1xuQEAgLTk0Myw3ICYjNDM7OTUyLDYgQEAgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbiBcdFx0XHRyZXR1cm4gbnhwd2lmaV9jaGFuZ2VfdmlmX3RvX3N0YShkZXYsIGN1cnJfaWZ0eXBlLFxuIFx0XHRcdFx0XHRcdFx0IHR5cGUsIHBhcmFtcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBlcnJub3RzdXBwO1xuIFx0XHR9XG5AQCAtOTUyLDggJiM0Mzs5NjAsNiBAQCBueHB3aWZpX2NmZzgwMjExX2NoYW5nZV92aXJ0dWFsX2ludGYoc3RydWN0IHdpcGh5ICp3aXBoeSxcbiBcdFx0Z290byBlcnJub3RzdXBwO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4tXG4gZXJybm90c3VwcDpcbiBcdG54cHdpZmlfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgRVJST1IsXG4gXHRcdCAgICBcJiMzNDt1bnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSB0cmFuc2l0aW9uOiAlZCB0byAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbmluZGV4IDRlMDFmNDVmM2EwMGYuLmI0YzYzODI5MDI0YTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xuQEAgLTIwNCw3ICYjNDM7MjA0LDcgQEAgc3RhdGljIGJvb2wgbnhwd2lmaV9kcmFpbl90eChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxuIFx0XHRcdFx0XHQgIE5YUFdJRklfQVNZTkNfQ01EKTtcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZWhzX2FjdGl2YXRlZF9tYW51YWxseSA9IGZhbHNlO1xuIFx0XHR9XG4tXHRcdFx0bnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTtcbiYjNDM7XHRcdG54cHdpZmlfcHJvY2Vzc19ieXBhc3NfdHgoYWRhcHRlcik7XG4gXHRcdGlmIChhZGFwdGVyLVx1MDAzZWhzX2FjdGl2YXRlZCkge1xuIFx0XHRcdGNsZWFyX2JpdChOWFBXSUZJX0lTX0hTX0NPTkZJR1VSRUQsXG4gXHRcdFx0XHQgIFx1MDAyNmFkYXB0ZXItXHUwMDNld29ya19mbGFncyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXG5pbmRleCAzNDlkZmE0ZDNmODU4Li5iMjVhNmE0ZjI5MzY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmhcbkBAIC0xMTY2LDggJiM0MzsxMTY2LDkgQEAgbnhwd2lmaV9nZXRfcHJpdihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuIH1cbiBcbiAvKiBmaW5kIHVudXNlZCBCU1MgbnVtYmVyIGZvciBuZXcgaW50ZXJmYWNlICovXG4tc3RhdGljIGlubGluZSB1OFxuLW54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlKVxuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0MztueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCB1OCBic3NfdHlwZSxcbiYjNDM7XHRcdFx0ICAgdTggKmJzc19udW0pXG4ge1xuIFx0dTggaSwgajtcbiBcdGludCBpbmRleFtOWFBXSUZJX01BWF9CU1NfTlVNXTtcbkBAIC0xMTc5LDkgJiM0MzsxMTgwLDE0IEBAIG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlKVxuIFx0XHQgICAgICBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkpIHtcbiBcdFx0XHRpbmRleFthZGFwdGVyLVx1MDAzZXByaXZbaV0tXHUwMDNlYnNzX251bV0gPSAxO1xuIFx0XHR9XG4tXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBOWFBXSUZJX01BWF9CU1NfTlVNOyBqJiM0MzsmIzQzOylcbi1cdFx0aWYgKCFpbmRleFtqXSlcbi1cdFx0XHRyZXR1cm4gajtcbiYjNDM7XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgTlhQV0lGSV9NQVhfQlNTX05VTTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghaW5kZXhbal0pIHtcbiYjNDM7XHRcdFx0KmJzc19udW0gPSBqO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuIFxuQEAgLTExOTUsOCAmIzQzOzEyMDEsOSBAQCBueHB3aWZpX2dldF91bnVzZWRfcHJpdl9ieV9ic3NfdHlwZShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWRhcHRlci1cdTAwM2Vwcml2X251bTsgaSYjNDM7JiM0MzspXG4gXHRcdGlmIChhZGFwdGVyLVx1MDAzZXByaXZbaV0tXHUwMDNlYnNzX21vZGUgPT1cbiBcdFx0ICAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpIHtcbi1cdFx0XHRhZGFwdGVyLVx1MDAzZXByaXZbaV0tXHUwMDNlYnNzX251bSA9XG4tXHRcdFx0XHRueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSk7XG4mIzQzO1x0XHRcdGlmIChueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xuaW5kZXggZDg1MzYzNTRmMDkzYS4uOGVmMGY2ZWI0OWUyOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jXG5AQCAtMTM0Nyw3ICYjNDM7MTM0Nyw4IEBAIHN0YXRpYyBpbnQgbnhwd2lmaV9wcm9jZXNzX2ludF9zdGF0dXMoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggc2Rpb19pXG4gXHRcdFx0ICAgICAoKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKSBcdTAwM2VcbiBcdFx0XHQgICAgICBjYXJkLVx1MDAzZW1wYV9yeC5idWZfc2l6ZSkpKSB7XG4gXHRcdFx0XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUiwgXCYjMzQ7aW52YWxpZCByeF9sZW49JWRcXG5cJiMzNDssIHJ4X2xlbik7XG4tXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gdGVybV9jbWQ7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHJ4X2xlbiA9ICh1MTYpKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguY1xuaW5kZXggZjNkMjRiZjg2MWNhOS4uODQwZGRkZmM0ZjVhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbkBAIC0yNDYsOCAmIzQzOzI0Niw4IEBAIGludCBueHB3aWZpX2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuIFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBjb3B5IHNrYiBmb3IgdUFQXFxuXCYjMzQ7KTtcbi1cdFx0XHRcdCAgICBwcml2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuLVx0XHRcdFx0ICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG5pbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmNcbkBAIC03OTksMzQgJiM0Mzs3OTksMzMgQEAgaW50IG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWYoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdFx0X19sZTE2IGFjY19sZTtcbiBcdFx0dTggZmxhZ3MgPSAwO1xuIFxuLVx0XHRpZiAoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcdTAwM2M9IDE1KSB7XG4tXHRcdFx0aGRyLVx1MDAzZWl0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTtcbi1cdFx0XHRvZmYgPSBBTElHTihvZmYsIDgpO1xuLVxuLVx0XHRcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFx1MDAyNiAweDAxKSB7XG4tXHRcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfMzJCSVQ7XG4tXHRcdFx0XHR0cyA9ICh1MzIpZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfNjRCSVQ7XG4tXHRcdFx0XHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcbi1cdFx0XHR9XG4mIzQzO1x0XHRoZHItXHUwMDNlaXRfcHJlc2VudCB8PVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMihCSVQoSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUCkpO1xuJiM0MztcdFx0b2ZmID0gQUxJR04ob2ZmLCA4KTtcbiBcbi1cdFx0XHR0c19sZSA9IGNwdV90b19sZTY0KHRzKTtcbi1cdFx0XHRtZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCBcdTAwMjZ0c19sZSwgc2l6ZW9mKHRzX2xlKSk7XG4tXHRcdFx0b2ZmICYjNDM7PSBzaXplb2YodHNfbGUpO1xuJiM0MztcdFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXHUwMDI2IDB4MDEpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzMyQklUO1xuJiM0MztcdFx0XHR0cyA9ICh1MzIpZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzY0QklUO1xuJiM0MztcdFx0XHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcbiYjNDM7XHRcdH1cbiBcbi1cdFx0XHRpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyBcdTAwMjYgMHgwMikge1xuLVx0XHRcdFx0YWNjdXJhY3kgPSBleHQudGltZXN0YW1wLmFjY3VyYWN5O1xuLVx0XHRcdFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHX0FDQ1VSQUNZO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHRzX2xlID0gY3B1X3RvX2xlNjQodHMpO1xuJiM0MztcdFx0bWVtY3B5KHJ0aGRyICYjNDM7IG9mZiwgXHUwMDI2dHNfbGUsIHNpemVvZih0c19sZSkpO1xuJiM0MztcdFx0b2ZmICYjNDM7PSBzaXplb2YodHNfbGUpO1xuIFxuLVx0XHRcdGFjY19sZSA9IGNwdV90b19sZTE2KGFjY3VyYWN5KTtcbi1cdFx0XHRtZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCBcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcbi1cdFx0XHRvZmYgJiM0Mzs9IHNpemVvZihhY2NfbGUpO1xuLVx0XHRcdHJ0aGRyW29mZiYjNDM7JiM0MztdID0gKGV4dC50aW1lc3RhbXAudW5pdCBcdTAwMjYgMHgwZikgfFxuLVx0XHRcdFx0XHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXHUwMDI2IDB4MGYpIFx1MDAzY1x1MDAzYyA0KTtcbi1cdFx0XHRydGhkcltvZmYmIzQzOyYjNDM7XSA9IGZsYWdzO1xuJiM0MztcdFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXHUwMDI2IDB4MDIpIHtcbiYjNDM7XHRcdFx0YWNjdXJhY3kgPSBleHQudGltZXN0YW1wLmFjY3VyYWN5O1xuJiM0MztcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7XG4gXHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRhY2NfbGUgPSBjcHVfdG9fbGUxNihhY2N1cmFjeSk7XG4mIzQzO1x0XHRtZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCBcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcbiYjNDM7XHRcdG9mZiAmIzQzOz0gc2l6ZW9mKGFjY19sZSk7XG4mIzQzO1x0XHRydGhkcltvZmYmIzQzOyYjNDM7XSA9IChleHQudGltZXN0YW1wLnVuaXQgXHUwMDI2IDB4MGYpIHxcbiYjNDM7XHRcdFx0XHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXHUwMDI2IDB4MGYpIFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRcdHJ0aGRyW29mZiYjNDM7JiM0MztdID0gZmxhZ3M7XG4gXHR9XG4gXG4gXHRpZiAoZm9ybWF0ID09IE5YUFdJRklfUkFURV9GT1JNQVRfSEUgXHUwMDI2XHUwMDI2IGhhc19leHQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE5YUCBXaUZpIGRyaXZlciAobnhwd2lmaSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNESU8gZHJpdmVyIGZvciBOWFAgSVc2MXggaGFyZHdhcmUuIFNpbmNlIHRoaXMgcmVxdWlyZXMgcGh5c2ljYWwgU0RJTyBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZSBkcml2ZXIgY2Fubm90IHByb2JlIGFuZCBpdHMgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjcyMDU1Y2E5OWQ0NDllM2QyODFjMTYzMDg5MjJmZmNjNjgwZGZhOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTk6NDU6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmMKaW5kZXggY2M0N2M0MzVlYjcwYS4uOTY1NDA5MTRmM2NmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguYwpAQCAtNDEzLDcgJiM0Mzs0MTMsMTAgQEAgYm9vbCBueHB3aWZpX2lzXzExYXhfdHd0X3N1cHBvcnRlZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LAogCXN0cnVjdCBueHB3aWZpX2llX3R5cGVzX2hlX2NhcCAqdXNlcl9oZV9jYXA7CiAJc3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICpod19oZV9jYXA7CiAKLQlpZiAoYnNzX2Rlc2MgJmFtcDsmYW1wOyAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkpIHsKJiM0MzsJaWYgKCFic3NfZGVzYykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFueHB3aWZpX2lzX2FwXzExYXhfdHd0X3N1cHBvcnRlZChic3NfZGVzYykpIHsKIAkJbnhwd2lmaV9kYmcocHJpdi0mZ3Q7YWRhcHRlciwgTVNHLAogCQkJICAgICYjMzQ7QVAgZG9uJiMzOTt0IHN1cHBvcnQgdHd0IGZlYXR1cmVcbiYjMzQ7KTsKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYwppbmRleCBlNDZjNTA1M2Q1MDkwLi5jMmE1NGQ3ODFiNDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYwpAQCAtNDUxLDcgJiM0Mzs0NTEsNyBAQCB2b2lkCiBueHB3aWZpXzExbl9kZWxldGVfdHhfYmFfc3RyZWFtX3RibF9lbnRyeShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LAogCQkJCQkgIHN0cnVjdCBueHB3aWZpX3R4X2JhX3N0cmVhbV90YmwgKnRibCkKIHsKLQlpZiAoIXRibCAmYW1wOyZhbXA7IG54cHdpZmlfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChwcml2LCB0YmwpKQomIzQzOwlpZiAoIXRibCB8fCBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSkKIAkJcmV0dXJuOwogCiAJbnhwd2lmaV9kYmcocHJpdi0mZ3Q7YWRhcHRlciwgSU5GTywKQEAgLTY5NCw3ICYjNDM7Njk0LDcgQEAgaW50IG54cHdpZmlfZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwKIC8qIERlbGV0ZSBUeCBCQSBzdHJlYW0gZW50cnkgYnkgUkEuICovCiB2b2lkIG54cHdpZmlfZGVsX3R4X2JhX3N0cmVhbV90YmxfYnlfcmEoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwgdTggKnJhKQogewotCXN0cnVjdCBueHB3aWZpX3R4X2JhX3N0cmVhbV90YmwgKnRibDsKJiM0MzsJc3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsLCAqdG1wOwogCWludCBpOwogCiAJaWYgKCFyYSkKQEAgLTcwMiw3ICYjNDM7NzAyLDggQEAgdm9pZCBueHB3aWZpX2RlbF90eF9iYV9zdHJlYW1fdGJsX2J5X3JhKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsIHU4ICpyYSkKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBNQVhfTlVNX1RJRDsgaSYjNDM7JiM0MzspIHsKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7cHJpdi0mZ3Q7dHhfYmFfc3RyZWFtX3RibF9sb2NrW2ldKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodGJsLCAmYW1wO3ByaXYtJmd0O3R4X2JhX3N0cmVhbV90YmxfcHRyW2ldLCBsaXN0KQomIzQzOwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRibCwgdG1wLAomIzQzOwkJCQkJICZhbXA7cHJpdi0mZ3Q7dHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpCiAJCQlpZiAoIW1lbWNtcCh0YmwtJmd0O3JhLCByYSwgRVRIX0FMRU4pKQogCQkJCW54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIHRibCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jCmluZGV4IGM4MjBmMDhkMjgzNTUuLjVjYzhjZGY1OTRkM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuYwpAQCAtNzE3LDYgJiM0Mzs3MTcsNyBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSkKIHsKIAlzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0mZ3Q7YWRhcHRlcjsKJiM0MzsJaW50IHJldDsKIAogCW54cHdpZmlfaW5pdF9wcml2KHByaXYpOwogCkBAIC03NDAsNyAmIzQzOzc0MSwxNSBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlwcml2LSZndDtic3NfbnVtID0gbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgcHJpdi0mZ3Q7YnNzX3R5cGUpOwomIzQzOwlyZXQgPSBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBwcml2LSZndDtic3NfdHlwZSwKJiM0MzsJCQkJCSAmYW1wO3ByaXYtJmd0O2Jzc19udW0pOwomIzQzOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUiwKJiM0MzsJCQkgICAgJiMzNDslczogbm8gdW51c2VkIGJzc19udW0gZm9yIHR5cGUgJWRcbiYjMzQ7LAomIzQzOwkJCSAgICBkZXYtJmd0O25hbWUsIHByaXYtJmd0O2Jzc190eXBlKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAogCWZsdXNoX3dvcmtxdWV1ZShhZGFwdGVyLSZndDt3b3JrcXVldWUpOwogCWF0b21pY19zZXQoJmFtcDthZGFwdGVyLSZndDtpZmFjZV9jaGFuZ2luZywgMCk7CkBAIC05NDMsNyAmIzQzOzk1Miw2IEBAIG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCQlyZXR1cm4gbnhwd2lmaV9jaGFuZ2VfdmlmX3RvX3N0YShkZXYsIGN1cnJfaWZ0eXBlLAogCQkJCQkJCSB0eXBlLCBwYXJhbXMpOwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGVycm5vdHN1cHA7CiAJCX0KQEAgLTk1Miw4ICYjNDM7OTYwLDYgQEAgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCWdvdG8gZXJybm90c3VwcDsKIAl9CiAKLQlyZXR1cm4gMDsKLQogZXJybm90c3VwcDoKIAlueHB3aWZpX2RiZyhwcml2LSZndDthZGFwdGVyLCBFUlJPUiwKIAkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGUgdHJhbnNpdGlvbjogJWQgdG8gJWRcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jCmluZGV4IDRlMDFmNDVmM2EwMGYuLmI0YzYzODI5MDI0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMKQEAgLTIwNCw3ICYjNDM7MjA0LDcgQEAgc3RhdGljIGJvb2wgbnhwd2lmaV9kcmFpbl90eChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKQogCQkJCQkgIE5YUFdJRklfQVNZTkNfQ01EKTsKIAkJCWFkYXB0ZXItJmd0O2hzX2FjdGl2YXRlZF9tYW51YWxseSA9IGZhbHNlOwogCQl9Ci0JCQlueHB3aWZpX3Byb2Nlc3NfYnlwYXNzX3R4KGFkYXB0ZXIpOwomIzQzOwkJbnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTsKIAkJaWYgKGFkYXB0ZXItJmd0O2hzX2FjdGl2YXRlZCkgewogCQkJY2xlYXJfYml0KE5YUFdJRklfSVNfSFNfQ09ORklHVVJFRCwKIAkJCQkgICZhbXA7YWRhcHRlci0mZ3Q7d29ya19mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmgKaW5kZXggMzQ5ZGZhNGQzZjg1OC4uYjI1YTZhNGYyOTM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaApAQCAtMTE2Niw4ICYjNDM7MTE2Niw5IEBAIG54cHdpZmlfZ2V0X3ByaXYoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwKIH0KIAogLyogZmluZCB1bnVzZWQgQlNTIG51bWJlciBmb3IgbmV3IGludGVyZmFjZSAqLwotc3RhdGljIGlubGluZSB1OAotbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpCiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0MztueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCB1OCBic3NfdHlwZSwKJiM0MzsJCQkgICB1OCAqYnNzX251bSkKIHsKIAl1OCBpLCBqOwogCWludCBpbmRleFtOWFBXSUZJX01BWF9CU1NfTlVNXTsKQEAgLTExNzksOSAmIzQzOzExODAsMTQgQEAgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpCiAJCSAgICAgIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkgewogCQkJaW5kZXhbYWRhcHRlci0mZ3Q7cHJpdltpXS0mZ3Q7YnNzX251bV0gPSAxOwogCQl9Ci0JZm9yIChqID0gMDsgaiAmbHQ7IE5YUFdJRklfTUFYX0JTU19OVU07IGomIzQzOyYjNDM7KQotCQlpZiAoIWluZGV4W2pdKQotCQkJcmV0dXJuIGo7CiYjNDM7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBOWFBXSUZJX01BWF9CU1NfTlVNOyBqJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFpbmRleFtqXSkgewomIzQzOwkJCSpic3NfbnVtID0gajsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCXJldHVybiAtRU5PRU5UOwogfQogCkBAIC0xMTk1LDggJiM0MzsxMjAxLDkgQEAgbnhwd2lmaV9nZXRfdW51c2VkX3ByaXZfYnlfYnNzX3R5cGUoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwKIAlmb3IgKGkgPSAwOyBpICZsdDsgYWRhcHRlci0mZ3Q7cHJpdl9udW07IGkmIzQzOyYjNDM7KQogCQlpZiAoYWRhcHRlci0mZ3Q7cHJpdltpXS0mZ3Q7YnNzX21vZGUgPT0KIAkJICAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpIHsKLQkJCWFkYXB0ZXItJmd0O3ByaXZbaV0tJmd0O2Jzc19udW0gPQotCQkJCW54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIGJzc190eXBlKTsKJiM0MzsJCQlpZiAobnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgYnNzX3R5cGUsCiYjNDM7CQkJCQkJICAgICAgICZhbXA7YWRhcHRlci0mZ3Q7cHJpdltpXS0mZ3Q7YnNzX251bSkpCiYjNDM7CQkJCXJldHVybiBOVUxMOwogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jCmluZGV4IGQ4NTM2MzU0ZjA5M2EuLjhlZjBmNmViNDllMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMKQEAgLTEzNDcsNyAmIzQzOzEzNDcsOCBAQCBzdGF0aWMgaW50IG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHNkaW9faQogCQkJICAgICAoKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKSAmZ3Q7CiAJCQkgICAgICBjYXJkLSZndDttcGFfcnguYnVmX3NpemUpKSkgewogCQkJCW54cHdpZmlfZGJnKGFkYXB0ZXIsIEVSUk9SLCAmIzM0O2ludmFsaWQgcnhfbGVuPSVkXG4mIzM0OywgcnhfbGVuKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byB0ZXJtX2NtZDsKIAkJCX0KIAogCQkJcnhfbGVuID0gKHUxNikocnhfYmxvY2tzICogTlhQV0lGSV9TRElPX0JMT0NLX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmMKaW5kZXggZjNkMjRiZjg2MWNhOS4uODQwZGRkZmM0ZjVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jCkBAIC0yNDYsOCAmIzQzOzI0Niw4IEBAIGludCBueHB3aWZpX2hhbmRsZV91YXBfcnhfZm9yd2FyZChzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LAogCQl9IGVsc2UgewogCQkJbnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsCiAJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGNvcHkgc2tiIGZvciB1QVBcbiYjMzQ7KTsKLQkJCQkgICAgcHJpdi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7Ci0JCQkJICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQkJcHJpdi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuYwppbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jCkBAIC03OTksMzQgJiM0Mzs3OTksMzMgQEAgaW50IG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWYoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwKIAkJX19sZTE2IGFjY19sZTsKIAkJdTggZmxhZ3MgPSAwOwogCi0JCWlmIChleHQudGltZXN0YW1wLnBvc2l0aW9uICZsdDs9IDE1KSB7Ci0JCQloZHItJmd0O2l0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTsKLQkJCW9mZiA9IEFMSUdOKG9mZiwgOCk7Ci0KLQkJCWlmIChleHQudGltZXN0YW1wLmZsYWdzICZhbXA7IDB4MDEpIHsKLQkJCQlmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfMzJCSVQ7Ci0JCQkJdHMgPSAodTMyKWV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDsKLQkJCX0gZWxzZSB7Ci0JCQkJZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzY0QklUOwotCQkJCXRzID0gZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wOwotCQkJfQomIzQzOwkJaGRyLSZndDtpdF9wcmVzZW50IHw9CiYjNDM7CQkJY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTsKJiM0MzsJCW9mZiA9IEFMSUdOKG9mZiwgOCk7CiAKLQkJCXRzX2xlID0gY3B1X3RvX2xlNjQodHMpOwotCQkJbWVtY3B5KHJ0aGRyICYjNDM7IG9mZiwgJmFtcDt0c19sZSwgc2l6ZW9mKHRzX2xlKSk7Ci0JCQlvZmYgJiM0Mzs9IHNpemVvZih0c19sZSk7CiYjNDM7CQlpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyAmYW1wOyAweDAxKSB7CiYjNDM7CQkJZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzMyQklUOwomIzQzOwkJCXRzID0gKHUzMilleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDsKJiM0MzsJCQl0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDsKJiM0MzsJCX0KIAotCQkJaWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgJmFtcDsgMHgwMikgewotCQkJCWFjY3VyYWN5ID0gZXh0LnRpbWVzdGFtcC5hY2N1cmFjeTsKLQkJCQlmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7Ci0JCQl9CiYjNDM7CQl0c19sZSA9IGNwdV90b19sZTY0KHRzKTsKJiM0MzsJCW1lbWNweShydGhkciAmIzQzOyBvZmYsICZhbXA7dHNfbGUsIHNpemVvZih0c19sZSkpOwomIzQzOwkJb2ZmICYjNDM7PSBzaXplb2YodHNfbGUpOwogCi0JCQlhY2NfbGUgPSBjcHVfdG9fbGUxNihhY2N1cmFjeSk7Ci0JCQltZW1jcHkocnRoZHIgJiM0Mzsgb2ZmLCAmYW1wO2FjY19sZSwgc2l6ZW9mKGFjY19sZSkpOwotCQkJb2ZmICYjNDM7PSBzaXplb2YoYWNjX2xlKTsKLQkJCXJ0aGRyW29mZiYjNDM7JiM0MztdID0gKGV4dC50aW1lc3RhbXAudW5pdCAmYW1wOyAweDBmKSB8Ci0JCQkJCSgoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiAmYW1wOyAweDBmKSAmbHQ7Jmx0OyA0KTsKLQkJCXJ0aGRyW29mZiYjNDM7JiM0MztdID0gZmxhZ3M7CiYjNDM7CQlpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyAmYW1wOyAweDAyKSB7CiYjNDM7CQkJYWNjdXJhY3kgPSBleHQudGltZXN0YW1wLmFjY3VyYWN5OwomIzQzOwkJCWZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR19BQ0NVUkFDWTsKIAkJfQomIzQzOwomIzQzOwkJYWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpOwomIzQzOwkJbWVtY3B5KHJ0aGRyICYjNDM7IG9mZiwgJmFtcDthY2NfbGUsIHNpemVvZihhY2NfbGUpKTsKJiM0MzsJCW9mZiAmIzQzOz0gc2l6ZW9mKGFjY19sZSk7CiYjNDM7CQlydGhkcltvZmYmIzQzOyYjNDM7XSA9IChleHQudGltZXN0YW1wLnVuaXQgJmFtcDsgMHgwZikgfAomIzQzOwkJCQkoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gJmFtcDsgMHgwZikgJmx0OyZsdDsgNCk7CiYjNDM7CQlydGhkcltvZmYmIzQzOyYjNDM7XSA9IGZsYWdzOwogCX0KIAogCWlmIChmb3JtYXQgPT0gTlhQV0lGSV9SQVRFX0ZPUk1BVF9IRSAmYW1wOyZhbXA7IGhhc19leHQpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG54cHdpZmkgRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgdGhlIGBueHB3aWZpYCBkcml2ZXIuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBtb3N0bHkgcmVmaW5lbWVudHMsIHRvdWNoaW5nIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgZHJpdmVyLgoKRmlyc3QsIGluIGAxMWF4LmNgLCB0aGUgYG54cHdpZmlfaXNfMTFheF90d3Rfc3VwcG9ydGVkYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYSBudWxsIGBic3NfZGVzY2AsIHdoaWNoIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLgoKVGhlbiwgYDExbi5jYCBzZWVzIGEgbWlub3IgY2hhbmdlIGluIGBueHB3aWZpXzExbl9kZWxldGVfdHhfYmFfc3RyZWFtX3RibF9lbnRyeWAsIHdpdGggdGhlIGNvbmRpdGlvbiBjaGVjayBmb3IgYHRibGAgdXBkYXRlZC4gVGhlIGBueHB3aWZpX2RlbF90eF9iYV9zdHJlYW1fdGJsX2J5X3JhYCBmdW5jdGlvbiBpcyBhbHNvIHVwZGF0ZWQgd2l0aCBhIHNhZmVyIGxpc3QgaXRlcmF0aW9uIG1ldGhvZC4KCk1vdmluZyBvbiB0byBgY2ZnODAyMTEuY2AsIGBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zYCBoYXMgYmVlbiBtb2RpZmllZCBzbyB0aGF0IGBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bWAgbm93IHByb3Blcmx5IHJldHVybnMgYW4gZXJyb3IgY29kZSBhbmQgYWNjZXB0cyBhIHBvaW50ZXIgZm9yIGBic3NfbnVtYC4gVGhlIGRlYWQgY29kZSBpbiBgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmYCBzZWVtcyB0byBoYXZlIGJlZW4gcmVtb3ZlZC4KCmBtYWluLmNgIGFuZCBgdWFwX3R4cnguY2AgYXJlIGp1c3QgZ2V0dGluZyBzb21lIGluZGVudGF0aW9uIGZpeGVzLCBub3RoaW5nIG1ham9yIHRoZXJlLgoKVGhlIGNoYW5nZXMgaW4gYG1haW4uaGAgaW5jbHVkZSB1cGRhdGluZyB0aGUgcmV0dXJuIHR5cGUgYW5kIHBhcmFtZXRlciBvZiBgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW1gIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGBueHB3aWZpX2dldF91bnVzZWRfcHJpdl9ieV9ic3NfdHlwZWAgcHJvcGVybHkgaGFuZGxlcyBlcnJvciBoYW5kbGluZy4KCmBzZGlvLmNgIGhhcyBhIHNtYWxsIGNoYW5nZSBpbiBgbnhwd2lmaV9wcm9jZXNzX2ludF9zdGF0dXNgLCBjaGFuZ2luZyBhIGRpcmVjdCBgcmV0dXJuYCB0byBhIGBnb3RvYCBmb3IgY2xlYXJlciBlcnJvciBoYW5kbGluZy4KCkZpbmFsbHksIGluIGB1dGlsLmNgLCB0aGUgYG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWZgIGZ1bmN0aW9uIHJlbW92ZXMgYW4gdW5uZWNlc3NhcnkgdGltZXN0YW1wIGNoZWNrLCB3aGljaCBwcm9iYWJseSBvcHRpbWl6ZXMgcGVyZm9ybWFuY2UuCgpPdmVyYWxsLCBpdCBsb29rcyBsaWtlIHNldmVyYWwgbWlub3IgaW1wcm92ZW1lbnRzIHRvIGVycm9yIGhhbmRsaW5nLCBjb2RlIGNsYXJpdHksIGFuZCBwb3RlbnRpYWxseSBvcHRpbWl6YXRpb24uCgpOb3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLi4uIElzIHRoaXMgYG54cHdpZmlgIGRyaXZlciBldmVuIHBhcnQgb2YgdGhlIG1haW5saW5lIGtlcm5lbD8gSSYjMzk7bGwgcXVpY2tseSB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgbm90IG1ha2luZyBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IG51bGwsCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7bnhwd2lmaSYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG54cHdpZmlgKioKCkFscmlnaHQsIHNvIGBueHB3aWZpYC4uLiBpdCBleGlzdHMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGh1cmRsZSwgYW5kIGEgZ29vZCBzdGFydC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZmlsZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgcHJlc2VudC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrIHRoZSBmdW5jdGlvbmFsaXR5IGFuZCB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLiBXaXRob3V0IGxvb2tpbmcgYXQgdGhlIGZpbGVzLCBJIGNhbiYjMzk7dCBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoaXMgdXRpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDsxMWFjLmMmIzM0OywKICAgICYjMzQ7MTFhYy5oJiMzNDssCiAgICAmIzM0OzExYXguYyYjMzQ7LAogICAgJiMzNDsxMWF4LmgmIzM0OywKICAgICYjMzQ7MTFoLmMmIzM0OywKICAgICYjMzQ7MTFuLmMmIzM0OywKICAgICYjMzQ7MTFuLmgmIzM0OywKICAgICYjMzQ7MTFuX2FnZ3IuYyYjMzQ7LAogICAgJiMzNDsxMW5fYWdnci5oJiMzNDssCiAgICAmIzM0OzExbl9yeHJlb3JkZXIuYyYjMzQ7LAogICAgJiMzNDsxMW5fcnhyZW9yZGVyLmgmIzM0OywKICAgICYjMzQ7Y2ZnLmgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTEuYyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMS5oJiMzNDssCiAgICAmIzM0O2NmcC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5oJiMzNDssCiAgICAmIzM0O2RlYnVnZnMuYyYjMzQ7LAogICAgJiMzNDtldGh0b29sLmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpZS5jJiMzNDssCiAgICAmIzM0O2luaXQuYyYjMzQ7LAogICAgJiMzNDtqb2luLmMmIzM0OywKICAgICYjMzQ7bWFpbi5jJiMzNDssCiAgICAmIzM0O21haW4uaCYjMzQ7LAogICAgJiMzNDtzY2FuLmMmIzM0OywKICAgICYjMzQ7c2Rpby5jJiMzNDssCiAgICAmIzM0O3NkaW8uaCYjMzQ7LAogICAgJiMzNDtzdGFfY2ZnLmMmIzM0OywKICAgICYjMzQ7c3RhX2NtZC5jJiMzNDssCiAgICAmIzM0O3N0YV9ldmVudC5jJiMzNDssCiAgICAmIzM0O3N0YV9yeC5jJiMzNDssCiAgICAmIzM0O3N0YV90eC5jJiMzNDssCiAgICAmIzM0O3R4cnguYyYjMzQ7LAogICAgJiMzNDt1YXBfY21kLmMmIzM0OywKICAgICYjMzQ7dWFwX2V2ZW50LmMmIzM0OywKICAgICYjMzQ7dWFwX3R4cnguYyYjMzQ7LAogICAgJiMzNDt1dGlsLmMmIzM0OywKICAgICYjMzQ7dXRpbC5oJiMzNDssCiAgICAmIzM0O3dtbS5jJiMzNDssCiAgICAmIzM0O3dtbS5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkNoZWNraW5nIERyaXZlciBSZWFjaGFiaWxpdHkgaW4gUUVNVSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcnVjaWFsLiBJJiMzOTttIHdvcmtpbmcgd2l0aCBhbiBTRElPIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBzZGlvLmNgLCBhbmQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGFjY2Vzc2liaWxpdHkgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcC4gTGV0IG1lIGNyb3NzLXJlZmVyZW5jZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYG54cHdpZmlgIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBjbHVlIHdoZXRoZXIgdGhpcyBkcml2ZXIgY2FuIGV2ZW4gKmJlKiBwYXJ0IG9mIHRoZSBidWlsZCBpbiB0aGlzIGVtdWxhdGVkIGVudmlyb25tZW50LiBUaGlzIHdpbGwgc2F2ZSBtZSBhIGxvdCBvZiB3YXN0ZWQgdGltZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlhQV0lGSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnOjI6Y29uZmlnIE5YUFdJRklcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05YUCBXaUZpIERyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMTEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnOjEyOmNvbmZpZyBOWFBXSUZJX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgyOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBOWFBXSUZJX1NESU8qKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5YUFdJRklfU0RJT2AuIFJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeWluZyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHRyb3VibGVzaG9vdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGNvbXBvbmVudHMgYE5YUFdJRklfU0RJT2AgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBjb3VsZCBpbnZvbHZlIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpYyBkcml2ZXJzLCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBtYXliZSBldmVuIGZpcm13YXJlLiBLbm93aW5nIHRoZSBkZXBlbmRlbmN5IHRyZWUgd2lsbCBiZSBjcml0aWNhbC4gSSBuZWVkIHRvIGVuc3VyZSBhIGNvbXBsZXRlIHBpY3R1cmUgZm9yIHRoaXMgd2lyZWxlc3MgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlhQV0lGSVxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlhQIFdpRmkgRHJpdmVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBOWFBcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbnhwd2lmaS5cbiAgMTE6XHRcbiAgMTI6XHRjb25maWcgTlhQV0lGSV9TRElPXG4gIDEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XCYjMzQ7XG4gIDE0Olx0XHRkZXBlbmRzIG9uIE5YUFdJRkkgXHUwMDI2XHUwMDI2IE1NQ1xuICAxNTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAxNjpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBOWFBcbiAgMTk6XHRcdCAgSVc2MXggaW50ZXJmYWNlLlxuICAyMDpcdFxuICAyMTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxuICAyMjpcdFx0ICBueHB3aWZpX3NkaW8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzMzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4KioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBoaW5nZXMgb24gYE1NQ2AuIElzIHRoaXMgYSBwaHlzaWNhbCBkcml2ZXIgZm9yIGEgaGFyZHdhcmUgY29tcG9uZW50PyBTcGVjaWZpY2FsbHksIHRoaXMgJiMzNDtOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4JiMzNDsgaXMgY29ubmVjdGVkIHZpYSBTRElPLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBTRElPIGlzIHR5cGljYWxseSBwaHlzaWNhbCBoYXJkd2FyZS4gQ2FuIFNESU8gZGV2aWNlcyBldmVuIGJlIGVtdWxhdGVkIGluIFFFTVU/IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyBub3Qgc3RhbmRhcmQuCgpMZXQmIzM5O3Mgc2Vl4oCmIGRvZXMgU3l6a2FsbGVyIHVzdWFsbHkgZnV6eiBTRElPIGhhcmR3YXJlIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciBpdCB0YXJnZXRzIHNvbWUgZ2VuZXJpYyBzdWJzeXN0ZW0/IFdhaXQsIGRpZCBTeXprYWxsZXIgcGljayB1cCBhbnkgc3VwcG9ydCBmb3IgU0RJTyBmdXp6aW5nIHJlY2VudGx5PyBOb3BlLCBubyBTRElPIGVtdWxhdGlvbiBpbiBTeXprYWxsZXIuCgpIb2xkIG9uLCBjb3VsZCBJIHJlYWNoIHRoaXMgZHJpdmVyIHZpYSBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhhdCYjMzk7cyBhIHNvZnR3YXJlIHNpbXVsYXRvciBmb3IgYG1hYzgwMjExYC4gVGhpcyBpcyBhIGZ1bGxtYWMgZHJpdmVyIHVzaW5nIGBDRkc4MDIxMWAgZGlyZWN0bHksIHNvIGl0IHJlZ2lzdGVycyB3aXRoIGBjZmc4MDIxMWAuIEJ1dCB0byBnZXQgcmVnaXN0ZXJlZCB3aXRoIGBjZmc4MDIxMWAsIHRoZSBkcml2ZXIgbmVlZHMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgYmVjYXVzZSBpdCYjMzk7cyBhbiBTRElPIGRyaXZlciwgaXQgbmVlZHMgYW4gU0RJTyBkZXZpY2UgZm9yIHRoZSBwcm9iZS4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFsdGVybmF0ZSBpbnRlcmZhY2VzIGxpa2UgVVNCIG9yIFBDSWUgYXZhaWxhYmxlLiBUaGUgS2NvbmZpZyBvbmx5IG1lbnRpb25zIGBOWFBXSUZJX1NESU9gLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSYjMzk7cyBhIFVTQiBvciBQQ0kgZHJpdmVyIGZsb2F0aW5nIGFyb3VuZCBzb21ld2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYz0xNjYwPW54cHdpZmlfY2xlYW51cF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMtMTY2Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYzoxNjY3Om1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jLTE2NjgtbW9kdWxlX2V4aXQobnhwd2lmaV9jbGVhbnVwX21vZHVsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNzYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhpcyBkb21haW46CgoqKkFuYWx5emluZyBgbnhwd2lmaV9pbml0X21vZHVsZWAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbnhwd2lmaV9pbml0X21vZHVsZWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGlzIGRvaW5nLCBob3cgaXQgaW5pdGlhbGl6ZXMsIGFuZCB3aGF0IGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSBzeXN0ZW0gaXMuIElzIGl0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGZvcm1pbmcgaHlwb3RoZXNlcyDigJMgd2hhdCBrZXkgZnVuY3Rpb25zIHdpbGwgaXQgbGlrZWx5IGNhbGw/IFdoYXQgcmVzb3VyY2VzIGlzIGl0IHByb2JhYmx5IG1hbmFnaW5nPyBUaGlzIGlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLCB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGRlZXBseSB1bmRlcnN0YW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjQwOlx0XHRcdGRldl9pbmZvKGFkYXB0ZXItXHUwMDNlZGV2LCBcJiMzNDslcFZcJiMzNDssIFx1MDAyNnZhZik7XG4xNjQxOlx0XHRlbHNlXG4xNjQyOlx0XHRcdHByX2luZm8oXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuMTY0MzpcdFxuMTY0NDpcdFx0dmFfZW5kKGFyZ3MpO1xuMTY0NTpcdH1cbjE2NDY6XHRFWFBPUlRfU1lNQk9MX0dQTChfbnhwd2lmaV9kYmcpO1xuMTY0NzpcdFxuMTY0ODpcdC8qIE1vZHVsZSBpbml0OiBpbml0IGRlYnVnZnMgaWYgZW5hYmxlZC4gKi9cbjE2NDk6XHRzdGF0aWMgaW50XG4xNjUwOlx0bnhwd2lmaV9pbml0X21vZHVsZSh2b2lkKVxuMTY1MTpcdHtcbjE2NTI6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG4xNjUzOlx0XHRueHB3aWZpX2RlYnVnZnNfaW5pdCgpO1xuMTY1NDpcdCNlbmRpZlxuMTY1NTpcdFx0cmV0dXJuIDA7XG4xNjU2Olx0fVxuMTY1NzpcdFxuMTY1ODpcdC8qIE1vZHVsZSBleGl0OiByZW1vdmUgZGVidWdmcyBpZiBlbmFibGVkLiAqL1xuMTY1OTpcdHN0YXRpYyB2b2lkXG4xNjYwOlx0bnhwd2lmaV9jbGVhbnVwX21vZHVsZSh2b2lkKVxuMTY2MTpcdHtcbjE2NjI6XHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG4xNjYzOlx0XHRueHB3aWZpX2RlYnVnZnNfcmVtb3ZlKCk7XG4xNjY0Olx0I2VuZGlmXG4xNjY1Olx0fVxuMTY2NjpcdFxuMTY2NzpcdG1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xuMTY2ODpcdG1vZHVsZV9leGl0KG54cHdpZmlfY2xlYW51cF9tb2R1bGUpO1xuMTY2OTpcdFxuMTY3MDpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7TlhQIEludGVybmF0aW9uYWwgTHRkLlwmIzM0Oyk7XG4xNjcxOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O05YUCBXaUZpIERyaXZlciB2ZXJzaW9uIFwmIzM0OyBWRVJTSU9OKTtcbjE2NzI6XHRNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTtcbjE2NzM6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guLi4KCioqRHJpdmVyIEluaXRpYWxpemF0aW9uIEh1bnQqKgoKSG1tLCBzbyBgbnhwd2lmaV9pbml0X21vZHVsZWAgcHJpbWFyaWx5IHNldHMgdXAgZGVidWdmcywgcmlnaHQ/IFRoYXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSB3aGVyZSB0aGUgY29yZSBkcml2ZXIgcmVnaXN0cmF0aW9uIGhhcHBlbnMuIFRoYXQmIzM5O3MgYSBiaXQgdG9vIHNpbXBsZSBmb3IgdGhlIG1haW4gZHJpdmVyIGVudHJ5IHBvaW50LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBXaGVyZSYjMzk7cyB0aGUgYG1vZHVsZV9pbml0YCBmb3IgdGhlICpyZWFsKiBkcml2ZXI/IE15IGd1dCBzYXlzIGl0JiMzOTtzIGluIGEgZmlsZSByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGludGVyZmFjZS4gU2luY2UgdGhpcyBpcyBXaS1GaSwgYW5kIHRoZSBtb2R1bGUgbmFtZSBzdWdnZXN0cyBTRElPLCBgc2Rpby5jYCBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBsb29rLiBJdCBsaWtlbHkgaGFzIGl0cyBvd24gYG1vZHVsZV9pbml0YCB0aGF0IGNvbm5lY3RzIHRoZSBkb3RzIGJldHdlZW4gdGhlIFNESU8gaW50ZXJmYWNlIGFuZCB0aGUgV2ktRmkgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bGwgYmV0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdHVhbCBkcml2ZXIgcmVnaXN0cmF0aW9uLCBwcm9iZSwgYW5kIGV2ZXJ5dGhpbmcgaGFwcGVucy4gVGltZSB0byBjb25maXJtIGFuZCBkaXZlIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIFNESU8gZHJpdmVyIGlzIHJlZ2lzdGVyZWQsIGFuZCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyBgc2Rpby5jYC4gVGhhdCBmaWxlIGlzIHVzdWFsbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIFNESU8tc3BlY2lmaWMgb3BlcmF0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIGBzZGlvX3JlZ2lzdGVyX2RyaXZlcmAgZnVuY3Rpb24sIGFzIHRoYXQmIzM5O3MgY2xlYXJseSB0aGUga2V5IGZ1bmN0aW9uIGZvciB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGFuZCBhdHRhY2htZW50IHRvIHRoZSBTRElPIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGRyaXZlciBzdHJ1Y3R1cmUgaXMgcGFzc2VkLCB3aGF0IHRoZSBkZXZpY2UgbWF0Y2hpbmcgcHJvY2VzcyBsb29rcyBsaWtlLCBhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIG1hbmFnZWQgYXQgdGhpcyBzdGFnZS4gSSBleHBlY3QgdG8gZmluZCBpbmZvcm1hdGlvbiBvbiBwcm9iZSBhbmQgcmVtb3ZlIGZ1bmN0aW9ucyBoZXJlLCBhbmQgaWRlYWxseSwgaG9va3MgZm9yIGludGVycnVwdCBoYW5kbGluZyBhcyB3ZWxsLiBGaW5kaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIHRoZSBlbnRyeSBwb2ludCBpbnRvIHRoZSBkcml2ZXImIzM5O3MgbGlmZWN5Y2xlIGFuZCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBpdHMgb3ZlcmFsbCByb2xlIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Rpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI2OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKioKCkhtbSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgU0RJTyBkcml2ZXIgaXMgZ2V0dGluZyByZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLCByaWdodD8gQWxyaWdodCwgbGV0JiMzOTtzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2Ug4oCTIG5vIG5lZWQgdG8gYmVhdCBhcm91bmQgdGhlIGJ1c2guIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgc2Rpby5jYCBmaWxlLiBUaGUgZmFzdGVzdCB3YXkgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCBpcyB0byBsb29rIGZvciB0aGUga2V5IGZ1bmN0aW9uczogSSYjMzk7bSBsb29raW5nIGZvciBlaXRoZXIgYSBgbW9kdWxlX2luaXRgIG1hY3JvLCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBzdGFuZGFyZCB3YXkgdG8gc2V0IHVwIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiB0aGUga2VybmVsLCBvciBhIGRpcmVjdCBjYWxsIHRvIGEgYHJlZ2lzdGVyYCBmdW5jdGlvbi4gSSBleHBlY3Qgb25lIG9mIHRob3NlIGlzIGdvaW5nIHRvIHRlbGwgbWUgZXhhY3RseSBob3cgYW5kIHdoZW4gdGhpcyB0aGluZyBpcyBob29rZWQgaW50byB0aGUgc3lzdGVtLiBJdCBzaG91bGQgYmUgcHJldHR5IG9idmlvdXMsIGFuZCBmcm9tIHRoZXJlIEkgY2FuIHRyYWNlIHRoZSBjYWxsIGZsb3cgaWYgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9NTEwPXN0YXRpYyBpbnQgbnhwd2lmaV9pbml0X3NkaW9fbmV3X21vZGUoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjUyNzpcdC8qIENvbmZpZ3VyZSBjbWQgcG9ydCBhbmQgZW5hYmxlIHJlYWRpbmcgcnggbGVuZ3RoIGZyb20gdGhlIHJlZ2lzdGVyICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI4LVx0cmV0ID0gbnhwd2lmaV9yZWFkX3JlZyhhZGFwdGVyLCBjYXJkLVx1MDAzZXJlZy1cdTAwM2VjbWRfY2ZnXzAsIFx1MDAyNnJlZyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTczMD1zdGF0aWMgaW50IG54cHdpZmlfc2Rpb19lbmFibGVfaG9zdF9pbnQoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNzQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjc0NTpcdC8qIFNpbXBseSB3cml0ZSB0aGUgbWFzayB0byB0aGUgcmVnaXN0ZXIgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy03NDYtXHRyZXQgPSBueHB3aWZpX3dyaXRlX3JlZ19sb2NrZWQoZnVuYywgY2FyZC1cdTAwM2VyZWctXHUwMDNlaG9zdF9pbnRfbWFza19yZWcsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTc5Mj1zdGF0aWMgaW50IG54cHdpZmlfcHJvZ19md193X2hlbHBlcihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NDMtXHRcdFx0XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzo4NDQ6XHRcdFx0XHRcdCAgICBcJiMzNDtkZXYgQkFTRTAgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6XFx0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtODQ1LVx0XHRcdFx0XHQgICAgXCYjMzQ7YmFzZTA9JSMwNFgoJWQpLiBUZXJtaW5hdGluZyBkbmxkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NTItXHRcdFx0XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzo4NTM6XHRcdFx0XHRcdCAgICBcJiMzNDtkZXYgQkFTRTEgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6XFx0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtODU0LVx0XHRcdFx0XHQgICAgXCYjMzQ7YmFzZTE9JSMwNFgoJWQpLiBUZXJtaW5hdGluZyBkbmxkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYz0xNjI1PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTYyNjpueHB3aWZpX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYyNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2MzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTYzODpzdGF0aWMgaW50IG54cHdpZmlfcmVnaXN0ZXJfZGV2KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYzOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTE2ODM9c3RhdGljIGludCBueHB3aWZpX2luaXRfc2RpbyhzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0xNjk0LVx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJiMzOTt0IGRvIHRoaXMgd2UgZ2V0IGEgaW50ZXJydXB0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTY5NTpcdCAqIGFzIHNvb24gYXMgd2UgcmVnaXN0ZXIgdGhlIGlycS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0xNjk2LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIxNTY9c3RhdGljIHZvaWQgbnhwd2lmaV9zZGlvX2RldmljZV9kdW1wKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjE2NTovKiBEdW1wIFNESU8gZnVuY3Rpb24gYW5kIHNjcmF0Y2ggcmVnaXN0ZXJzIGludG8gZHJ2X2J1Zi4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTY2LXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYz0yMTY3PW54cHdpZmlfc2Rpb19yZWdfZHVtcChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCBjaGFyICpkcnZfYnVmKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTc4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIxNzk6XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBNU0csIFwmIzM0O1NESU8gcmVnaXN0ZXIgZHVtcCBzdGFydFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE4MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE5MC1cdFx0Y2FzZSAwOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIxOTE6XHRcdFx0LyogUmVhZCB0aGUgcmVnaXN0ZXJzIG9mIFNESU8gZnVuY3Rpb24wICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE5Mi1cdFx0XHRmdW5jID0gY291bnQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTYtXHRcdGNhc2UgMTpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTk3Olx0XHRcdC8qIFJlYWQgdGhlIHJlZ2lzdGVycyBvZiBTRElPIGZ1bmN0aW9uMSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTgtXHRcdFx0ZnVuYyA9IGNvdW50O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjA5LVx0XHRkZWZhdWx0OlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIyMTA6XHRcdFx0LyogUmVhZCB0aGUgc2NyYXRjaCByZWdpc3RlcnMgb2YgU0RJTyBmdW5jdGlvbjEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjExLVx0XHRcdGlmIChjb3VudCA9PSA0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIyNTM6XHRueHB3aWZpX2RiZyhhZGFwdGVyLCBNU0csIFwmIzM0O1NESU8gcmVnaXN0ZXIgZHVtcCBlbmRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyNTQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIyNTg9c3RhdGljIHZvaWQgbnhwd2lmaV9zZGlvX3VwX2RldihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjg1LVx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJiMzOTt0IGRvIHRoaXMgd2UgZ2V0IGEgaW50ZXJydXB0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjI4NjpcdCAqIGFzIHNvb24gYXMgd2UgcmVnaXN0ZXIgdGhlIGlycS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjg3LVx0ICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIyOTQ9c3RhdGljIHN0cnVjdCBueHB3aWZpX2lmX29wcyBzZGlvX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjI5OS1cdC5wcm9nX2Z3ID0gbnhwd2lmaV9wcm9nX2Z3X3dfaGVscGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIzMDA6XHQucmVnaXN0ZXJfZGV2ID0gbnhwd2lmaV9yZWdpc3Rlcl9kZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjMwMTpcdC51bnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfdW5yZWdpc3Rlcl9kZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjMwMi1cdC5lbmFibGVfaW50ID0gbnhwd2lmaV9zZGlvX2VuYWJsZV9ob3N0X2ludCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0OTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFNESU8gRHJpdmVyIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgU0RJTyBzaXR1YXRpb24gYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIG91dCB0aGUgZXNzZW50aWFsIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4gSSBzZWUgYHNkaW9fb3BzYCBpbiB0aGUgbWl4LCBhbmQgaXQgaGFzIGByZWdpc3Rlcl9kZXZgIGFuZCBgdW5yZWdpc3Rlcl9kZXZgIG1ldGhvZHMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHVuZGVyc3RhbmQgdGhhdCBhbnkgZHJpdmVyIHJlZ2lzdGVyaW5nIHdpdGggU0RJTyBpcyBsaWtlbHkgdXRpbGl6aW5nIHRoZXNlLgoKTm93LCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXRzZWxmLCB0aGVuIEkgc2hvdWxkIGludmVzdGlnYXRlIGBzZGlvLmNgLiBLbm93aW5nIGhvdyB0aGUgU0RJTyBmcmFtZXdvcmsgd29ya3MsIG15IG5leHQgbW92ZSB3b3VsZCBiZSB0byBsb29rIGZvciBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBjZW50cmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGhvdyBhIG5ldyBTRElPIGRyaXZlciBnZXRzIGludGVncmF0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIGhhcHBlbmluZyB0aGVyZS4gQW5kIGxpa2VseSB1bnJlZ2lzdHJhdGlvbiB0aGVyZSBhcyB3ZWxsLCBidXQgYHVucmVnaXN0ZXJfZGV2YCBvZiBgc2Rpb19vcHNgIG1heSBiZSB0aGUgY29yZSBvZiB0aGF0IHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2Rpb19yZWdpc3Rlcl9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFNESU8gRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgKmhvdyogdGhpcyBTRElPIGRyaXZlciBpcyBiZWluZyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGNoZWNrIHRoZSBlbmQgb2YgdGhlIGBzZGlvLmNgIHNvdXJjZSBmaWxlLiBPZnRlbiwgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gcm91dGluZXMgYXJlIHBsYWNlZCB0aGVyZSwgbG9naWNhbGx5IHR5aW5nIHRoZSBmaWxlJiMzOTtzIHByaW1hcnkgZnVuY3Rpb25hbGl0eSB0byB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gZGlnZ2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBzZGlvLmNgJiMzOTtzIHRhaWwgaGFzIHRvIHRlbGwgdXMuIEkmIzM5O2xsIGJldCBpdCYjMzk7cyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMDA6XHRcdC5yZWdpc3Rlcl9kZXYgPSBueHB3aWZpX3JlZ2lzdGVyX2RldixcbjIzMDE6XHRcdC51bnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfdW5yZWdpc3Rlcl9kZXYsXG4yMzAyOlx0XHQuZW5hYmxlX2ludCA9IG54cHdpZmlfc2Rpb19lbmFibGVfaG9zdF9pbnQsXG4yMzAzOlx0XHQuZGlzYWJsZV9pbnQgPSBueHB3aWZpX3NkaW9fZGlzYWJsZV9ob3N0X2ludCxcbjIzMDQ6XHRcdC5wcm9jZXNzX2ludF9zdGF0dXMgPSBueHB3aWZpX3Byb2Nlc3NfaW50X3N0YXR1cyxcbjIzMDU6XHRcdC5ob3N0X3RvX2NhcmQgPSBueHB3aWZpX3NkaW9faG9zdF90b19jYXJkLFxuMjMwNjpcdFx0Lndha2V1cCA9IG54cHdpZmlfcG1fd2FrZXVwX2NhcmQsXG4yMzA3Olx0XHQud2FrZXVwX2NvbXBsZXRlID0gbnhwd2lmaV9wbV93YWtldXBfY2FyZF9jb21wbGV0ZSxcbjIzMDg6XHRcbjIzMDk6XHRcdC8qIFNESU8gc3BlY2lmaWMgKi9cbjIzMTA6XHRcdC51cGRhdGVfbXBfZW5kX3BvcnQgPSBueHB3aWZpX3VwZGF0ZV9tcF9lbmRfcG9ydCxcbjIzMTE6XHRcdC5jbGVhbnVwX21wYV9idWYgPSBueHB3aWZpX2NsZWFudXBfbXBhX2J1ZixcbjIzMTI6XHRcdC5jbWRyc3BfY29tcGxldGUgPSBueHB3aWZpX3NkaW9fY21kcnNwX2NvbXBsZXRlLFxuMjMxMzpcdFx0LmV2ZW50X2NvbXBsZXRlID0gbnhwd2lmaV9zZGlvX2V2ZW50X2NvbXBsZXRlLFxuMjMxNDpcdFx0LmRubGRfZncgPSBueHB3aWZpX3NkaW9fZG5sZF9mdyxcbjIzMTU6XHRcdC5jYXJkX3Jlc2V0ID0gbnhwd2lmaV9zZGlvX2NhcmRfcmVzZXQsXG4yMzE2Olx0XHQucmVnX2R1bXAgPSBueHB3aWZpX3NkaW9fcmVnX2R1bXAsXG4yMzE3Olx0XHQuZGV2aWNlX2R1bXAgPSBueHB3aWZpX3NkaW9fZGV2aWNlX2R1bXAsXG4yMzE4Olx0XHQuZGVhZ2dyX3BrdCA9IG54cHdpZmlfZGVhZ2dyX3NkaW9fcGt0LFxuMjMxOTpcdFx0LnVwX2RldiA9IG54cHdpZmlfc2Rpb191cF9kZXYsXG4yMzIwOlx0fTtcbjIzMjE6XHRcbjIzMjI6XHRtb2R1bGVfc2Rpb19kcml2ZXIobnhwd2lmaV9zZGlvKTtcbjIzMjM6XHRcbjIzMjQ6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O05YUCBJbnRlcm5hdGlvbmFsIEx0ZC5cJiMzNDspO1xuMjMyNTpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtOWFAgV2lGaSBTRElPIERyaXZlciB2ZXJzaW9uIFwmIzM0OyBTRElPX1ZFUlNJT04pO1xuMjMyNjpcdE1PRFVMRV9WRVJTSU9OKFNESU9fVkVSU0lPTik7XG4yMzI3Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbjIzMjg6XHRNT0RVTEVfRklSTVdBUkUoSVc2MVhfU0RJT19GV19OQU1FKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqU0RJTyBEcml2ZXIgQW5hbHlzaXMqKgoKT2theSwgc28gSSBzZWUgdGhpcyBgbW9kdWxlX3NkaW9fZHJpdmVyKG54cHdpZmlfc2Rpbyk7YCBjYWxsLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGNvZGUgcmVnaXN0ZXJzIGFuIFNESU8gZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiAqZnV6eiogU0RJTyBkcml2ZXJzPyBJdCYjMzk7cyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsb29rZWQgY2xvc2VseSBhdCBpdHMgY2FwYWJpbGl0aWVzLiBOb3csIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgc3l6a2FsbGVyIGhhcyBhIGdvb2QgVVNCIGVtdWxhdGlvbiB1c2luZyBgZHVtbXlfaGNkYCwgYW5kIGl0IGhhcyBzb21lIGxpbWl0ZWQgUENJIHN1cHBvcnQsIHRob3VnaCB1c3VhbGx5IG5vdCB0YXJnZXRlZCBhdCBzcGVjaWZpYyBkZXZpY2VzLiBCdXQgSSBkb24mIzM5O3QgdGhpbmsgaXQgaGFzIHByb3BlciBTRElPIGVtdWxhdGlvbiDigJMgaW4gZmFjdCwgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCAqZG9lc24mIzM5O3QqLiBTbywgdGhhdCBwYXRoIGxvb2tzIGJsb2NrZWQuCgpIb2xkIG9uLCBiZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJiMzOTt0IGluc3RhbnRpYXRlZCB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIElzIHRoZXJlICphbnkqIGNoYW5jZSB0aGF0IHRoaXMgYG54cHdpZmlgIGRldmljZSBpcyBzb21laG93IGFsc28gc3VwcG9ydGVkIHRocm91Z2ggYSBQQ0kgb3IgVVNCIGludGVyZmFjZT8gVGhhdCYjMzk7cyB0aGUgb25seSBvdGhlciB3YXkgSSBjYW4gdGhpbmsgb2YgdGhhdCBtaWdodCBvZmZlciBhIHN5emthbGxlciBlbnRyeXBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV91c2JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwNjcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRElPIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgYW5kIGl0JiMzOTtzIGNvbmZpcm1lZCwgaXQmIzM5O3MganVzdCBhbiBTRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gU0RJTyBkZXZpY2VzIGJlIGZ1enplZCBlZmZlY3RpdmVseT8gSSYjMzk7bSBpbW1lZGlhdGVseSByZW1pbmRlZCBvZiB0aGUgZGlmZmljdWx0aWVzIGluIGZ1enppbmcgZHJpdmVycyB0aGF0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMsIG9yIFNtYXJ0TklDcywgb3IgR1BVcy4gVGhvc2UgdXN1YWxseSByZXF1aXJlIGFjdHVhbCBQQ0llIGNhcmRzLCB3aGljaCBRRU1VIGRvZXNuJiMzOTt0IGZ1bGx5IGVtdWxhdGUuIFRoZSBzYW1lIHdvdWxkIGFwcGx5IHRvIFNESU8sIHdoaWNoIGFsc28gZGVtYW5kcyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkb3VibGUtY2hlY2sgaWYgUUVNVSBldmVuIHByb3ZpZGVzIGFueSBTRElPIGVtdWxhdGlvbiB0aGF0IHN5emthbGxlciBjb3VsZCBsZXZlcmFnZS4KCkkga25vdyBRRU1VICpkb2VzKiBoYXZlIFNEIGNhcmQgZW11bGF0aW9uLCBidXQgU0RJTyBpcyBkaXN0aW5jdC4gRXZlbiBpZiB0aGVyZSYjMzk7cyBzb21lIFNESU8gc3VwcG9ydCwgSSBkb3VidCBzeXprYWxsZXIgaGFzIGEgbWVjaGFuaXNtIHRvIGluamVjdCBTRElPIGRldmljZXMgYW5kIGZ1enogdGhlbSBsaWtlIGl0IGRvZXMgd2l0aCBVU0IgdXNpbmcgcmF3LWdhZGdldCBvciBkdW1teV9oY2QuCgpOb3csIGEgcG9zc2liaWxpdHkgcG9wcyBpbnRvIG15IGhlYWQuIENvdWxkIHRoaXMgZHJpdmVyIGJlIGFjY2Vzc2VkIHZpYSBgbWFjODAyMTFfaHdzaW1gPyBCdXQgbm8sIGBtYWM4MDIxMV9od3NpbWAgaXMgYSBzb2Z0d2FyZSBzaW11bGF0b3IgZm9yIGBtYWM4MDIxMWAsIGFuZCB0aGlzIGRyaXZlciB1dGlsaXplcyBgQ0ZHODAyMTFgIGRpcmVjdGx5LCBzbyBpdCYjMzk7cyBhICYjMzQ7ZnVsbG1hYyYjMzQ7IGRyaXZlci4gSXQgcmVnaXN0ZXJzIGRpcmVjdGx5IHdpdGggY2ZnODAyMTEuIEJ1dCB0aGF0IHJlcXVpcmVzIGl0IHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBmaXJzdC4gQW5kIGJlaW5nIGFuIFNESU8gZHJpdmVyLCBwcm9iaW5nIHJlcXVpcmVzIGFuIFNESU8gZGV2aWNlLgoKSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGludGVyZmFjZXMgSSBtaWdodCBoYXZlIG1pc3NlZCAoVVNCLCBQQ0llKS4gVGhlIEtjb25maWcgb25seSBtZW50aW9ucyBgTlhQV0lGSV9TRElPYC4gUmlnaHQuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIFBDSSBvciBVU0IgZHJpdmVycywganVzdCB0byBiZSB0aG9yb3VnaC4gV2FpdCwgSSBhbHJlYWR5IGNoZWNrZWQgZm9yIFBDSSBhbmQgVVNCIGRyaXZlcnMgdXNpbmcgYG1vZHVsZV9wY2lfZHJpdmVyYCBhbmQgYG1vZHVsZV91c2JfZHJpdmVyYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIHRoZSBvdGhlciBmaWxlcyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvYCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDsxMWFjLmMmIzM0OywKICAgICYjMzQ7MTFhYy5oJiMzNDssCiAgICAmIzM0OzExYXguYyYjMzQ7LAogICAgJiMzNDsxMWF4LmgmIzM0OywKICAgICYjMzQ7MTFoLmMmIzM0OywKICAgICYjMzQ7MTFuLmMmIzM0OywKICAgICYjMzQ7MTFuLmgmIzM0OywKICAgICYjMzQ7MTFuX2FnZ3IuYyYjMzQ7LAogICAgJiMzNDsxMW5fYWdnci5oJiMzNDssCiAgICAmIzM0OzExbl9yeHJlb3JkZXIuYyYjMzQ7LAogICAgJiMzNDsxMW5fcnhyZW9yZGVyLmgmIzM0OywKICAgICYjMzQ7Y2ZnLmgmIzM0OywKICAgICYjMzQ7Y2ZnODAyMTEuYyYjMzQ7LAogICAgJiMzNDtjZmc4MDIxMS5oJiMzNDssCiAgICAmIzM0O2NmcC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5jJiMzNDssCiAgICAmIzM0O2NtZGV2dC5oJiMzNDssCiAgICAmIzM0O2RlYnVnZnMuYyYjMzQ7LAogICAgJiMzNDtldGh0b29sLmMmIzM0OywKICAgICYjMzQ7ZncuaCYjMzQ7LAogICAgJiMzNDtpZS5jJiMzNDssCiAgICAmIzM0O2luaXQuYyYjMzQ7LAogICAgJiMzNDtqb2luLmMmIzM0OywKICAgICYjMzQ7bWFpbi5jJiMzNDssCiAgICAmIzM0O21haW4uaCYjMzQ7LAogICAgJiMzNDtzY2FuLmMmIzM0OywKICAgICYjMzQ7c2Rpby5jJiMzNDssCiAgICAmIzM0O3NkaW8uaCYjMzQ7LAogICAgJiMzNDtzdGFfY2ZnLmMmIzM0OywKICAgICYjMzQ7c3RhX2NtZC5jJiMzNDssCiAgICAmIzM0O3N0YV9ldmVudC5jJiMzNDssCiAgICAmIzM0O3N0YV9yeC5jJiMzNDssCiAgICAmIzM0O3N0YV90eC5jJiMzNDssCiAgICAmIzM0O3R4cnguYyYjMzQ7LAogICAgJiMzNDt1YXBfY21kLmMmIzM0OywKICAgICYjMzQ7dWFwX2V2ZW50LmMmIzM0OywKICAgICYjMzQ7dWFwX3R4cnguYyYjMzQ7LAogICAgJiMzNDt1dGlsLmMmIzM0OywKICAgICYjMzQ7dXRpbC5oJiMzNDssCiAgICAmIzM0O3dtbS5jJiMzNDssCiAgICAmIzM0O3dtbS5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyNTIKCQkJCQkJCW91dHB1dDogOTgKCQkJCQkJCXRob3VnaHRzOiA2MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUmIzM5O3MgbXkgY29uY2x1c2lvbi4gRmlyc3Qgb2ZmLCB0aGUgZmlsZSBsaXN0IGltbWVkaWF0ZWx5IGNsdWVzIG1lIGluLiBUaGlzIHBhdGNoIGlzIHNvbGVseSB0b3VjaGluZyB0aGUgYHNkaW8uY2AgZmlsZSB3aXRoaW4gdGhlIE5YUCBXaS1GaSBkcml2ZXIsIGFuZCByZWxhdGVkIGZpbGVzLiBUaGVyZSYjMzk7cyBubyBtZW50aW9uIG9mIGFueSBnZW5lcmljIFVTQiwgUENJZSwgb3Igb3RoZXIgY29yZSBrZXJuZWwgY29tcG9uZW50cywganVzdCB0aGUgTlhQIHNwZWNpZmljIFNESU8gaW1wbGVtZW50YXRpb24uCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhpcyBkcml2ZXIgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIE5YUCBJVzYxeCBoYXJkd2FyZS4gIFRoaXMgaXNuJiMzOTt0IGFuIFNESU8gZ2VuZXJpYyBkcml2ZXI7IGl0JiMzOTtzIGEgKnZlbmRvci1zcGVjaWZpYyogZHJpdmVyLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoaXMga2luZCBvZiBoYXJkd2FyZSBwcm9wZXJseSwgd2hpY2ggbWVhbnMgdGhlIGNvZGUgcGF0aHMgd2l0aGluIHRoaXMgZHJpdmVyIGFyZSBzaW1wbHkgdW5yZWFjaGFibGUgaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIHRoZSB2ZXJ5IGtpbmQgZnV6emluZyB3b3VsZCBiZSBkb25lIG9uLgoKSSBhbHNvIGRvdWJsZS1jaGVja2VkIHdpdGggbXkga25vd2xlZGdlIG9mIFN5emthbGxlciYjMzk7cyBjYXBhYmlsaXRpZXMuIEkga25vdyBpdCBjYW4gZnV6eiBVU0IgdmlhIGBkdW1teV9oY2RgLCBQQ0kgdG8gYSBsaW1pdGVkIGV4dGVudCwgYW5kIHZoY2kgZm9yIGJsdWV0b290aCwgYnV0IEkmIzM5O20gY2VydGFpbiB0aGVyZSYjMzk7cyBubyBrbm93biBzdXBwb3J0IGZvciBTRElPLiAgVGhlIGRvY3VtZW50YXRpb24gYWxzbyBjb25maXJtcyBteSBhc3Nlc3NtZW50LiBJdCBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGNvZGUgcGF0aHMgdGhhdCBhcmUgb25seSByZWFjaGFibGUgd2l0aCBwaHlzaWNhbCBoYXJkd2FyZSB1bmF2YWlsYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgc2hvdWxkbiYjMzk7dCBiZSBjb25zaWRlcmVkIGZvciBmdXp6aW5nLCBhbmQgdGhpcyBjbGVhcmx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4KCkZpbmFsbHksIEkgY2FyZWZ1bGx5IHJldmlld2VkIHRoZSBwYXRjaCBmaWxlcyB0aGVtc2VsdmVzOiBgMTFheC5jYCwgYDExbi5jYCwgYGNmZzgwMjExLmNgLCBgbWFpbi5jYCwgYG1haW4uaGAsIGBzZGlvLmNgLCBgdWFwX3R4cnguY2AsIGFuZCBgdXRpbC5jYCwgYWxsIGluIHRoZSBgbnhwd2lmaWAgZGlyZWN0b3J5LiBUaGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIE5YUCBXaUZpIGRyaXZlciwgYW5kIHRoZXkgcmVxdWlyZSBhIHBoeXNpY2FsIFNESU8gaW50ZXJmYWNlLiBJIGNhbiBjb25maXJtIHRoaXMgcGF0Y2ggb25seSBhZmZlY3RzIHRoZSBOWFAgV2lGaSBkcml2ZXIsIGFuZCB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AgZGlyZWN0b3J5LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgZHJpdmVyIGlzIGhhcmR3YXJlLXNwZWNpZmljLCBhbmQgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlhQIFdpRmkgZHJpdmVyIChueHB3aWZpKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU0RJTyBkcml2ZXIgZm9yIE5YUCBJVzYxeCBoYXJkd2FyZS4gU2luY2UgdGhpcyByZXF1aXJlcyBwaHlzaWNhbCBTRElPIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjUwLjkzOTY2OTgyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNTY0MzQ1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTAuOTM5Njg3MjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0OTQ1NTU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI3MjA1NWNhOTlkNDQ5ZTNkMjgxYzE2MzA4OTIyZmZjYzY4MGRmYTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxOTo0NTo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmNcXG5pbmRleCBjYzQ3YzQzNWViNzBhLi45NjU0MDkxNGYzY2Y2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExYXguY1xcbkBAIC00MTMsNyArNDEzLDEwIEBAIGJvb2wgbnhwd2lmaV9pc18xMWF4X3R3dF9zdXBwb3J0ZWQoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcXG4gXFx0c3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICp1c2VyX2hlX2NhcDtcXG4gXFx0c3RydWN0IG54cHdpZmlfaWVfdHlwZXNfaGVfY2FwICpod19oZV9jYXA7XFxuIFxcbi1cXHRpZiAoYnNzX2Rlc2MgXFx1MDAyNlxcdTAwMjYgKCFueHB3aWZpX2lzX2FwXzExYXhfdHd0X3N1cHBvcnRlZChic3NfZGVzYykpKSB7XFxuK1xcdGlmICghYnNzX2Rlc2MpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghbnhwd2lmaV9pc19hcF8xMWF4X3R3dF9zdXBwb3J0ZWQoYnNzX2Rlc2MpKSB7XFxuIFxcdFxcdG54cHdpZmlfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIE1TRyxcXG4gXFx0XFx0XFx0ICAgIFxcXCJBUCBkb24ndCBzdXBwb3J0IHR3dCBmZWF0dXJlXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXFxuaW5kZXggZTQ2YzUwNTNkNTA5MC4uYzJhNTRkNzgxYjQyYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXFxuQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkXFxuIG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsKVxcbiB7XFxuLVxcdGlmICghdGJsIFxcdTAwMjZcXHUwMDI2IG54cHdpZmlfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChwcml2LCB0YmwpKVxcbitcXHRpZiAoIXRibCB8fCBueHB3aWZpX2lzX3R4X2JhX3N0cmVhbV9wdHJfdmFsaWQocHJpdiwgdGJsKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bnhwd2lmaV9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgSU5GTyxcXG5AQCAtNjk0LDcgKzY5NCw3IEBAIGludCBueHB3aWZpX2dldF90eF9iYV9zdHJlYW1fdGJsKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXFxuIC8qIERlbGV0ZSBUeCBCQSBzdHJlYW0gZW50cnkgYnkgUkEuICovXFxuIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXFxuIHtcXG4tXFx0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsO1xcbitcXHRzdHJ1Y3Qgbnhwd2lmaV90eF9iYV9zdHJlYW1fdGJsICp0YmwsICp0bXA7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0aWYgKCFyYSlcXG5AQCAtNzAyLDcgKzcwMiw4IEBAIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX05VTV9USUQ7IGkrKykge1xcbiBcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2JhX3N0cmVhbV90YmxfbG9ja1tpXSk7XFxuLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRibCwgXFx1MDAyNnByaXYtXFx1MDAzZXR4X2JhX3N0cmVhbV90YmxfcHRyW2ldLCBsaXN0KVxcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGJsLCB0bXAsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cHJpdi1cXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXFxuIFxcdFxcdFxcdGlmICghbWVtY21wKHRibC1cXHUwMDNlcmEsIHJhLCBFVEhfQUxFTikpXFxuIFxcdFxcdFxcdFxcdG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5KHByaXYsIHRibCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbmluZGV4IGM4MjBmMDhkMjgzNTUuLjVjYzhjZGY1OTRkM2UgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcXG5AQCAtNzE3LDYgKzcxNyw3IEBAIG54cHdpZmlfaW5pdF9uZXdfcHJpdl9wYXJhbXMoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpXFxuIHtcXG4gXFx0c3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtXFx1MDAzZWFkYXB0ZXI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRueHB3aWZpX2luaXRfcHJpdihwcml2KTtcXG4gXFxuQEAgLTc0MCw3ICs3NDEsMTUgQEAgbnhwd2lmaV9pbml0X25ld19wcml2X3BhcmFtcyhzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcdH1cXG4gXFxuLVxcdHByaXYtXFx1MDAzZWJzc19udW0gPSBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBwcml2LVxcdTAwM2Vic3NfdHlwZSk7XFxuK1xcdHJldCA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXFx1MDAzZWJzc190eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnByaXYtXFx1MDAzZWJzc19udW0pO1xcbitcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcXG4rXFx0XFx0XFx0ICAgIFxcXCIlczogbm8gdW51c2VkIGJzc19udW0gZm9yIHR5cGUgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBkZXYtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZWJzc190eXBlKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKGFkYXB0ZXItXFx1MDAzZXdvcmtxdWV1ZSk7XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWlmYWNlX2NoYW5naW5nLCAwKTtcXG5AQCAtOTQzLDcgKzk1Miw2IEBAIG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXHRcXHRjYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046XFxuIFxcdFxcdFxcdHJldHVybiBueHB3aWZpX2NoYW5nZV92aWZfdG9fc3RhKGRldiwgY3Vycl9pZnR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCB0eXBlLCBwYXJhbXMpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byBlcnJub3RzdXBwO1xcbiBcXHRcXHR9XFxuQEAgLTk1Miw4ICs5NjAsNiBAQCBueHB3aWZpX2NmZzgwMjExX2NoYW5nZV92aXJ0dWFsX2ludGYoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4gXFx0XFx0Z290byBlcnJub3RzdXBwO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuIGVycm5vdHN1cHA6XFxuIFxcdG54cHdpZmlfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbiBcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlIHRyYW5zaXRpb246ICVkIHRvICVkXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcXG5pbmRleCA0ZTAxZjQ1ZjNhMDBmLi5iNGM2MzgyOTAyNGEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xcbkBAIC0yMDQsNyArMjA0LDcgQEAgc3RhdGljIGJvb2wgbnhwd2lmaV9kcmFpbl90eChzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxcbiBcXHRcXHRcXHRcXHRcXHQgIE5YUFdJRklfQVNZTkNfQ01EKTtcXG4gXFx0XFx0XFx0YWRhcHRlci1cXHUwMDNlaHNfYWN0aXZhdGVkX21hbnVhbGx5ID0gZmFsc2U7XFxuIFxcdFxcdH1cXG4tXFx0XFx0XFx0bnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTtcXG4rXFx0XFx0bnhwd2lmaV9wcm9jZXNzX2J5cGFzc190eChhZGFwdGVyKTtcXG4gXFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZWhzX2FjdGl2YXRlZCkge1xcbiBcXHRcXHRcXHRjbGVhcl9iaXQoTlhQV0lGSV9JU19IU19DT05GSUdVUkVELFxcbiBcXHRcXHRcXHRcXHQgIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V3b3JrX2ZsYWdzKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXFxuaW5kZXggMzQ5ZGZhNGQzZjg1OC4uYjI1YTZhNGYyOTM2NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmhcXG5AQCAtMTE2Niw4ICsxMTY2LDkgQEAgbnhwd2lmaV9nZXRfcHJpdihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxcbiB9XFxuIFxcbiAvKiBmaW5kIHVudXNlZCBCU1MgbnVtYmVyIGZvciBuZXcgaW50ZXJmYWNlICovXFxuLXN0YXRpYyBpbmxpbmUgdThcXG4tbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpXFxuK3N0YXRpYyBpbmxpbmUgaW50XFxuK254cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlLFxcbitcXHRcXHRcXHQgICB1OCAqYnNzX251bSlcXG4ge1xcbiBcXHR1OCBpLCBqO1xcbiBcXHRpbnQgaW5kZXhbTlhQV0lGSV9NQVhfQlNTX05VTV07XFxuQEAgLTExNzksOSArMTE4MCwxNCBAQCBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLCB1OCBic3NfdHlwZSlcXG4gXFx0XFx0ICAgICAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpKSB7XFxuIFxcdFxcdFxcdGluZGV4W2FkYXB0ZXItXFx1MDAzZXByaXZbaV0tXFx1MDAzZWJzc19udW1dID0gMTtcXG4gXFx0XFx0fVxcbi1cXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgTlhQV0lGSV9NQVhfQlNTX05VTTsgaisrKVxcbi1cXHRcXHRpZiAoIWluZGV4W2pdKVxcbi1cXHRcXHRcXHRyZXR1cm4gajtcXG4rXFxuK1xcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBOWFBXSUZJX01BWF9CU1NfTlVNOyBqKyspIHtcXG4rXFx0XFx0aWYgKCFpbmRleFtqXSkge1xcbitcXHRcXHRcXHQqYnNzX251bSA9IGo7XFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiAtRU5PRU5UO1xcbiB9XFxuIFxcbkBAIC0xMTk1LDggKzEyMDEsOSBAQCBueHB3aWZpX2dldF91bnVzZWRfcHJpdl9ieV9ic3NfdHlwZShzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWRhcHRlci1cXHUwMDNlcHJpdl9udW07IGkrKylcXG4gXFx0XFx0aWYgKGFkYXB0ZXItXFx1MDAzZXByaXZbaV0tXFx1MDAzZWJzc19tb2RlID09XFxuIFxcdFxcdCAgIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSB7XFxuLVxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZXByaXZbaV0tXFx1MDAzZWJzc19udW0gPVxcbi1cXHRcXHRcXHRcXHRueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSk7XFxuK1xcdFxcdFxcdGlmIChueHB3aWZpX2dldF91bnVzZWRfYnNzX251bShhZGFwdGVyLCBic3NfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwcml2W2ldLVxcdTAwM2Vic3NfbnVtKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcXG5pbmRleCBkODUzNjM1NGYwOTNhLi44ZWYwZjZlYjQ5ZTI4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uY1xcbkBAIC0xMzQ3LDcgKzEzNDcsOCBAQCBzdGF0aWMgaW50IG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHNkaW9faVxcbiBcXHRcXHRcXHQgICAgICgocnhfYmxvY2tzICogTlhQV0lGSV9TRElPX0JMT0NLX1NJWkUpIFxcdTAwM2VcXG4gXFx0XFx0XFx0ICAgICAgY2FyZC1cXHUwMDNlbXBhX3J4LmJ1Zl9zaXplKSkpIHtcXG4gXFx0XFx0XFx0XFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsIFxcXCJpbnZhbGlkIHJ4X2xlbj0lZFxcXFxuXFxcIiwgcnhfbGVuKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gdGVybV9jbWQ7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdHJ4X2xlbiA9ICh1MTYpKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcXG5pbmRleCBmM2QyNGJmODYxY2E5Li44NDBkZGRmYzRmNWFlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jXFxuQEAgLTI0Niw4ICsyNDYsOCBAQCBpbnQgbnhwd2lmaV9oYW5kbGVfdWFwX3J4X2ZvcndhcmQoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXFxuIFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGNvcHkgc2tiIGZvciB1QVBcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbi1cXHRcXHRcXHRcXHQgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmNcXG5pbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3V0aWwuY1xcbkBAIC03OTksMzQgKzc5OSwzMyBAQCBpbnQgbnhwd2lmaV9yZWN2X3BhY2tldF90b19tb25pZihzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxcbiBcXHRcXHRfX2xlMTYgYWNjX2xlO1xcbiBcXHRcXHR1OCBmbGFncyA9IDA7XFxuIFxcbi1cXHRcXHRpZiAoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcXHUwMDNjPSAxNSkge1xcbi1cXHRcXHRcXHRoZHItXFx1MDAzZWl0X3ByZXNlbnQgfD0gY3B1X3RvX2xlMzIoQklUKElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVApKTtcXG4tXFx0XFx0XFx0b2ZmID0gQUxJR04ob2ZmLCA4KTtcXG4tXFxuLVxcdFxcdFxcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFxcdTAwMjYgMHgwMSkge1xcbi1cXHRcXHRcXHRcXHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfMzJCSVQ7XFxuLVxcdFxcdFxcdFxcdHRzID0gKHUzMilleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDtcXG4tXFx0XFx0XFx0XFx0dHMgPSBleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0aGRyLVxcdTAwM2VpdF9wcmVzZW50IHw9XFxuK1xcdFxcdFxcdGNwdV90b19sZTMyKEJJVChJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QKSk7XFxuK1xcdFxcdG9mZiA9IEFMSUdOKG9mZiwgOCk7XFxuIFxcbi1cXHRcXHRcXHR0c19sZSA9IGNwdV90b19sZTY0KHRzKTtcXG4tXFx0XFx0XFx0bWVtY3B5KHJ0aGRyICsgb2ZmLCBcXHUwMDI2dHNfbGUsIHNpemVvZih0c19sZSkpO1xcbi1cXHRcXHRcXHRvZmYgKz0gc2l6ZW9mKHRzX2xlKTtcXG4rXFx0XFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXFx1MDAyNiAweDAxKSB7XFxuK1xcdFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR18zMkJJVDtcXG4rXFx0XFx0XFx0dHMgPSAodTMyKWV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHXzY0QklUO1xcbitcXHRcXHRcXHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXFx1MDAyNiAweDAyKSB7XFxuLVxcdFxcdFxcdFxcdGFjY3VyYWN5ID0gZXh0LnRpbWVzdGFtcC5hY2N1cmFjeTtcXG4tXFx0XFx0XFx0XFx0ZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUF9GTEFHX0FDQ1VSQUNZO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdHRzX2xlID0gY3B1X3RvX2xlNjQodHMpO1xcbitcXHRcXHRtZW1jcHkocnRoZHIgKyBvZmYsIFxcdTAwMjZ0c19sZSwgc2l6ZW9mKHRzX2xlKSk7XFxuK1xcdFxcdG9mZiArPSBzaXplb2YodHNfbGUpO1xcbiBcXG4tXFx0XFx0XFx0YWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpO1xcbi1cXHRcXHRcXHRtZW1jcHkocnRoZHIgKyBvZmYsIFxcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcXG4tXFx0XFx0XFx0b2ZmICs9IHNpemVvZihhY2NfbGUpO1xcbi1cXHRcXHRcXHRydGhkcltvZmYrK10gPSAoZXh0LnRpbWVzdGFtcC51bml0IFxcdTAwMjYgMHgwZikgfFxcbi1cXHRcXHRcXHRcXHRcXHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXFx1MDAyNiAweDBmKSBcXHUwMDNjXFx1MDAzYyA0KTtcXG4tXFx0XFx0XFx0cnRoZHJbb2ZmKytdID0gZmxhZ3M7XFxuK1xcdFxcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFxcdTAwMjYgMHgwMikge1xcbitcXHRcXHRcXHRhY2N1cmFjeSA9IGV4dC50aW1lc3RhbXAuYWNjdXJhY3k7XFxuK1xcdFxcdFxcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR19BQ0NVUkFDWTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0YWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpO1xcbitcXHRcXHRtZW1jcHkocnRoZHIgKyBvZmYsIFxcdTAwMjZhY2NfbGUsIHNpemVvZihhY2NfbGUpKTtcXG4rXFx0XFx0b2ZmICs9IHNpemVvZihhY2NfbGUpO1xcbitcXHRcXHRydGhkcltvZmYrK10gPSAoZXh0LnRpbWVzdGFtcC51bml0IFxcdTAwMjYgMHgwZikgfFxcbitcXHRcXHRcXHRcXHQoKGV4dC50aW1lc3RhbXAucG9zaXRpb24gXFx1MDAyNiAweDBmKSBcXHUwMDNjXFx1MDAzYyA0KTtcXG4rXFx0XFx0cnRoZHJbb2ZmKytdID0gZmxhZ3M7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmb3JtYXQgPT0gTlhQV0lGSV9SQVRFX0ZPUk1BVF9IRSBcXHUwMDI2XFx1MDAyNiBoYXNfZXh0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjUxLjI4OTk1MTk1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4ODA2MTQyMDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlhQIFdpRmkgZHJpdmVyIChueHB3aWZpKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU0RJTyBkcml2ZXIgZm9yIE5YUCBJVzYxeCBoYXJkd2FyZS4gU2luY2UgdGhpcyByZXF1aXJlcyBwaHlzaWNhbCBTRElPIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI3MjA1NWNhOTlkNDQ5ZTNkMjgxYzE2MzA4OTIyZmZjYzY4MGRmYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE5OjQ1OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jXG5pbmRleCBjYzQ3YzQzNWViNzBhLi45NjU0MDkxNGYzY2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFheC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMWF4LmNcbkBAIC00MTMsNyArNDEzLDEwIEBAIGJvb2wgbnhwd2lmaV9pc18xMWF4X3R3dF9zdXBwb3J0ZWQoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdHN0cnVjdCBueHB3aWZpX2llX3R5cGVzX2hlX2NhcCAqdXNlcl9oZV9jYXA7XG4gXHRzdHJ1Y3Qgbnhwd2lmaV9pZV90eXBlc19oZV9jYXAgKmh3X2hlX2NhcDtcbiBcbi1cdGlmIChic3NfZGVzYyBcdTAwMjZcdTAwMjYgKCFueHB3aWZpX2lzX2FwXzExYXhfdHd0X3N1cHBvcnRlZChic3NfZGVzYykpKSB7XG4rXHRpZiAoIWJzc19kZXNjKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIW54cHdpZmlfaXNfYXBfMTFheF90d3Rfc3VwcG9ydGVkKGJzc19kZXNjKSkge1xuIFx0XHRueHB3aWZpX2RiZyhwcml2LVx1MDAzZWFkYXB0ZXIsIE1TRyxcbiBcdFx0XHQgICAgXCJBUCBkb24ndCBzdXBwb3J0IHR3dCBmZWF0dXJlXFxuXCIpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvMTFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuaW5kZXggZTQ2YzUwNTNkNTA5MC4uYzJhNTRkNzgxYjQyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpLzExbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS8xMW4uY1xuQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkXG4gbnhwd2lmaV8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3Qgbnhwd2lmaV90eF9iYV9zdHJlYW1fdGJsICp0YmwpXG4ge1xuLVx0aWYgKCF0YmwgXHUwMDI2XHUwMDI2IG54cHdpZmlfaXNfdHhfYmFfc3RyZWFtX3B0cl92YWxpZChwcml2LCB0YmwpKVxuK1x0aWYgKCF0YmwgfHwgbnhwd2lmaV9pc190eF9iYV9zdHJlYW1fcHRyX3ZhbGlkKHByaXYsIHRibCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG54cHdpZmlfZGJnKHByaXYtXHUwMDNlYWRhcHRlciwgSU5GTyxcbkBAIC02OTQsNyArNjk0LDcgQEAgaW50IG54cHdpZmlfZ2V0X3R4X2JhX3N0cmVhbV90Ymwoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdixcbiAvKiBEZWxldGUgVHggQkEgc3RyZWFtIGVudHJ5IGJ5IFJBLiAqL1xuIHZvaWQgbnhwd2lmaV9kZWxfdHhfYmFfc3RyZWFtX3RibF9ieV9yYShzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LCB1OCAqcmEpXG4ge1xuLVx0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsO1xuK1x0c3RydWN0IG54cHdpZmlfdHhfYmFfc3RyZWFtX3RibCAqdGJsLCAqdG1wO1xuIFx0aW50IGk7XG4gXG4gXHRpZiAoIXJhKVxuQEAgLTcwMiw3ICs3MDIsOCBAQCB2b2lkIG54cHdpZmlfZGVsX3R4X2JhX3N0cmVhbV90YmxfYnlfcmEoc3RydWN0IG54cHdpZmlfcHJpdmF0ZSAqcHJpdiwgdTggKnJhKVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX05VTV9USUQ7IGkrKykge1xuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cHJpdi1cdTAwM2V0eF9iYV9zdHJlYW1fdGJsX2xvY2tbaV0pO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YmwsIFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0YmwsIHRtcCxcbitcdFx0XHRcdFx0IFx1MDAyNnByaXYtXHUwMDNldHhfYmFfc3RyZWFtX3RibF9wdHJbaV0sIGxpc3QpXG4gXHRcdFx0aWYgKCFtZW1jbXAodGJsLVx1MDAzZXJhLCByYSwgRVRIX0FMRU4pKVxuIFx0XHRcdFx0bnhwd2lmaV8xMW5fZGVsZXRlX3R4X2JhX3N0cmVhbV90YmxfZW50cnkocHJpdiwgdGJsKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvY2ZnODAyMTEuY1xuaW5kZXggYzgyMGYwOGQyODM1NS4uNWNjOGNkZjU5NGQzZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2NmZzgwMjExLmNcbkBAIC03MTcsNiArNzE3LDcgQEAgbnhwd2lmaV9pbml0X25ld19wcml2X3BhcmFtcyhzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0XHRcdCAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlKVxuIHtcbiBcdHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LVx1MDAzZWFkYXB0ZXI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0bnhwd2lmaV9pbml0X3ByaXYocHJpdik7XG4gXG5AQCAtNzQwLDcgKzc0MSwxNSBAQCBueHB3aWZpX2luaXRfbmV3X3ByaXZfcGFyYW1zKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbi1cdHByaXYtXHUwMDNlYnNzX251bSA9IG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIHByaXYtXHUwMDNlYnNzX3R5cGUpO1xuK1x0cmV0ID0gbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgcHJpdi1cdTAwM2Vic3NfdHlwZSxcbitcdFx0XHRcdFx0IFx1MDAyNnByaXYtXHUwMDNlYnNzX251bSk7XG4rXG4rXHRpZiAocmV0KSB7XG4rXHRcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIEVSUk9SLFxuK1x0XHRcdCAgICBcIiVzOiBubyB1bnVzZWQgYnNzX251bSBmb3IgdHlwZSAlZFxcblwiLFxuK1x0XHRcdCAgICBkZXYtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2Vic3NfdHlwZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHRmbHVzaF93b3JrcXVldWUoYWRhcHRlci1cdTAwM2V3b3JrcXVldWUpO1xuIFx0YXRvbWljX3NldChcdTAwMjZhZGFwdGVyLVx1MDAzZWlmYWNlX2NoYW5naW5nLCAwKTtcbkBAIC05NDMsNyArOTUyLDYgQEAgbnhwd2lmaV9jZmc4MDIxMV9jaGFuZ2VfdmlydHVhbF9pbnRmKHN0cnVjdCB3aXBoeSAqd2lwaHksXG4gXHRcdGNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjpcbiBcdFx0XHRyZXR1cm4gbnhwd2lmaV9jaGFuZ2VfdmlmX3RvX3N0YShkZXYsIGN1cnJfaWZ0eXBlLFxuIFx0XHRcdFx0XHRcdFx0IHR5cGUsIHBhcmFtcyk7XG4tXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byBlcnJub3RzdXBwO1xuIFx0XHR9XG5AQCAtOTUyLDggKzk2MCw2IEBAIG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFx0XHRnb3RvIGVycm5vdHN1cHA7XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbi1cbiBlcnJub3RzdXBwOlxuIFx0bnhwd2lmaV9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbiBcdFx0ICAgIFwidW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGUgdHJhbnNpdGlvbjogJWQgdG8gJWRcXG5cIixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbmluZGV4IDRlMDFmNDVmM2EwMGYuLmI0YzYzODI5MDI0YTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uY1xuQEAgLTIwNCw3ICsyMDQsNyBAQCBzdGF0aWMgYm9vbCBueHB3aWZpX2RyYWluX3R4KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXHRcdFx0XHRcdCAgTlhQV0lGSV9BU1lOQ19DTUQpO1xuIFx0XHRcdGFkYXB0ZXItXHUwMDNlaHNfYWN0aXZhdGVkX21hbnVhbGx5ID0gZmFsc2U7XG4gXHRcdH1cbi1cdFx0XHRueHB3aWZpX3Byb2Nlc3NfYnlwYXNzX3R4KGFkYXB0ZXIpO1xuK1x0XHRueHB3aWZpX3Byb2Nlc3NfYnlwYXNzX3R4KGFkYXB0ZXIpO1xuIFx0XHRpZiAoYWRhcHRlci1cdTAwM2Voc19hY3RpdmF0ZWQpIHtcbiBcdFx0XHRjbGVhcl9iaXQoTlhQV0lGSV9JU19IU19DT05GSUdVUkVELFxuIFx0XHRcdFx0ICBcdTAwMjZhZGFwdGVyLVx1MDAzZXdvcmtfZmxhZ3MpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaFxuaW5kZXggMzQ5ZGZhNGQzZjg1OC4uYjI1YTZhNGYyOTM2NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5oXG5AQCAtMTE2Niw4ICsxMTY2LDkgQEAgbnhwd2lmaV9nZXRfcHJpdihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyLFxuIH1cbiBcbiAvKiBmaW5kIHVudXNlZCBCU1MgbnVtYmVyIGZvciBuZXcgaW50ZXJmYWNlICovXG4tc3RhdGljIGlubGluZSB1OFxuLW54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IGJzc190eXBlKVxuK3N0YXRpYyBpbmxpbmUgaW50XG4rbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUsXG4rXHRcdFx0ICAgdTggKmJzc19udW0pXG4ge1xuIFx0dTggaSwgajtcbiBcdGludCBpbmRleFtOWFBXSUZJX01BWF9CU1NfTlVNXTtcbkBAIC0xMTc5LDkgKzExODAsMTQgQEAgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgdTggYnNzX3R5cGUpXG4gXHRcdCAgICAgIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkge1xuIFx0XHRcdGluZGV4W2FkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtXSA9IDE7XG4gXHRcdH1cbi1cdGZvciAoaiA9IDA7IGogXHUwMDNjIE5YUFdJRklfTUFYX0JTU19OVU07IGorKylcbi1cdFx0aWYgKCFpbmRleFtqXSlcbi1cdFx0XHRyZXR1cm4gajtcbitcbitcdGZvciAoaiA9IDA7IGogXHUwMDNjIE5YUFdJRklfTUFYX0JTU19OVU07IGorKykge1xuK1x0XHRpZiAoIWluZGV4W2pdKSB7XG4rXHRcdFx0KmJzc19udW0gPSBqO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyZXR1cm4gLUVOT0VOVDtcbiB9XG4gXG5AQCAtMTE5NSw4ICsxMjAxLDkgQEAgbnhwd2lmaV9nZXRfdW51c2VkX3ByaXZfYnlfYnNzX3R5cGUoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcixcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFkYXB0ZXItXHUwMDNlcHJpdl9udW07IGkrKylcbiBcdFx0aWYgKGFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbW9kZSA9PVxuIFx0XHQgICBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkge1xuLVx0XHRcdGFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtID1cbi1cdFx0XHRcdG54cHdpZmlfZ2V0X3VudXNlZF9ic3NfbnVtKGFkYXB0ZXIsIGJzc190eXBlKTtcbitcdFx0XHRpZiAobnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW0oYWRhcHRlciwgYnNzX3R5cGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmFkYXB0ZXItXHUwMDNlcHJpdltpXS1cdTAwM2Vic3NfbnVtKSlcbitcdFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jXG5pbmRleCBkODUzNjM1NGYwOTNhLi44ZWYwZjZlYjQ5ZTI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcbkBAIC0xMzQ3LDcgKzEzNDcsOCBAQCBzdGF0aWMgaW50IG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHNkaW9faVxuIFx0XHRcdCAgICAgKChyeF9ibG9ja3MgKiBOWFBXSUZJX1NESU9fQkxPQ0tfU0laRSkgXHUwMDNlXG4gXHRcdFx0ICAgICAgY2FyZC1cdTAwM2VtcGFfcnguYnVmX3NpemUpKSkge1xuIFx0XHRcdFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsIFwiaW52YWxpZCByeF9sZW49JWRcXG5cIiwgcnhfbGVuKTtcbi1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gdGVybV9jbWQ7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdHJ4X2xlbiA9ICh1MTYpKHJ4X2Jsb2NrcyAqIE5YUFdJRklfU0RJT19CTE9DS19TSVpFKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91YXBfdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdWFwX3R4cnguY1xuaW5kZXggZjNkMjRiZjg2MWNhOS4uODQwZGRkZmM0ZjVhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3VhcF90eHJ4LmNcbkBAIC0yNDYsOCArMjQ2LDggQEAgaW50IG54cHdpZmlfaGFuZGxlX3VhcF9yeF9mb3J3YXJkKHN0cnVjdCBueHB3aWZpX3ByaXZhdGUgKnByaXYsXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXG4gXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gY29weSBza2IgZm9yIHVBUFxcblwiKTtcbi1cdFx0XHRcdCAgICBwcml2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbi1cdFx0XHRcdCAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRcdHByaXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xuK1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG5pbmRleCAyOWVmMDMxZjhlYzliLi5iYmZlZmI4MWQ4ZDNiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvdXRpbC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS91dGlsLmNcbkBAIC03OTksMzQgKzc5OSwzMyBAQCBpbnQgbnhwd2lmaV9yZWN2X3BhY2tldF90b19tb25pZihzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuIFx0XHRfX2xlMTYgYWNjX2xlO1xuIFx0XHR1OCBmbGFncyA9IDA7XG4gXG4tXHRcdGlmIChleHQudGltZXN0YW1wLnBvc2l0aW9uIFx1MDAzYz0gMTUpIHtcbi1cdFx0XHRoZHItXHUwMDNlaXRfcHJlc2VudCB8PSBjcHVfdG9fbGUzMihCSVQoSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUCkpO1xuLVx0XHRcdG9mZiA9IEFMSUdOKG9mZiwgOCk7XG4tXG4tXHRcdFx0aWYgKGV4dC50aW1lc3RhbXAuZmxhZ3MgXHUwMDI2IDB4MDEpIHtcbi1cdFx0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR18zMkJJVDtcbi1cdFx0XHRcdHRzID0gKHUzMilleHQudGltZXN0YW1wLmRldmljZV90aW1lc3RhbXA7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDtcbi1cdFx0XHRcdHRzID0gZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuLVx0XHRcdH1cbitcdFx0aGRyLVx1MDAzZWl0X3ByZXNlbnQgfD1cbitcdFx0XHRjcHVfdG9fbGUzMihCSVQoSUVFRTgwMjExX1JBRElPVEFQX1RJTUVTVEFNUCkpO1xuK1x0XHRvZmYgPSBBTElHTihvZmYsIDgpO1xuIFxuLVx0XHRcdHRzX2xlID0gY3B1X3RvX2xlNjQodHMpO1xuLVx0XHRcdG1lbWNweShydGhkciArIG9mZiwgXHUwMDI2dHNfbGUsIHNpemVvZih0c19sZSkpO1xuLVx0XHRcdG9mZiArPSBzaXplb2YodHNfbGUpO1xuK1x0XHRpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyBcdTAwMjYgMHgwMSkge1xuK1x0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR18zMkJJVDtcbitcdFx0XHR0cyA9ICh1MzIpZXh0LnRpbWVzdGFtcC5kZXZpY2VfdGltZXN0YW1wO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGZsYWdzIHw9IElFRUU4MDIxMV9SQURJT1RBUF9USU1FU1RBTVBfRkxBR182NEJJVDtcbitcdFx0XHR0cyA9IGV4dC50aW1lc3RhbXAuZGV2aWNlX3RpbWVzdGFtcDtcbitcdFx0fVxuIFxuLVx0XHRcdGlmIChleHQudGltZXN0YW1wLmZsYWdzIFx1MDAyNiAweDAyKSB7XG4tXHRcdFx0XHRhY2N1cmFjeSA9IGV4dC50aW1lc3RhbXAuYWNjdXJhY3k7XG4tXHRcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7XG4tXHRcdFx0fVxuK1x0XHR0c19sZSA9IGNwdV90b19sZTY0KHRzKTtcbitcdFx0bWVtY3B5KHJ0aGRyICsgb2ZmLCBcdTAwMjZ0c19sZSwgc2l6ZW9mKHRzX2xlKSk7XG4rXHRcdG9mZiArPSBzaXplb2YodHNfbGUpO1xuIFxuLVx0XHRcdGFjY19sZSA9IGNwdV90b19sZTE2KGFjY3VyYWN5KTtcbi1cdFx0XHRtZW1jcHkocnRoZHIgKyBvZmYsIFx1MDAyNmFjY19sZSwgc2l6ZW9mKGFjY19sZSkpO1xuLVx0XHRcdG9mZiArPSBzaXplb2YoYWNjX2xlKTtcbi1cdFx0XHRydGhkcltvZmYrK10gPSAoZXh0LnRpbWVzdGFtcC51bml0IFx1MDAyNiAweDBmKSB8XG4tXHRcdFx0XHRcdCgoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcdTAwMjYgMHgwZikgXHUwMDNjXHUwMDNjIDQpO1xuLVx0XHRcdHJ0aGRyW29mZisrXSA9IGZsYWdzO1xuK1x0XHRpZiAoZXh0LnRpbWVzdGFtcC5mbGFncyBcdTAwMjYgMHgwMikge1xuK1x0XHRcdGFjY3VyYWN5ID0gZXh0LnRpbWVzdGFtcC5hY2N1cmFjeTtcbitcdFx0XHRmbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfVElNRVNUQU1QX0ZMQUdfQUNDVVJBQ1k7XG4gXHRcdH1cbitcbitcdFx0YWNjX2xlID0gY3B1X3RvX2xlMTYoYWNjdXJhY3kpO1xuK1x0XHRtZW1jcHkocnRoZHIgKyBvZmYsIFx1MDAyNmFjY19sZSwgc2l6ZW9mKGFjY19sZSkpO1xuK1x0XHRvZmYgKz0gc2l6ZW9mKGFjY19sZSk7XG4rXHRcdHJ0aGRyW29mZisrXSA9IChleHQudGltZXN0YW1wLnVuaXQgXHUwMDI2IDB4MGYpIHxcbitcdFx0XHRcdCgoZXh0LnRpbWVzdGFtcC5wb3NpdGlvbiBcdTAwMjYgMHgwZikgXHUwMDNjXHUwMDNjIDQpO1xuK1x0XHRydGhkcltvZmYrK10gPSBmbGFncztcbiBcdH1cbiBcbiBcdGlmIChmb3JtYXQgPT0gTlhQV0lGSV9SQVRFX0ZPUk1BVF9IRSBcdTAwMjZcdTAwMjYgaGFzX2V4dCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTEuMjg5OTUzODE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkyNDY3NDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG54cHdpZmkgRHJpdmVyIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgbW9kaWZ5aW5nIHRoZSBgbnhwd2lmaWAgZHJpdmVyLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVzZSBhcmUgbW9zdGx5IHJlZmluZW1lbnRzLCB0b3VjaGluZyB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlIGRyaXZlci5cblxuRmlyc3QsIGluIGAxMWF4LmNgLCB0aGUgYG54cHdpZmlfaXNfMTFheF90d3Rfc3VwcG9ydGVkYCBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYSBudWxsIGBic3NfZGVzY2AsIHdoaWNoIGlzIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5UaGVuLCBgMTFuLmNgIHNlZXMgYSBtaW5vciBjaGFuZ2UgaW4gYG54cHdpZmlfMTFuX2RlbGV0ZV90eF9iYV9zdHJlYW1fdGJsX2VudHJ5YCwgd2l0aCB0aGUgY29uZGl0aW9uIGNoZWNrIGZvciBgdGJsYCB1cGRhdGVkLiBUaGUgYG54cHdpZmlfZGVsX3R4X2JhX3N0cmVhbV90YmxfYnlfcmFgIGZ1bmN0aW9uIGlzIGFsc28gdXBkYXRlZCB3aXRoIGEgc2FmZXIgbGlzdCBpdGVyYXRpb24gbWV0aG9kLlxuXG5Nb3Zpbmcgb24gdG8gYGNmZzgwMjExLmNgLCBgbnhwd2lmaV9pbml0X25ld19wcml2X3BhcmFtc2AgaGFzIGJlZW4gbW9kaWZpZWQgc28gdGhhdCBgbnhwd2lmaV9nZXRfdW51c2VkX2Jzc19udW1gIG5vdyBwcm9wZXJseSByZXR1cm5zIGFuIGVycm9yIGNvZGUgYW5kIGFjY2VwdHMgYSBwb2ludGVyIGZvciBgYnNzX251bWAuIFRoZSBkZWFkIGNvZGUgaW4gYG54cHdpZmlfY2ZnODAyMTFfY2hhbmdlX3ZpcnR1YWxfaW50ZmAgc2VlbXMgdG8gaGF2ZSBiZWVuIHJlbW92ZWQuXG5cbmBtYWluLmNgIGFuZCBgdWFwX3R4cnguY2AgYXJlIGp1c3QgZ2V0dGluZyBzb21lIGluZGVudGF0aW9uIGZpeGVzLCBub3RoaW5nIG1ham9yIHRoZXJlLlxuXG5UaGUgY2hhbmdlcyBpbiBgbWFpbi5oYCBpbmNsdWRlIHVwZGF0aW5nIHRoZSByZXR1cm4gdHlwZSBhbmQgcGFyYW1ldGVyIG9mIGBueHB3aWZpX2dldF91bnVzZWRfYnNzX251bWAgYW5kIG1ha2luZyBzdXJlIHRoYXQgYG54cHdpZmlfZ2V0X3VudXNlZF9wcml2X2J5X2Jzc190eXBlYCBwcm9wZXJseSBoYW5kbGVzIGVycm9yIGhhbmRsaW5nLlxuXG5gc2Rpby5jYCBoYXMgYSBzbWFsbCBjaGFuZ2UgaW4gYG54cHdpZmlfcHJvY2Vzc19pbnRfc3RhdHVzYCwgY2hhbmdpbmcgYSBkaXJlY3QgYHJldHVybmAgdG8gYSBgZ290b2AgZm9yIGNsZWFyZXIgZXJyb3IgaGFuZGxpbmcuXG5cbkZpbmFsbHksIGluIGB1dGlsLmNgLCB0aGUgYG54cHdpZmlfcmVjdl9wYWNrZXRfdG9fbW9uaWZgIGZ1bmN0aW9uIHJlbW92ZXMgYW4gdW5uZWNlc3NhcnkgdGltZXN0YW1wIGNoZWNrLCB3aGljaCBwcm9iYWJseSBvcHRpbWl6ZXMgcGVyZm9ybWFuY2UuXG5cbk92ZXJhbGwsIGl0IGxvb2tzIGxpa2Ugc2V2ZXJhbCBtaW5vciBpbXByb3ZlbWVudHMgdG8gZXJyb3IgaGFuZGxpbmcsIGNvZGUgY2xhcml0eSwgYW5kIHBvdGVudGlhbGx5IG9wdGltaXphdGlvbi5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4uLiBJcyB0aGlzIGBueHB3aWZpYCBkcml2ZXIgZXZlbiBwYXJ0IG9mIHRoZSBtYWlubGluZSBrZXJuZWw/IEknbGwgcXVpY2tseSB1c2UgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AuIEl0J3MgYWx3YXlzIGdvb2QgdG8gbWFrZSBzdXJlIHdlIGFyZSBub3QgbWFraW5nIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDU6NTguMjE0NjMyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBudWxsLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwibnhwd2lmaVwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ1OjU4LjIxNDY4NjMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU5NDIxNjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgbnhwd2lmaWAqKlxuXG5BbHJpZ2h0LCBzbyBgbnhwd2lmaWAuLi4gaXQgZXhpc3RzLiBUaGF0J3MgdGhlIGZpcnN0IGh1cmRsZSwgYW5kIGEgZ29vZCBzdGFydC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgZmlsZSBzdHJ1Y3R1cmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBwcmVzZW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uIFdpdGhvdXQgbG9va2luZyBhdCB0aGUgZmlsZXMsIEkgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHV0aWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MDAuODA4OTA3ODY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiMTFhYy5jXCIsXG4gICAgXCIxMWFjLmhcIixcbiAgICBcIjExYXguY1wiLFxuICAgIFwiMTFheC5oXCIsXG4gICAgXCIxMWguY1wiLFxuICAgIFwiMTFuLmNcIixcbiAgICBcIjExbi5oXCIsXG4gICAgXCIxMW5fYWdnci5jXCIsXG4gICAgXCIxMW5fYWdnci5oXCIsXG4gICAgXCIxMW5fcnhyZW9yZGVyLmNcIixcbiAgICBcIjExbl9yeHJlb3JkZXIuaFwiLFxuICAgIFwiY2ZnLmhcIixcbiAgICBcImNmZzgwMjExLmNcIixcbiAgICBcImNmZzgwMjExLmhcIixcbiAgICBcImNmcC5jXCIsXG4gICAgXCJjbWRldnQuY1wiLFxuICAgIFwiY21kZXZ0LmhcIixcbiAgICBcImRlYnVnZnMuY1wiLFxuICAgIFwiZXRodG9vbC5jXCIsXG4gICAgXCJmdy5oXCIsXG4gICAgXCJpZS5jXCIsXG4gICAgXCJpbml0LmNcIixcbiAgICBcImpvaW4uY1wiLFxuICAgIFwibWFpbi5jXCIsXG4gICAgXCJtYWluLmhcIixcbiAgICBcInNjYW4uY1wiLFxuICAgIFwic2Rpby5jXCIsXG4gICAgXCJzZGlvLmhcIixcbiAgICBcInN0YV9jZmcuY1wiLFxuICAgIFwic3RhX2NtZC5jXCIsXG4gICAgXCJzdGFfZXZlbnQuY1wiLFxuICAgIFwic3RhX3J4LmNcIixcbiAgICBcInN0YV90eC5jXCIsXG4gICAgXCJ0eHJ4LmNcIixcbiAgICBcInVhcF9jbWQuY1wiLFxuICAgIFwidWFwX2V2ZW50LmNcIixcbiAgICBcInVhcF90eHJ4LmNcIixcbiAgICBcInV0aWwuY1wiLFxuICAgIFwidXRpbC5oXCIsXG4gICAgXCJ3bW0uY1wiLFxuICAgIFwid21tLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MDAuODA5MDE4MzI5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MDEyNTA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipDaGVja2luZyBEcml2ZXIgUmVhY2hhYmlsaXR5IGluIFFFTVUqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcnVjaWFsLiBJJ20gd29ya2luZyB3aXRoIGFuIFNESU8gZHJpdmVyLCBzcGVjaWZpY2FsbHkgYHNkaW8uY2AsIGFuZCBJIG5lZWQgdG8gY29uZmlybSBpdHMgYWNjZXNzaWJpbGl0eSB3aXRoaW4gdGhlIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgYSBzdGFuZGFyZCBmaXJzdCBzdGVwLiBMZXQgbWUgY3Jvc3MtcmVmZXJlbmNlIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZXMg4oCTIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBgbnhwd2lmaWAgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGNsdWUgd2hldGhlciB0aGlzIGRyaXZlciBjYW4gZXZlbiAqYmUqIHBhcnQgb2YgdGhlIGJ1aWxkIGluIHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBzYXZlIG1lIGEgbG90IG9mIHdhc3RlZCB0aW1lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDM0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA0LjI3OTE0NTkxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODAwMTM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlhQV0lGSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWc6Mjpjb25maWcgTlhQV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlhQIFdpRmkgRHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnOjEyOmNvbmZpZyBOWFBXSUZJX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjowNC4zMzcxNTM2NzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ2NzU5NzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTlhQV0lGSV9TRElPKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5YUFdJRklfU0RJT2AuIFJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnlpbmcgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciB0cm91Ymxlc2hvb3RpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzIGBOWFBXSUZJX1NESU9gIHJlbGllcyBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgY291bGQgaW52b2x2ZSBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWMgZHJpdmVycywgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBzaGFyZWQgbGlicmFyaWVzLCBhbmQgbWF5YmUgZXZlbiBmaXJtd2FyZS4gS25vd2luZyB0aGUgZGVwZW5kZW5jeSB0cmVlIHdpbGwgYmUgY3JpdGljYWwuIEkgbmVlZCB0byBlbnN1cmUgYSBjb21wbGV0ZSBwaWN0dXJlIGZvciB0aGlzIHdpcmVsZXNzIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgyOSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA3LjQ4MzkyMDk3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5YUFdJRklcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJOWFAgV2lGaSBEcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBOWFBcXG4gICA3OlxcdFxcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cXG4gICA4OlxcdFxcbiAgIDk6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgMTA6XFx0XFx0ICBueHB3aWZpLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgTlhQV0lGSV9TRElPXFxuICAxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiTlhQIFdpRmkgRHJpdmVyIGZvciBJVzYxeFxcXCJcXG4gIDE0OlxcdFxcdGRlcGVuZHMgb24gTlhQV0lGSSBcXHUwMDI2XFx1MDAyNiBNTUNcXG4gIDE1OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDE2OlxcdFxcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTlhQXFxuICAxOTpcXHRcXHQgIElXNjF4IGludGVyZmFjZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZFxcbiAgMjI6XFx0XFx0ICBueHB3aWZpX3NkaW8uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjA3LjQ4NDA0Nzc0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQ5Mjg3Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlhQIFdpRmkgRHJpdmVyIGZvciBJVzYxeCoqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBoaW5nZXMgb24gYE1NQ2AuIElzIHRoaXMgYSBwaHlzaWNhbCBkcml2ZXIgZm9yIGEgaGFyZHdhcmUgY29tcG9uZW50PyBTcGVjaWZpY2FsbHksIHRoaXMgXCJOWFAgV2lGaSBEcml2ZXIgZm9yIElXNjF4XCIgaXMgY29ubmVjdGVkIHZpYSBTRElPLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBTRElPIGlzIHR5cGljYWxseSBwaHlzaWNhbCBoYXJkd2FyZS4gQ2FuIFNESU8gZGV2aWNlcyBldmVuIGJlIGVtdWxhdGVkIGluIFFFTVU/IEknbSBwcmV0dHkgc3VyZSB0aGF0J3Mgbm90IHN0YW5kYXJkLlxuXG5MZXQncyBzZWXigKYgZG9lcyBTeXprYWxsZXIgdXN1YWxseSBmdXp6IFNESU8gaGFyZHdhcmUgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0b3Igb3IgaXQgdGFyZ2V0cyBzb21lIGdlbmVyaWMgc3Vic3lzdGVtPyBXYWl0LCBkaWQgU3l6a2FsbGVyIHBpY2sgdXAgYW55IHN1cHBvcnQgZm9yIFNESU8gZnV6emluZyByZWNlbnRseT8gTm9wZSwgbm8gU0RJTyBlbXVsYXRpb24gaW4gU3l6a2FsbGVyLlxuXG5Ib2xkIG9uLCBjb3VsZCBJIHJlYWNoIHRoaXMgZHJpdmVyIHZpYSBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhhdCdzIGEgc29mdHdhcmUgc2ltdWxhdG9yIGZvciBgbWFjODAyMTFgLiBUaGlzIGlzIGEgZnVsbG1hYyBkcml2ZXIgdXNpbmcgYENGRzgwMjExYCBkaXJlY3RseSwgc28gaXQgcmVnaXN0ZXJzIHdpdGggYGNmZzgwMjExYC4gQnV0IHRvIGdldCByZWdpc3RlcmVkIHdpdGggYGNmZzgwMjExYCwgdGhlIGRyaXZlciBuZWVkcyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEFuZCBiZWNhdXNlIGl0J3MgYW4gU0RJTyBkcml2ZXIsIGl0IG5lZWRzIGFuIFNESU8gZGV2aWNlIGZvciB0aGUgcHJvYmUuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYWx0ZXJuYXRlIGludGVyZmFjZXMgbGlrZSBVU0Igb3IgUENJZSBhdmFpbGFibGUuIFRoZSBLY29uZmlnIG9ubHkgbWVudGlvbnMgYE5YUFdJRklfU0RJT2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYSBVU0Igb3IgUENJIGRyaXZlciBmbG9hdGluZyBhcm91bmQgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzMxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MTMuNTMzMzU0NTc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc4MzE1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYz0xNjYwPW54cHdpZmlfY2xlYW51cF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYy0xNjY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYzoxNjY3Om1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYy0xNjY4LW1vZHVsZV9leGl0KG54cHdpZmlfY2xlYW51cF9tb2R1bGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxMy43MzExOTE0NDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3MzI3MDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGggdGhpcyBkb21haW46XG5cbioqQW5hbHl6aW5nIGBueHB3aWZpX2luaXRfbW9kdWxlYCoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG54cHdpZmlfaW5pdF9tb2R1bGVgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGlzIGRvaW5nLCBob3cgaXQgaW5pdGlhbGl6ZXMsIGFuZCB3aGF0IGl0cyBvdmVyYWxsIHB1cnBvc2Ugd2l0aGluIHRoZSBzeXN0ZW0gaXMuIElzIGl0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSdtIGFscmVhZHkgbWVudGFsbHkgZm9ybWluZyBoeXBvdGhlc2VzIOKAkyB3aGF0IGtleSBmdW5jdGlvbnMgd2lsbCBpdCBsaWtlbHkgY2FsbD8gV2hhdCByZXNvdXJjZXMgaXMgaXQgcHJvYmFibHkgbWFuYWdpbmc/IFRoaXMgaXMgd2hlcmUgZXZlcnl0aGluZyBiZWdpbnMsIHRoZSBlbnRyeSBwb2ludCBJIG5lZWQgdG8gZGVlcGx5IHVuZGVyc3RhbmQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDc2LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MTcuMTA0NDY1MzUyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0MDpcXHRcXHRcXHRkZXZfaW5mbyhhZGFwdGVyLVxcdTAwM2VkZXYsIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4xNjQxOlxcdFxcdGVsc2VcXG4xNjQyOlxcdFxcdFxcdHByX2luZm8oXFxcIiVwVlxcXCIsIFxcdTAwMjZ2YWYpO1xcbjE2NDM6XFx0XFxuMTY0NDpcXHRcXHR2YV9lbmQoYXJncyk7XFxuMTY0NTpcXHR9XFxuMTY0NjpcXHRFWFBPUlRfU1lNQk9MX0dQTChfbnhwd2lmaV9kYmcpO1xcbjE2NDc6XFx0XFxuMTY0ODpcXHQvKiBNb2R1bGUgaW5pdDogaW5pdCBkZWJ1Z2ZzIGlmIGVuYWJsZWQuICovXFxuMTY0OTpcXHRzdGF0aWMgaW50XFxuMTY1MDpcXHRueHB3aWZpX2luaXRfbW9kdWxlKHZvaWQpXFxuMTY1MTpcXHR7XFxuMTY1MjpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0ZTXFxuMTY1MzpcXHRcXHRueHB3aWZpX2RlYnVnZnNfaW5pdCgpO1xcbjE2NTQ6XFx0I2VuZGlmXFxuMTY1NTpcXHRcXHRyZXR1cm4gMDtcXG4xNjU2OlxcdH1cXG4xNjU3OlxcdFxcbjE2NTg6XFx0LyogTW9kdWxlIGV4aXQ6IHJlbW92ZSBkZWJ1Z2ZzIGlmIGVuYWJsZWQuICovXFxuMTY1OTpcXHRzdGF0aWMgdm9pZFxcbjE2NjA6XFx0bnhwd2lmaV9jbGVhbnVwX21vZHVsZSh2b2lkKVxcbjE2NjE6XFx0e1xcbjE2NjI6XFx0I2lmZGVmIENPTkZJR19ERUJVR19GU1xcbjE2NjM6XFx0XFx0bnhwd2lmaV9kZWJ1Z2ZzX3JlbW92ZSgpO1xcbjE2NjQ6XFx0I2VuZGlmXFxuMTY2NTpcXHR9XFxuMTY2NjpcXHRcXG4xNjY3OlxcdG1vZHVsZV9pbml0KG54cHdpZmlfaW5pdF9tb2R1bGUpO1xcbjE2Njg6XFx0bW9kdWxlX2V4aXQobnhwd2lmaV9jbGVhbnVwX21vZHVsZSk7XFxuMTY2OTpcXHRcXG4xNjcwOlxcdE1PRFVMRV9BVVRIT1IoXFxcIk5YUCBJbnRlcm5hdGlvbmFsIEx0ZC5cXFwiKTtcXG4xNjcxOlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiTlhQIFdpRmkgRHJpdmVyIHZlcnNpb24gXFxcIiBWRVJTSU9OKTtcXG4xNjcyOlxcdE1PRFVMRV9WRVJTSU9OKFZFUlNJT04pO1xcbjE2NzM6XFx0TU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoxNy4xMDQ2MjE4OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1ODcxMjM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLlxuXG4qKkRyaXZlciBJbml0aWFsaXphdGlvbiBIdW50KipcblxuSG1tLCBzbyBgbnhwd2lmaV9pbml0X21vZHVsZWAgcHJpbWFyaWx5IHNldHMgdXAgZGVidWdmcywgcmlnaHQ/IFRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGRyaXZlciByZWdpc3RyYXRpb24gaGFwcGVucy4gVGhhdCdzIGEgYml0IHRvbyBzaW1wbGUgZm9yIHRoZSBtYWluIGRyaXZlciBlbnRyeSBwb2ludC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gV2hlcmUncyB0aGUgYG1vZHVsZV9pbml0YCBmb3IgdGhlICpyZWFsKiBkcml2ZXI/IE15IGd1dCBzYXlzIGl0J3MgaW4gYSBmaWxlIHJlbGF0ZWQgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaW50ZXJmYWNlLiBTaW5jZSB0aGlzIGlzIFdpLUZpLCBhbmQgdGhlIG1vZHVsZSBuYW1lIHN1Z2dlc3RzIFNESU8sIGBzZGlvLmNgIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGxvb2suIEl0IGxpa2VseSBoYXMgaXRzIG93biBgbW9kdWxlX2luaXRgIHRoYXQgY29ubmVjdHMgdGhlIGRvdHMgYmV0d2VlbiB0aGUgU0RJTyBpbnRlcmZhY2UgYW5kIHRoZSBXaS1GaSBmdW5jdGlvbmFsaXR5LiBJJ2xsIGJldCB0aGF0J3Mgd2hlcmUgdGhlIGFjdHVhbCBkcml2ZXIgcmVnaXN0cmF0aW9uLCBwcm9iZSwgYW5kIGV2ZXJ5dGhpbmcgaGFwcGVucy4gVGltZSB0byBjb25maXJtIGFuZCBkaXZlIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoyMi4zNjMzNjY2MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTE1MTIwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjIyLjQxMzUwMDI2MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5ODAxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgU0RJTyBkcml2ZXIgaXMgcmVnaXN0ZXJlZCwgYW5kIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIGBzZGlvLmNgLiBUaGF0IGZpbGUgaXMgdXN1YWxseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgU0RJTy1zcGVjaWZpYyBvcGVyYXRpb25zLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgIGZ1bmN0aW9uLCBhcyB0aGF0J3MgY2xlYXJseSB0aGUga2V5IGZ1bmN0aW9uIGZvciB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIGF0dGFjaG1lbnQgdG8gdGhlIFNESU8gc3Vic3lzdGVtLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHN0cnVjdHVyZSBpcyBwYXNzZWQsIHdoYXQgdGhlIGRldmljZSBtYXRjaGluZyBwcm9jZXNzIGxvb2tzIGxpa2UsIGFuZCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgbWFuYWdlZCBhdCB0aGlzIHN0YWdlLiBJIGV4cGVjdCB0byBmaW5kIGluZm9ybWF0aW9uIG9uIHByb2JlIGFuZCByZW1vdmUgZnVuY3Rpb25zIGhlcmUsIGFuZCBpZGVhbGx5LCBob29rcyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nIGFzIHdlbGwuIEZpbmRpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGludG8gdGhlIGRyaXZlcidzIGxpZmVjeWNsZSBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIG92ZXJhbGwgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjI1LjcxMzMwNDkzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5OTE0MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNkaW9fcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjUuNzU3MzA3ODcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mzk1NDgzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuSG1tLCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBTRElPIGRyaXZlciBpcyBnZXR0aW5nIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc3lzdGVtLiBUaGF0J3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcCwgcmlnaHQ/IEFscmlnaHQsIGxldCdzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2Ug4oCTIG5vIG5lZWQgdG8gYmVhdCBhcm91bmQgdGhlIGJ1c2guIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBzZGlvLmNgIGZpbGUuIFRoZSBmYXN0ZXN0IHdheSB0byBzZWUgaG93IGl0J3MgaW5pdGlhbGl6ZWQgaXMgdG8gbG9vayBmb3IgdGhlIGtleSBmdW5jdGlvbnM6IEknbSBsb29raW5nIGZvciBlaXRoZXIgYSBgbW9kdWxlX2luaXRgIG1hY3JvLCBiZWNhdXNlIGl0J3MgdGhlIHN0YW5kYXJkIHdheSB0byBzZXQgdXAgZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIHRoZSBrZXJuZWwsIG9yIGEgZGlyZWN0IGNhbGwgdG8gYSBgcmVnaXN0ZXJgIGZ1bmN0aW9uLiBJIGV4cGVjdCBvbmUgb2YgdGhvc2UgaXMgZ29pbmcgdG8gdGVsbCBtZSBleGFjdGx5IGhvdyBhbmQgd2hlbiB0aGlzIHRoaW5nIGlzIGhvb2tlZCBpbnRvIHRoZSBzeXN0ZW0uIEl0IHNob3VsZCBiZSBwcmV0dHkgb2J2aW91cywgYW5kIGZyb20gdGhlcmUgSSBjYW4gdHJhY2UgdGhlIGNhbGwgZmxvdyBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MjkuMTk2ODU5NjY4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAxNTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTUxMD1zdGF0aWMgaW50IG54cHdpZmlfaW5pdF9zZGlvX25ld19tb2RlKHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzo1Mjc6XFx0LyogQ29uZmlndXJlIGNtZCBwb3J0IGFuZCBlbmFibGUgcmVhZGluZyByeCBsZW5ndGggZnJvbSB0aGUgcmVnaXN0ZXIgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtNTI4LVxcdHJldCA9IG54cHdpZmlfcmVhZF9yZWcoYWRhcHRlciwgY2FyZC1cXHUwMDNlcmVnLVxcdTAwM2VjbWRfY2ZnXzAsIFxcdTAwMjZyZWcpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTczMD1zdGF0aWMgaW50IG54cHdpZmlfc2Rpb19lbmFibGVfaG9zdF9pbnQoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy03NDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjc0NTpcXHQvKiBTaW1wbHkgd3JpdGUgdGhlIG1hc2sgdG8gdGhlIHJlZ2lzdGVyICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTc0Ni1cXHRyZXQgPSBueHB3aWZpX3dyaXRlX3JlZ19sb2NrZWQoZnVuYywgY2FyZC1cXHUwMDNlcmVnLVxcdTAwM2Vob3N0X2ludF9tYXNrX3JlZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYz03OTI9c3RhdGljIGludCBueHB3aWZpX3Byb2dfZndfd19oZWxwZXIoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NDMtXFx0XFx0XFx0XFx0bnhwd2lmaV9kYmcoYWRhcHRlciwgRVJST1IsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjg0NDpcXHRcXHRcXHRcXHRcXHQgICAgXFxcImRldiBCQVNFMCByZWdpc3RlciByZWFkIGZhaWxlZDpcXFxcdFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtODQ1LVxcdFxcdFxcdFxcdFxcdCAgICBcXFwiYmFzZTA9JSMwNFgoJWQpLiBUZXJtaW5hdGluZyBkbmxkXFxcXG5cXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTg1Mi1cXHRcXHRcXHRcXHRueHB3aWZpX2RiZyhhZGFwdGVyLCBFUlJPUixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6ODUzOlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZGV2IEJBU0UxIHJlZ2lzdGVyIHJlYWQgZmFpbGVkOlxcXFx0XFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy04NTQtXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJiYXNlMT0lIzA0WCglZCkuIFRlcm1pbmF0aW5nIGRubGRcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MTYyNT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoxNjI2Om54cHdpZmlfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYyNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMTYzNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTYzODpzdGF0aWMgaW50IG54cHdpZmlfcmVnaXN0ZXJfZGV2KHN0cnVjdCBueHB3aWZpX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2Mzkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTE2ODM9c3RhdGljIGludCBueHB3aWZpX2luaXRfc2RpbyhzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2OTQtXFx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJ3QgZG8gdGhpcyB3ZSBnZXQgYSBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MTY5NTpcXHQgKiBhcyBzb29uIGFzIHdlIHJlZ2lzdGVyIHRoZSBpcnEuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTE2OTYtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MjE1Nj1zdGF0aWMgdm9pZCBueHB3aWZpX3NkaW9fZGV2aWNlX2R1bXAoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTY1Oi8qIER1bXAgU0RJTyBmdW5jdGlvbiBhbmQgc2NyYXRjaCByZWdpc3RlcnMgaW50byBkcnZfYnVmLiAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTY2LXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MjE2Nz1ueHB3aWZpX3NkaW9fcmVnX2R1bXAoc3RydWN0IG54cHdpZmlfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqZHJ2X2J1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTc4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTc5OlxcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIE1TRywgXFxcIlNESU8gcmVnaXN0ZXIgZHVtcCBzdGFydFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxODAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjE5MC1cXHRcXHRjYXNlIDA6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIxOTE6XFx0XFx0XFx0LyogUmVhZCB0aGUgcmVnaXN0ZXJzIG9mIFNESU8gZnVuY3Rpb24wICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTItXFx0XFx0XFx0ZnVuYyA9IGNvdW50O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIxOTYtXFx0XFx0Y2FzZSAxOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMTk3OlxcdFxcdFxcdC8qIFJlYWQgdGhlIHJlZ2lzdGVycyBvZiBTRElPIGZ1bmN0aW9uMSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMTk4LVxcdFxcdFxcdGZ1bmMgPSBjb3VudDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjA5LVxcdFxcdGRlZmF1bHQ6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIyMTA6XFx0XFx0XFx0LyogUmVhZCB0aGUgc2NyYXRjaCByZWdpc3RlcnMgb2YgU0RJTyBmdW5jdGlvbjEgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmMtMjIxMS1cXHRcXHRcXHRpZiAoY291bnQgPT0gNClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMjUzOlxcdG54cHdpZmlfZGJnKGFkYXB0ZXIsIE1TRywgXFxcIlNESU8gcmVnaXN0ZXIgZHVtcCBlbmRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYy0yMjU0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jPTIyNTg9c3RhdGljIHZvaWQgbnhwd2lmaV9zZGlvX3VwX2RldihzdHJ1Y3Qgbnhwd2lmaV9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyODUtXFx0ICogZnJvbSB0aGUgYm9vdGxvYWRlci4gSWYgd2UgZG9uJ3QgZG8gdGhpcyB3ZSBnZXQgYSBpbnRlcnJ1cHRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM6MjI4NjpcXHQgKiBhcyBzb29uIGFzIHdlIHJlZ2lzdGVyIHRoZSBpcnEuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyODctXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmM9MjI5ND1zdGF0aWMgc3RydWN0IG54cHdpZmlfaWZfb3BzIHNkaW9fb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIyOTktXFx0LnByb2dfZncgPSBueHB3aWZpX3Byb2dfZndfd19oZWxwZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jOjIzMDA6XFx0LnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfcmVnaXN0ZXJfZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL3NkaW8uYzoyMzAxOlxcdC51bnJlZ2lzdGVyX2RldiA9IG54cHdpZmlfdW5yZWdpc3Rlcl9kZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvc2Rpby5jLTIzMDItXFx0LmVuYWJsZV9pbnQgPSBueHB3aWZpX3NkaW9fZW5hYmxlX2hvc3RfaW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjoyOS4yNDQ4ODU1NzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDc3ODQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBTRElPIERyaXZlciBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBTRElPIHNpdHVhdGlvbiBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgb3V0IHRoZSBlc3NlbnRpYWwgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBJIHNlZSBgc2Rpb19vcHNgIGluIHRoZSBtaXgsIGFuZCBpdCBoYXMgYHJlZ2lzdGVyX2RldmAgYW5kIGB1bnJlZ2lzdGVyX2RldmAgbWV0aG9kcy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSB1bmRlcnN0YW5kIHRoYXQgYW55IGRyaXZlciByZWdpc3RlcmluZyB3aXRoIFNESU8gaXMgbGlrZWx5IHV0aWxpemluZyB0aGVzZS5cblxuTm93LCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXRzZWxmLCB0aGVuIEkgc2hvdWxkIGludmVzdGlnYXRlIGBzZGlvLmNgLiBLbm93aW5nIGhvdyB0aGUgU0RJTyBmcmFtZXdvcmsgd29ya3MsIG15IG5leHQgbW92ZSB3b3VsZCBiZSB0byBsb29rIGZvciBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgLiBUaGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBjZW50cmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGhvdyBhIG5ldyBTRElPIGRyaXZlciBnZXRzIGludGVncmF0ZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGFjdHVhbCBkZXZpY2UgcmVnaXN0cmF0aW9uIGhhcHBlbmluZyB0aGVyZS4gQW5kIGxpa2VseSB1bnJlZ2lzdHJhdGlvbiB0aGVyZSBhcyB3ZWxsLCBidXQgYHVucmVnaXN0ZXJfZGV2YCBvZiBgc2Rpb19vcHNgIG1heSBiZSB0aGUgY29yZSBvZiB0aGF0IHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDk1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzIuODc5NjY3MTgzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg4MTcwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb19yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NjozMi45Mjc1NTUxOTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MjkyMjA0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5ICpob3cqIHRoaXMgU0RJTyBkcml2ZXIgaXMgYmVpbmcgcmVnaXN0ZXJlZCB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSBjb250ZXh0LCBpcyB0byBjaGVjayB0aGUgZW5kIG9mIHRoZSBgc2Rpby5jYCBzb3VyY2UgZmlsZS4gT2Z0ZW4sIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uIHJvdXRpbmVzIGFyZSBwbGFjZWQgdGhlcmUsIGxvZ2ljYWxseSB0eWluZyB0aGUgZmlsZSdzIHByaW1hcnkgZnVuY3Rpb25hbGl0eSB0byB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBiZWdpbiBkaWdnaW5nLiBMZXQncyBzZWUgd2hhdCBgc2Rpby5jYCdzIHRhaWwgaGFzIHRvIHRlbGwgdXMuIEknbGwgYmV0IGl0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzYuNDAwNDgwNjI5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9zZGlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMwMDpcXHRcXHQucmVnaXN0ZXJfZGV2ID0gbnhwd2lmaV9yZWdpc3Rlcl9kZXYsXFxuMjMwMTpcXHRcXHQudW5yZWdpc3Rlcl9kZXYgPSBueHB3aWZpX3VucmVnaXN0ZXJfZGV2LFxcbjIzMDI6XFx0XFx0LmVuYWJsZV9pbnQgPSBueHB3aWZpX3NkaW9fZW5hYmxlX2hvc3RfaW50LFxcbjIzMDM6XFx0XFx0LmRpc2FibGVfaW50ID0gbnhwd2lmaV9zZGlvX2Rpc2FibGVfaG9zdF9pbnQsXFxuMjMwNDpcXHRcXHQucHJvY2Vzc19pbnRfc3RhdHVzID0gbnhwd2lmaV9wcm9jZXNzX2ludF9zdGF0dXMsXFxuMjMwNTpcXHRcXHQuaG9zdF90b19jYXJkID0gbnhwd2lmaV9zZGlvX2hvc3RfdG9fY2FyZCxcXG4yMzA2OlxcdFxcdC53YWtldXAgPSBueHB3aWZpX3BtX3dha2V1cF9jYXJkLFxcbjIzMDc6XFx0XFx0Lndha2V1cF9jb21wbGV0ZSA9IG54cHdpZmlfcG1fd2FrZXVwX2NhcmRfY29tcGxldGUsXFxuMjMwODpcXHRcXG4yMzA5OlxcdFxcdC8qIFNESU8gc3BlY2lmaWMgKi9cXG4yMzEwOlxcdFxcdC51cGRhdGVfbXBfZW5kX3BvcnQgPSBueHB3aWZpX3VwZGF0ZV9tcF9lbmRfcG9ydCxcXG4yMzExOlxcdFxcdC5jbGVhbnVwX21wYV9idWYgPSBueHB3aWZpX2NsZWFudXBfbXBhX2J1ZixcXG4yMzEyOlxcdFxcdC5jbWRyc3BfY29tcGxldGUgPSBueHB3aWZpX3NkaW9fY21kcnNwX2NvbXBsZXRlLFxcbjIzMTM6XFx0XFx0LmV2ZW50X2NvbXBsZXRlID0gbnhwd2lmaV9zZGlvX2V2ZW50X2NvbXBsZXRlLFxcbjIzMTQ6XFx0XFx0LmRubGRfZncgPSBueHB3aWZpX3NkaW9fZG5sZF9mdyxcXG4yMzE1OlxcdFxcdC5jYXJkX3Jlc2V0ID0gbnhwd2lmaV9zZGlvX2NhcmRfcmVzZXQsXFxuMjMxNjpcXHRcXHQucmVnX2R1bXAgPSBueHB3aWZpX3NkaW9fcmVnX2R1bXAsXFxuMjMxNzpcXHRcXHQuZGV2aWNlX2R1bXAgPSBueHB3aWZpX3NkaW9fZGV2aWNlX2R1bXAsXFxuMjMxODpcXHRcXHQuZGVhZ2dyX3BrdCA9IG54cHdpZmlfZGVhZ2dyX3NkaW9fcGt0LFxcbjIzMTk6XFx0XFx0LnVwX2RldiA9IG54cHdpZmlfc2Rpb191cF9kZXYsXFxuMjMyMDpcXHR9O1xcbjIzMjE6XFx0XFxuMjMyMjpcXHRtb2R1bGVfc2Rpb19kcml2ZXIobnhwd2lmaV9zZGlvKTtcXG4yMzIzOlxcdFxcbjIzMjQ6XFx0TU9EVUxFX0FVVEhPUihcXFwiTlhQIEludGVybmF0aW9uYWwgTHRkLlxcXCIpO1xcbjIzMjU6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJOWFAgV2lGaSBTRElPIERyaXZlciB2ZXJzaW9uIFxcXCIgU0RJT19WRVJTSU9OKTtcXG4yMzI2OlxcdE1PRFVMRV9WRVJTSU9OKFNESU9fVkVSU0lPTik7XFxuMjMyNzpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuMjMyODpcXHRNT0RVTEVfRklSTVdBUkUoSVc2MVhfU0RJT19GV19OQU1FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6MzYuNDAwNjQ2NTI5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDQ5ODk2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqU0RJTyBEcml2ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBtb2R1bGVfc2Rpb19kcml2ZXIobnhwd2lmaV9zZGlvKTtgIGNhbGwsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgY29kZSByZWdpc3RlcnMgYW4gU0RJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuICpmdXp6KiBTRElPIGRyaXZlcnM/IEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbG9va2VkIGNsb3NlbHkgYXQgaXRzIGNhcGFiaWxpdGllcy4gTm93LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIHN5emthbGxlciBoYXMgYSBnb29kIFVTQiBlbXVsYXRpb24gdXNpbmcgYGR1bW15X2hjZGAsIGFuZCBpdCBoYXMgc29tZSBsaW1pdGVkIFBDSSBzdXBwb3J0LCB0aG91Z2ggdXN1YWxseSBub3QgdGFyZ2V0ZWQgYXQgc3BlY2lmaWMgZGV2aWNlcy4gQnV0IEkgZG9uJ3QgdGhpbmsgaXQgaGFzIHByb3BlciBTRElPIGVtdWxhdGlvbiDigJMgaW4gZmFjdCwgSSdtIHByZXR0eSBzdXJlIGl0ICpkb2Vzbid0Ki4gU28sIHRoYXQgcGF0aCBsb29rcyBibG9ja2VkLlxuXG5Ib2xkIG9uLCBiZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkcml2ZXIgaXNuJ3QgaW5zdGFudGlhdGVkIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gSXMgdGhlcmUgKmFueSogY2hhbmNlIHRoYXQgdGhpcyBgbnhwd2lmaWAgZGV2aWNlIGlzIHNvbWVob3cgYWxzbyBzdXBwb3J0ZWQgdGhyb3VnaCBhIFBDSSBvciBVU0IgaW50ZXJmYWNlPyBUaGF0J3MgdGhlIG9ubHkgb3RoZXIgd2F5IEkgY2FuIHRoaW5rIG9mIHRoYXQgbWlnaHQgb2ZmZXIgYSBzeXprYWxsZXIgZW50cnlwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0Njo0MS4xNDU2MzkyMDdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc5Nzg5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0Njo0MS4yNjQ0NDUzNDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA1NjIwNDA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjE0MDE1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0Njo0My4zMjA2NTI5NDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzU0MjA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfdXNiX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjQzLjM2NjQxODQwM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTY1ODY1MjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0RJTyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciBhbmQgaXQncyBjb25maXJtZWQsIGl0J3MganVzdCBhbiBTRElPIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gU0RJTyBkZXZpY2VzIGJlIGZ1enplZCBlZmZlY3RpdmVseT8gSSdtIGltbWVkaWF0ZWx5IHJlbWluZGVkIG9mIHRoZSBkaWZmaWN1bHRpZXMgaW4gZnV6emluZyBkcml2ZXJzIHRoYXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycywgb3IgU21hcnROSUNzLCBvciBHUFVzLiBUaG9zZSB1c3VhbGx5IHJlcXVpcmUgYWN0dWFsIFBDSWUgY2FyZHMsIHdoaWNoIFFFTVUgZG9lc24ndCBmdWxseSBlbXVsYXRlLiBUaGUgc2FtZSB3b3VsZCBhcHBseSB0byBTRElPLCB3aGljaCBhbHNvIGRlbWFuZHMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCByaWdodD8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZG91YmxlLWNoZWNrIGlmIFFFTVUgZXZlbiBwcm92aWRlcyBhbnkgU0RJTyBlbXVsYXRpb24gdGhhdCBzeXprYWxsZXIgY291bGQgbGV2ZXJhZ2UuXG5cbkkga25vdyBRRU1VICpkb2VzKiBoYXZlIFNEIGNhcmQgZW11bGF0aW9uLCBidXQgU0RJTyBpcyBkaXN0aW5jdC4gRXZlbiBpZiB0aGVyZSdzIHNvbWUgU0RJTyBzdXBwb3J0LCBJIGRvdWJ0IHN5emthbGxlciBoYXMgYSBtZWNoYW5pc20gdG8gaW5qZWN0IFNESU8gZGV2aWNlcyBhbmQgZnV6eiB0aGVtIGxpa2UgaXQgZG9lcyB3aXRoIFVTQiB1c2luZyByYXctZ2FkZ2V0IG9yIGR1bW15X2hjZC5cblxuTm93LCBhIHBvc3NpYmlsaXR5IHBvcHMgaW50byBteSBoZWFkLiBDb3VsZCB0aGlzIGRyaXZlciBiZSBhY2Nlc3NlZCB2aWEgYG1hYzgwMjExX2h3c2ltYD8gQnV0IG5vLCBgbWFjODAyMTFfaHdzaW1gIGlzIGEgc29mdHdhcmUgc2ltdWxhdG9yIGZvciBgbWFjODAyMTFgLCBhbmQgdGhpcyBkcml2ZXIgdXRpbGl6ZXMgYENGRzgwMjExYCBkaXJlY3RseSwgc28gaXQncyBhIFwiZnVsbG1hY1wiIGRyaXZlci4gSXQgcmVnaXN0ZXJzIGRpcmVjdGx5IHdpdGggY2ZnODAyMTEuIEJ1dCB0aGF0IHJlcXVpcmVzIGl0IHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBmaXJzdC4gQW5kIGJlaW5nIGFuIFNESU8gZHJpdmVyLCBwcm9iaW5nIHJlcXVpcmVzIGFuIFNESU8gZGV2aWNlLlxuXG5JIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgaW50ZXJmYWNlcyBJIG1pZ2h0IGhhdmUgbWlzc2VkIChVU0IsIFBDSWUpLiBUaGUgS2NvbmZpZyBvbmx5IG1lbnRpb25zIGBOWFBXSUZJX1NESU9gLiBSaWdodC4gTGV0IG1lIGRvdWJsZS1jaGVjayBmb3IgUENJIG9yIFVTQiBkcml2ZXJzLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBXYWl0LCBJIGFscmVhZHkgY2hlY2tlZCBmb3IgUENJIGFuZCBVU0IgZHJpdmVycyB1c2luZyBgbW9kdWxlX3BjaV9kcml2ZXJgIGFuZCBgbW9kdWxlX3VzYl9kcml2ZXJgLiBTbywgSSdsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCB0aGUgb3RoZXIgZmlsZXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTk6NDY6NTAuNTMyMjg4Njc0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcIjExYWMuY1wiLFxuICAgIFwiMTFhYy5oXCIsXG4gICAgXCIxMWF4LmNcIixcbiAgICBcIjExYXguaFwiLFxuICAgIFwiMTFoLmNcIixcbiAgICBcIjExbi5jXCIsXG4gICAgXCIxMW4uaFwiLFxuICAgIFwiMTFuX2FnZ3IuY1wiLFxuICAgIFwiMTFuX2FnZ3IuaFwiLFxuICAgIFwiMTFuX3J4cmVvcmRlci5jXCIsXG4gICAgXCIxMW5fcnhyZW9yZGVyLmhcIixcbiAgICBcImNmZy5oXCIsXG4gICAgXCJjZmc4MDIxMS5jXCIsXG4gICAgXCJjZmc4MDIxMS5oXCIsXG4gICAgXCJjZnAuY1wiLFxuICAgIFwiY21kZXZ0LmNcIixcbiAgICBcImNtZGV2dC5oXCIsXG4gICAgXCJkZWJ1Z2ZzLmNcIixcbiAgICBcImV0aHRvb2wuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaWUuY1wiLFxuICAgIFwiaW5pdC5jXCIsXG4gICAgXCJqb2luLmNcIixcbiAgICBcIm1haW4uY1wiLFxuICAgIFwibWFpbi5oXCIsXG4gICAgXCJzY2FuLmNcIixcbiAgICBcInNkaW8uY1wiLFxuICAgIFwic2Rpby5oXCIsXG4gICAgXCJzdGFfY2ZnLmNcIixcbiAgICBcInN0YV9jbWQuY1wiLFxuICAgIFwic3RhX2V2ZW50LmNcIixcbiAgICBcInN0YV9yeC5jXCIsXG4gICAgXCJzdGFfdHguY1wiLFxuICAgIFwidHhyeC5jXCIsXG4gICAgXCJ1YXBfY21kLmNcIixcbiAgICBcInVhcF9ldmVudC5jXCIsXG4gICAgXCJ1YXBfdHhyeC5jXCIsXG4gICAgXCJ1dGlsLmNcIixcbiAgICBcInV0aWwuaFwiLFxuICAgIFwid21tLmNcIixcbiAgICBcIndtbS5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE5OjQ2OjUwLjUzMjQwODA4NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTYzNjI3MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSB0YWtlbiBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IGNvbmNsdXNpb24uIEZpcnN0IG9mZiwgdGhlIGZpbGUgbGlzdCBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbi4gVGhpcyBwYXRjaCBpcyBzb2xlbHkgdG91Y2hpbmcgdGhlIGBzZGlvLmNgIGZpbGUgd2l0aGluIHRoZSBOWFAgV2ktRmkgZHJpdmVyLCBhbmQgcmVsYXRlZCBmaWxlcy4gVGhlcmUncyBubyBtZW50aW9uIG9mIGFueSBnZW5lcmljIFVTQiwgUENJZSwgb3Igb3RoZXIgY29yZSBrZXJuZWwgY29tcG9uZW50cywganVzdCB0aGUgTlhQIHNwZWNpZmljIFNESU8gaW1wbGVtZW50YXRpb24uXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGRyaXZlciBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgTlhQIElXNjF4IGhhcmR3YXJlLiAgVGhpcyBpc24ndCBhbiBTRElPIGdlbmVyaWMgZHJpdmVyOyBpdCdzIGEgKnZlbmRvci1zcGVjaWZpYyogZHJpdmVyLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgc3RhbmRhcmQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhpcyBraW5kIG9mIGhhcmR3YXJlIHByb3Blcmx5LCB3aGljaCBtZWFucyB0aGUgY29kZSBwYXRocyB3aXRoaW4gdGhpcyBkcml2ZXIgYXJlIHNpbXBseSB1bnJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIHZlcnkga2luZCBmdXp6aW5nIHdvdWxkIGJlIGRvbmUgb24uXG5cbkkgYWxzbyBkb3VibGUtY2hlY2tlZCB3aXRoIG15IGtub3dsZWRnZSBvZiBTeXprYWxsZXIncyBjYXBhYmlsaXRpZXMuIEkga25vdyBpdCBjYW4gZnV6eiBVU0IgdmlhIGBkdW1teV9oY2RgLCBQQ0kgdG8gYSBsaW1pdGVkIGV4dGVudCwgYW5kIHZoY2kgZm9yIGJsdWV0b290aCwgYnV0IEknbSBjZXJ0YWluIHRoZXJlJ3Mgbm8ga25vd24gc3VwcG9ydCBmb3IgU0RJTy4gIFRoZSBkb2N1bWVudGF0aW9uIGFsc28gY29uZmlybXMgbXkgYXNzZXNzbWVudC4gSXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBjb2RlIHBhdGhzIHRoYXQgYXJlIG9ubHkgcmVhY2hhYmxlIHdpdGggcGh5c2ljYWwgaGFyZHdhcmUgdW5hdmFpbGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHNob3VsZG4ndCBiZSBjb25zaWRlcmVkIGZvciBmdXp6aW5nLCBhbmQgdGhpcyBjbGVhcmx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS5cblxuRmluYWxseSwgSSBjYXJlZnVsbHkgcmV2aWV3ZWQgdGhlIHBhdGNoIGZpbGVzIHRoZW1zZWx2ZXM6IGAxMWF4LmNgLCBgMTFuLmNgLCBgY2ZnODAyMTEuY2AsIGBtYWluLmNgLCBgbWFpbi5oYCwgYHNkaW8uY2AsIGB1YXBfdHhyeC5jYCwgYW5kIGB1dGlsLmNgLCBhbGwgaW4gdGhlIGBueHB3aWZpYCBkaXJlY3RvcnkuIFRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgTlhQIFdpRmkgZHJpdmVyLCBhbmQgdGhleSByZXF1aXJlIGEgcGh5c2ljYWwgU0RJTyBpbnRlcmZhY2UuIEkgY2FuIGNvbmZpcm0gdGhpcyBwYXRjaCBvbmx5IGFmZmVjdHMgdGhlIE5YUCBXaUZpIGRyaXZlciwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvYCBkaXJlY3RvcnkuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciBpcyBoYXJkd2FyZS1zcGVjaWZpYywgYW5kIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cywgSSBoYXZlIHRvIGNvbmNsdWRlIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjUyLCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIyLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxOTo0NzowMC4wOTYwNDE2OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTlhQIFdpRmkgZHJpdmVyIChueHB3aWZpKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU0RJTyBkcml2ZXIgZm9yIE5YUCBJVzYxeCBoYXJkd2FyZS4gU2luY2UgdGhpcyByZXF1aXJlcyBwaHlzaWNhbCBTRElPIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlIGRyaXZlciBjYW5ub3QgcHJvYmUgYW5kIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBOWFAgV2lGaSBkcml2ZXIgKG54cHdpZmkpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTRElPIGRyaXZlciBmb3IgTlhQIElXNjF4IGhhcmR3YXJlLiBTaW5jZSB0aGlzIHJlcXVpcmVzIHBoeXNpY2FsIFNESU8gaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGUgZHJpdmVyIGNhbm5vdCBwcm9iZSBhbmQgaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5dns4[1] Phase: Running StartedAt: 2026-08-03 19:47:11 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dns4[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-03 19:47:11 +0000 UTC FinishedAt: 2026-08-03 19:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}